Descrição
TCGenQry [AS] - Permite a abertura de uma query diretamente no banco de dados utilizado na conexão atual, mediante uso da RDD TOPCONN..
|
Sintaxe
| TCGenQry( <xPar1>, <xPar2>, <cQuery> ) |
Parâmetros
| Par |
Nome |
Tipo |
Descrição |
Default |
Obg |
Ref |
01
|
xPar1
|
Indefinido
|
Compatibilidade
|
|
|
|
| 02 |
xPar2
|
Indefinido
|
Compatibilidade
|
|
|
|
| 03 |
cQuery
|
Caracter
|
Indica a expressão da query que será aberta
|
X |
|
|
Retorno
| Retorno |
Tipo |
Descrição |
| cRet |
Caracter
|
Retorna sempre uma string vazia.
|
Exemplo
#INCLUDE "TOTVS.CH"
Static cCRLF := CRLF
User Function TCGenQry()
Local cQuery := ""
If Select("Qry1") > 0//Verifica se ja existe alias criado
Qry1->( dbCloseArea() )
Endif
cQuery := cCRLF + " SELECT "
cQuery += cCRLF + " A1_NOME "
cQuery += cCRLF + " FROM "
cQuery += cCRLF + RetSqlName("SA1") + " SA1 "
cQuery += cCRLF + " WHERE "
cQuery += cCRLF + " SA1.D_E_L_E_T_ <> '*' "
DbUseArea(.T.,"TOPCONN",TcGenQry(,,ChangeQuery(cQuery)),"Qry1",.T.,.T.)
If Qry1->( !EOF() )
MsgInfo( 'Query Dados', 'UniversoADVPL' )
Endif
Return( Nil )Resultado
Informações adicionais
|
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 daquery, 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().Logo, ao abrirmos uma query no AdvPL, podemos retornar diretamente apenas 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
|
|
O retorno desta função deve ser passado como o 3° parâmetro da função DbUseArea() — que corresponderia ao nome da tabela.
|
Gostou? Compartilhe com seus amigos e deixe um comentário! 😎