Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Composition Setup
import.css=/download/attachments/3279126062824/newLayouttecnologia.css
Portuguese

Pagetitle
TCGenQry
TCGenQry

Função: TCGenQry

Permite

...

a

...

abertuda

...

de

...

uma

...

query

...

diretamente

...

no

...

banco

...

de

...

dados

...

utilizado

...

na

...

conexão

...

atual,

...

mediante

...

uso

...

da

...

RDD

...

TOPCONN.

...

O

...

retorno

...

desta

...

função

...

deve

...

ser

...

passado

...

como

...

parâmetro

...

da

...

função

...

DbUseArea, conforme exemplo abaixo.

Sintaxe

Bloco de código
collapsefalse
TCGenQry(
[ xPar1], [ xPar2], < cQuery> ) --> cRet 
 < xPar1 >, < xPar2 >, < cQuery > )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

xPar1

...

nil

Compatibilidade.

...

X

 

xPar2

...

nil

Compatibilidade.

...

X

 

cQuery

...

caractere

Indica a expressão da query que será aberta.

X

 

Retorno

...

Nome

Tipo

...

Descrição

cRet

...

caractere

Retorna sempre uma string vazia.

Observações

  • Essa função determina que a próxima chamada à

...

  • função DBuseArea será a abertura de uma query na conexão atual com um SGBD, e não de uma tabela física, quando utilizada a RDD "TOPCONN". Devido à dependência direta da chamada subsequente da função DbUseArea

...

  • para a abertura efetifva da query, foi adotada a convenção de

...

  • chamar a função TCGenQry

...

  • como terceiro parâmetro para a função DbUseArea

...

  • .

A string contendo a query a ser aberta é enviada diretamente ao DBAccess, que por sua vez fará a execução do statement diretamente no SGBD em uso pela conexão, fará um "describe" das colunas de retorno do statement, e retornará em caso de sucesso a definição de colunas retornadas pela query.

...

O Application Server, por sua vez, ao receber a confirmação de sucesso da operação e a definição de colunas, vai abrir a query como se fosse uma tabela física normal, sob o alias especificado como parâmetro para a função DbUseArea(), onde a estrutura de dados dessa

...

tabela "virtual" corresponde a uma definição similar à retornada pela função DBStruct

...

.

Nota
icontrue
titleAtenção

Logo, ao abrirmos uma query no AdvPL, podemos retornar diretamente apenas

campos 

campos "caractere" (Char ou VarChar do SGBD) e numéricos (INT e/ou FLOAT). Caso alguma coluna selecionada não atenda estes quesitos, ela será removida da estrutura de retorno no momento da abertura da query.

Exemplos

Bloco de código
languagecpp
themeEclipse
linenumberstrue
collapsefalse
USER FUNCTION TEST()

  Local cJoin  := "JOIN"
  Local cTable := "T1"
  Local cQry  
User Function LeSX2()
Local cQuery
 := 
'SELECT X2_CHAVE CHAVE, R_E_C_N_O_ RECNO from SX2990'
// Função do Framework AdvPL, "ajusta" a query para sintaxes e ajustes
// específicos de acordo com o banco de dados da conexão atual
cQuery := ChangeQuery(cQuery)
dbUseArea(.T., 'TOPCONN', TCGenQry(,,cQuery),'TRB'
"SELECT field_name, field_type FROM t1 left join t2 on t1.field_name = t2.field_nick"
  
  TcLink()
  
  TCDelFile("T1")
  TCDelFile("T2")
  
  DBCreate("T1", {{"FIELD_NAME", "C", 10, 0}, ;
                  {"FIELD_TYPE", "C", 10, 0}}, "TOPCONN")
                  
  DBCreate("T2", {{"FIELD_NICK", "C", 10, 0}, ;
                  {"FIELD_AGE", "C", 10, 0}}, "TOPCONN")
                  
  DBUseArea(.T., "TOPCONN", cTable, (cTable), .F., .F. )
  
  (cTable)->( DBAppend( .F. ) )
  (cTable)->FIELD_NAME := "NOME"
  (cTable)->FIELD_TYPE := "TIPO"
  (cTable)->( DBCommit() )
  
  DBCloseArea()
  
  DBUseArea(.T., "TOPCONN", TCGenQry(NIL,NIL,cQry), (cJoin) , .F., .T.
)
While
 )
  
  WHILE !Eof()


    
conout
CONOUT("
Registro
FIELD_NAME 
do
= 
SX2:
" 
"
+
TRB->CHAVE)
 (cJoin)->FIELD_NAME)
  

  CONOUT("FIELD_TYPE = " + 
dbSkip
(
)EndDo
dbCloseArea()
Return
 
O mesmo exemplo acima, a função DbUseArea() poderia ser substituída pelo comando USE, com a seguinte sintaxe:
USE (TcGenQry(,,cQuery)) ALIAS TRB NEW VIA "TOPCONN"
Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server
 
cJoin)->FIELD_TYPE)
    DbSkip()
  ENDDO
  
  DBCloseArea()
  
  TCUnlink()
  
RETURN

Veja também