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
Nome | Tipo | Descrição | Obrigatório | Referência |
xPar1 | Nulo | Compatibilidade. | ||
xPar2 | Nulo | Compatibilidade. | ||
cQuery | Caracter | Indica 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