Importante

O parâmetro aBindParam e o conceito de bind de queries só está disponível a partir da lib label 20211116

Função: MPSysOpenQuery


Compatível Países:Todos
Sistemas Operacionais:Todos
Compatível às Bases de Dados:Todos
Nível de Acesso:Nível 1 (Acesso Clientes)
Idiomas:Português, Inglês, Espanhol
VersãoP12


Sintaxe
MPSysOpenQuery( cQuery , [cAlias] , [aSetField],[cDriver],[aBindParam] ) -> cAlias

Descrição
Abre um alias com a query informada.

Parâmetros


NomeTipoDescriçãoDefaultObrigatórioReferência
cQueryCaractereQuery a ser executada
x
cAliasCaractere

Alias que será atribuida a query.

GetNextAlias()

aSetFieldCaractere

Array com os campos para execução de TCSetField com a estrutura:
[1] Nome do Campo
[2] Tipo
[3] Tamanho
[4] Decimal




cDriverCaracterDriver a ser utilizado. Somente aceita o driver TOPCONN ou os drivers nativos do SQLITE (SQLITE_SYS, etc)


aBindParamArrayArray com os campos para inserção via statement. Deve ser enviado na mesma ordem dos campos da query e todos devem ser enviados. Ele é obrigatório caso a query estava utlizando o conceito de bind (vide exemplo abaixo)




Retorno
cAlias Alias com o qual a query foi criada.

Exemplo


user Function mybind()

Local cQuery        as character 
Local cAlias        as character 
Local aBindParam    as array 

cQuery := "SELECT E1_NUM FROM SE1T10 WHERE E1_FABOV = ? AND  D_E_L_E_T_ = ?"
cQuery := ChangeQuery(cQuery)

//os parametros DEVEM ser enviados na mesma ordem em que aparecem na query.
aBindParam := {'0', ' '}

cAlias  := MPSysOpenQuery(cQuery,,,,aBindParam)

(cAlias)->(DbCloseArea())

Return 

Exemplo sem bind
user Function MyOpen()

Local cQuery        as character 
Local cAlias        as character 

cQuery := "SELECT E1_NUM FROM SE1T10 WHERE E1_FABOV = '0' AND  D_E_L_E_T_ = ' '"
cQuery := ChangeQuery(cQuery)

cAlias  := MPSysOpenQuery(cQuery)

(cAlias)->(DbCloseArea())

Return 



Observações

Caso o alias passado já exista, o mesmo será fechado.

A alias atual não é alterada, ou seja, é necessário acessar a tabela via (cAlias)->CAMPO, ou efetuar um DbSelectArea(cAlias), e fazer o tratamento de salvar e restaurar área.


  • Sem rótulos

7 Comentários

  1. Não está documentado mas caso a área já esteja aberta, ela é fechada antes. Ótima função criada pela TOTVS.

    1. Obrigado Anderson Maciel pelo feedback, já corrigi a documentação! (sorriso)

  2. Eu preciso antes chamar a função ChangeQuery(), ou a MPSysOpenQuery() faz isso internamente ? 

    1. Júlio Wittwer, a função MPSysOpenQuery() apenas executa a query passada.

      Caso seja necessário, qualquer tratamento na query, deverá ser executado antes.

  3. Usuário desconhecido (denis.rodrigues)

    Bom dia,

    Duas dúvidas técnicas sobre a função.

    1- Quando utilizo a MPSysOpenQuery. Devo usar o dbSelectArea(cAlias) logo em seguida?

    2 - Digamos que se utilize essa função dentro de um laço (como no exemplo abaixo), ela vai deixar todas as áreas abertas se a variável cAlias for carregada com GetNextAlias() ?? Isso não é ruim?

    Ex:

    Local cAliasTemp := ""

    While <comando verdadeiro>

    cAliasTemp := GetNextAlias()

    cQuery := "SELECT * FROM"

    MPSysOpenQuery( cQuery, cAliasTemp,)

    EndDo

    obrigado

    1. Usuário desconhecido (denis.rodrigues), bom dia.

      1 - Não é necessário. Se você quiser deixar essa tabela ativa na área de trabalho pode sim usar o DBSelectArea. Outra forma é acessar o campo ponterando a tabela ex.: (cAlias)->(DbGoTop())

      2 - Não é nem um pouco aconselhável deixar um MPSysOpenQuery em um laço, a não ser que seja em um caso muito específico. Isso pode trazer grandes problemas de performance para o seu código. O melhor é utilizar a sintaxe SQL para fazer apenas uma query que consiga retornar todos os dados que você precisa.

       

      Abraço.

  4. Como excluo os arquivos temporarios criados no system por esta função?