Permite a abertura de uma query diretamente no banco de dados utilizado na conexão atual, mediante uso da RDD TOPCONN, informando através de um array de parâmetros os conteúdos dos campos para fazer BIND de valores na Query informada.
Sintaxe
TCGenQry2( < xPar1 >, < xPar2 >, < cQuery >, <aValues> )
Parâmetros
Nome | Tipo | Descrição | Obrigatório | Referência |
---|---|---|---|---|
xPar1 | nil | Compatibilidade, informar NIL | X | |
xPar2 | nil | Compatibilidade, informar NIL | X | |
cQuery | caractere | String contendo a query que será aberta. | X | |
aValues | array | Array de strings para fazer BIND dos parâmetros | X |
Retorno
Nome | Tipo | Descrição |
---|---|---|
cRet | caractere | Retorna sempre uma string vazia. |
Observações
- Essa função comporta-se internamente da mesma forma que a função TCGenQry(), para mais detalhes consulte a documentação da mesma.
- A query informada para abertura deve usar o identificador de bind "?" – interrogação – para indicar os pontos onde os valores informados no array devem ser utilizados.
- Mesmo que o Banco de Dados utilizado possua uma notação diferente para parametrização de valores – como é o caso do Banco de Dados ORACLE – deve ser usado o caractere "?" (interrogação), que será ajustado internamente pelo DBAccess para o Banco utilizado na conexão atual.
- A quantidade de "?" na Query deve corresponder ao número de elementos do array aValues informado.
- A substituição dos valores é feita na ordem das interrogações na Query: primeira interrogação corresponde ao primeiro elemento do array, segunda interrogação corresponde ao segundo elemento do array, e assim sucessivamente.
- O uso desta função facilita para o desenvolvedor e para a API Cliente do Banco de Dados utilizado, tornando a tarefa de parser e cache de statements do banco mais eficientes.
- Os valores informados no array aValues devem ser do tipo "C" Caractere do AdvPL. Caso um parâmetro informado como string deva ser interpretado como um dado numérico pelo SGDB, informe o número preferencialmente sem espaços em branco, e quando o valor não for inteiro – tiver parte decimal – utilize o "." (ponto) como separador decimal. Normalmente os bancos de dados realizam o ajuste e interpretação do valor como número automaticamente.
- O Array de parâmetros pode ser informado como uma variável AdvPL ou diretamente como um array montado como parâmetro na chamada da função.
- Os dados informados no array são considerados apenas no momento da abertura da Query.
- Esta funcionalidade está disponível a partir do TOTVS Application Server com build igual ou superior a 7.00.170117A gerados após 12/2008, e requer o DBAccess Build 20180606 ou superior.
Exemplos
#include 'totvs.ch' #include 'topconn.ch' USER FUNCTION TEST() Local cAlias := "QRY" Local cTable1 := "T1" Local cTable2 := "T2" Local cQry := "SELECT T1_NOME, T1_TIPO FROM T1 WHERE T1.TIPO = ? LEFT JOIN T2 on T1.T1_NOME = T2.T2_NICK" TCLink() IF TcCanOpen(cTable1) TCDelFile(cTable1) Endif IF TcCanOpen(cTable2) TCDelFile(cTable2) Endif DBCreate(cTable1, {{"T1_NOME", "C", 10, 0}, ; {"T1_TIPO", "C", 10, 0}}, "TOPCONN") DBCreate(cTable2, {{"T2_NICK", "C", 10, 0}, ; {"T2_AGE", "C", 10, 0}}, "TOPCONN") DBUseArea(.T., "TOPCONN", cTable1, (cTable1), .F., .F. ) (cTable1)->( DBAppend( .F. ) ) (cTable1)->T1_NOME := "JOHN" (cTable1)->T1_TIPO := "PESSOA" (cTable1)->( DBCommit() ) DBCloseArea() DBUseArea(.T., "TOPCONN", TCGenQry2(NIL,NIL,cQry, { "PESSOA" } ), (cAlias) , .F., .T. ) WHILE !Eof() CONOUT("T1_NOME = " + (cAlias)->T1_NOME) CONOUT("T1_TIPO = " + (cAlias)->T1_TIPO) DbSkip() ENDDO DBCloseArea() TCUnlink() RETURN
Veja também
- TCGenQry
- TCSetField
- TCLink
- TCUnlink
- DBUseArea
- DBStruct
- DBCreate
- DBCloseArea
- DBSkip
- TCDelFile
- Comando USE
- Comando TCQUERY
Visão Geral
Import HTML Content
Conteúdo das Ferramentas
Tarefas