Page tree
Skip to end of metadata
Go to start of metadata

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


aValuesarrayArray de strings para fazer BIND dos parâmetrosX

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


  • No labels