Árvore de páginas

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.

X


xPar2

nil

Compatibilidade.

X


cQuery

caractere

String contendo a query que será aberta.

X


aValues

vetor

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.

Atenção

Esta função não está disponível para uso com RPODB=SQLITE.

Exemplos

#include 'totvs.ch'
#include 'topconn.ch'
 
USER FUNCTION TEST()
 
Local cAlias := "QRY"
Local cTable1 := "T1"
Local cQry   := "SELECT CPOC1, CPOC2 FROM T1 WHERE T1.CPOC2 = ? "
 
TCLink()
 
IF TcCanOpen(cTable1)
    TCDelFile(cTable1)
Endif
 
DBCreate(cTable1, {{"CPOC1", "C", 10, 0}, ;
                   {"CPOC2", "C", 10, 0}}, "TOPCONN")
 
DBUseArea(.T., "TOPCONN", cTable1, (cTable1), .F., .F. )
 
(cTable1)->( DBAppend( .F. ) )
(cTable1)->CPOC1 := "JOHN"
(cTable1)->CPOC2 := "PESSOA"
(cTable1)->( DBCommit() )
 
DBCloseArea()
 
DBUseArea(.T., "TOPCONN", TCGenQry2(NIL,NIL,cQry, { "PESSOA" } ), (cAlias) , .F., .T. )
 
WHILE !Eof()
    CONOUT("CPOC1 = " + (cAlias)->CPOC1)
    CONOUT("CPOC2 = " + (cAlias)->CPOC2)
    DbSkip()
ENDDO
 
DBCloseArea()
 
TCUnlink()
 
RETURN

Veja também

  • Sem rótulos