Á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

Versão 1 Próxima »

Função: TCGenQry

Permite a execução de uma query string diretamente no banco de dados SGBD utilizado na conexão atual, mediante uso da RDD TOPCONN.

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()EndDodbCloseArea()Return
Advanced Protheus 6.09 , Advanced Protheus 7.10 , Microsiga Protheus 8.11 , Protheus 10 , TOTVS Application Server 10 , ByYou Application Server

  • Sem rótulos