Árvore de páginas

Você está vendo a versão antiga da página. Ver a versão atual.

Comparar com o atual Ver Histórico da Página

« Anterior Versão 4 Próxima »

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 o 3o parâmetro da função DbUseArea() -- que corresponderia ao nome da tabela.

TCGenQry ( [ xPar1], [ xPar2], < cQuery> ) --> cRet

 

NomeTipoDescriçãoObrigatórioReferência
xPar1NuloCompatibilidade.  
xPar2NuloCompatibilidade.  
cQueryCaracterIndica a expressão da query que será aberta.X 

 

cRet
    (caracter)
  • Retorna sempre uma string vazia.

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().

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.

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', .F., .T.)
While !Eof()
conout("Registro do SX2: "+TRB->CHAVE)
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

 

  • Sem rótulos