Importante
O parâmetro aBindParam e o conceito de bind de queries só está disponível a partir da lib label 20211116
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ão | P12 |
Sintaxe
MPSysOpenQuery( cQuery , [cAlias] , [aSetField],[cDriver],[aBindParam] ) -> cAlias
Descrição
Abre um alias com a query informada.
Parâmetros
Nome | Tipo | Descrição | Default | Obrigatório | Referência |
cQuery | Caractere | Query a ser executada | x | ||
cAlias | Caractere | Alias que será atribuida a query. | GetNextAlias() | ||
aSetField | Caractere | Array com os campos para execução de TCSetField com a estrutura: | |||
cDriver | Caracter | Driver a ser utilizado. Somente aceita o driver TOPCONN ou os drivers nativos do SQLITE (SQLITE_SYS, etc) | |||
aBindParam | Array | Array 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.
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas
7 Comentários
Anderson Maciel
Não está documentado mas caso a área já esteja aberta, ela é fechada antes. Ótima função criada pela TOTVS.
Arthur Fucher
Obrigado Anderson Maciel pelo feedback, já corrigi a documentação!![(sorriso)](/s/ougqdk/8804/xgjkrn/_/images/icons/emoticons/smile.svg)
Julio Wittwer
Eu preciso antes chamar a função ChangeQuery(), ou a MPSysOpenQuery() faz isso internamente ?
Arthur Fucher
Júlio Wittwer, a função MPSysOpenQuery() apenas executa a query passada.
Caso seja necessário, qualquer tratamento na query, deverá ser executado antes.
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
Guilherme Spadaccia Leme
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.
Antonio Carlos Ferreira
Como excluo os arquivos temporarios criados no system por esta função?