- Criado por Usuário desconhecido (rubens.santos), última alteração por Ieda Ferreira Alves Flock em 17 fev, 2023
Sintaxe
LET m_query_reference = _ADVPL_create_component(NULL,"LQUERY")
Métodos GET
Métodos acessíveis através da função _ADVPL_get_property
que permite recuperar e manipular os valores do componente:
Método GET: COUNT
Retorna a quantidade de registros encontrados na consulta efetuada pelo método EXECUTE.
Sintaxe
_ADVPL_get_property(< cReference >,"COUNT") => INTEGER
Retorno
Tipo | Descrição |
---|---|
INTEGER | Quantidade de registros encontrados na consulta. |
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_getCOUNT() #------------------------------------------------------------------------------# DEFINE l_count INTEGER LET l_count = _ADVPL_get_property(m_query_reference,"COUNT") END FUNCTION
Método GET: ERRMESSAGE
Retorna a mensagem de erro ocorrido na execução da query pelo método EXECUTE.
Sintaxe
_ADVPL_get_property(< cReference >,"ERRMESSAGE") => CHAR
Retorno
Tipo | Descrição |
---|---|
CHAR | Mensagem de erro ocorrido na execução da query. |
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_getERRMESSAGE() #------------------------------------------------------------------------------# DEFINE l_err_message CHAR(200) LET l_err_message = _ADVPL_get_property(m_query_reference,"ERRMESSAGE") END FUNCTION
Método GET: EXECUTE
Executa uma query SQL no banco de dados, permitindo limitar e paginar os registros encontrados.
Sintaxe
_ADVPL_get_property(< cReference >,"EXECUTE",< cSql >,< aRecord >,[ nIni ],[ nCount ]) => SMALLINT
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
cSql | CHAR(10000) | Query SQL que será executada e manipulada pelo componente. | Sim | |
aRecord | ARRAY OF RECORD | ARRAY OF RECORD onde serão salvos os dados encontrados na consulta.1 | Sim | |
nIni | INTEGER | Número do registro inicial para paginação dos registros encontrados na consulta. | Não | 1 |
nCount | INTEGER | Quantidade máxima de registros que devem ser retornadas na consulta.2 | Não |
1 Após a execução da query, o aRecord
é redimensionado para conter apenas a quantidade de registros encontrados.
2 Se informado nulo para o parâmetro nCount
, serão retornados todos os registros encontrados na consulta.
Retorno
Tipo | Descrição |
---|---|
SMALLINT | Retorna verdadeiro se o SQL foi executado com sucesso. |
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_teste() #------------------------------------------------------------------------------# DEFINE l_component VARCHAR(10) DEFINE l_sql_stmt CHAR(500) DEFINE l_status SMALLINT DEFINE la_menu_logix ARRAY[10] OF RECORD LIKE menu_logix.* INITIALIZE la_menu_logix TO NULL # Monta o SQL que será executado pelo componente. LET l_sql_stmt = "SELECT cod_sistema,", "cod_nivel_1,", "cod_nivel_2,", "cod_nivel_3,", "num_sequencia,", "cod_processo,", "cod_tip_processo,", "cod_help,", "cod_transacao,", "den_transacao,", "chave_sistema", " FROM menu_logix", " WHERE cod_processo IS NOT NULL", "ORDER BY cod_processo" # Executa a consulta acima permitindo retornar no máximo 10 registros a partir do 1o. LET l_component = _ADVPL_create_component(NULL,"LQUERY") LET l_status = _ADVPL_get_property(l_component,"EXECUTE",l_sql_stmt,la_menu_logix,1,10) CALL _ADVPL_destroy_component(l_component) LET l_component = NULL RETURN l_status END FUNCTION
Método GET: SQLCODE
Retorna o código SQL resultante da execução da query pelo método EXECUTE.
Sintaxe
|
Retorno
Tipo | Descrição |
---|---|
Tipo | Descrição |
INTEGER | Código SQL resultante da execução da query (possui o valor da global SQLCA.SQLCODE). |
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_getSQLCODE() #------------------------------------------------------------------------------# DEFINE l_sql_code INTEGER LET l_sql_code = _ADVPL_get_property(m_query_reference,"SQLCODE") END FUNCTION
Método GET: VALUE
Retorna o valor de uma determinada coluna para um determinado registro encontrado na execução da query pelo método EXECUTE.
Sintaxe
_ADVPL_get_property(< cReference >,"VALUE",< cColumn >,< nIndex >) => Mixed
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
cColumn | CHAR | Nome da coluna conforme definido no ARRAY OF RECORD informado no 4o parâmetro. | Sim | |
nIndex | INTEGER | Número da linha do registro do qual deseja-se retornar o valor da coluna. | Sim |
Retorno
Tipo | Descrição |
---|---|
Mixed | Valor da coluna informada encontrado na consulta para a linha do registro informado. |
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_getVALUE() #------------------------------------------------------------------------------# DEFINE l_cod_empresa LIKE empresa.cod_empresa LET l_cod_empresa = _ADVPL_get_property(m_query_reference,"VALUE","cod_empresa",10) END FUNCTION
Métodos SET
Métodos acessíveis através da função _ADVPL_set_property
que permite alterar e manipular os valores do componente:
Método ET: EVENT
Define um evento executado para cada registro encontrado na consulta da query do método EXECUTE.
Sintaxe
CALL _ADVPL_set_property(< cReference >,"EVENT",< cFunction >)
Parâmetros
Nome | Tipo | Descrição | Obrigatório? | Padrão |
---|---|---|---|---|
cFunction | CHAR | Função 4GL que será executada para cada registro encontrado na consulta.* | Sim |
* A função 4GL definida no evento deve estar preparada para receber um parâmetro do tipo INTEGER
que indicará a linha do registro atual da consulta. Ela deverá também retornar um valor SMALLINT
verdadeiro ou falso, caso retorne falso o registro atual será desconsiderado da lista.
Exemplo
#------------------------------------------------------------------------------# FUNCTION LQUERY_setEVENT() #------------------------------------------------------------------------------# CALL _ADVPL_set_property(m_query_reference,"EVENT","LQUERY_testeEvent") END FUNCTION #------------------------------------------------------------------------------# FUNCTION LQUERY_testeEvent(l_ind) #------------------------------------------------------------------------------# DEFINE l_ind INTEGER DEFINE lr_menu_logix RECORD LIKE menu_logix.* LET lr_menu_logix.cod_sistema = _ADVPL_get_property(m_query_reference,"VALUE","cod_sistema",l_ind) LET lr_menu_logix.cod_nivel_1 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_1",l_ind) LET lr_menu_logix.cod_nivel_2 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_2",l_ind) LET lr_menu_logix.cod_nivel_3 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_3",l_ind) LET lr_menu_logix.num_sequencia = _ADVPL_get_property(m_query_reference,"VALUE","num_sequencia",l_ind) LET lr_menu_logix.cod_processo = _ADVPL_get_property(m_query_reference,"VALUE","cod_processo",l_ind) LET lr_menu_logix.cod_tip_processo = _ADVPL_get_property(m_query_reference,"VALUE","cod_tip_processo",l_ind) LET lr_menu_logix.cod_help = _ADVPL_get_property(m_query_reference,"VALUE","cod_help",l_ind) LET lr_menu_logix.cod_transacao = _ADVPL_get_property(m_query_reference,"VALUE","cod_transacao",l_ind) LET lr_menu_logix.den_transacao = _ADVPL_get_property(m_query_reference,"VALUE","den_transacao",l_ind) LET lr_menu_logix.chave_sistema = _ADVPL_get_property(m_query_reference,"VALUE","chave_sistema",l_ind) CALL CONOUT("MENU LOGIX "||lr_menu_logix.cod_processo CLIPPED||".") RETURN TRUE END FUNCTION
Exemplo
DATABASE logix DEFINE m_query_reference VARCHAR(10) #------------------------------------------------------------------------------# FUNCTION LQUERY_teste() #------------------------------------------------------------------------------# DEFINE l_sql_stmt CHAR(500) DEFINE l_status SMALLINT DEFINE l_message CHAR(200) DEFINE la_menu_logix ARRAY[50] OF RECORD LIKE menu_logix.* DEFINE l_ind SMALLINT DEFINE l_length SMALLINT INITIALIZE la_menu_logix TO NULL # Monta o SQL que será executado pelo componente. LET l_sql_stmt = "SELECT cod_sistema,", "cod_nivel_1,", "cod_nivel_2,", "cod_nivel_3,", "num_sequencia,", "cod_processo,", "cod_tip_processo,", "cod_help,", "cod_transacao,", "den_transacao,", "chave_sistema", " FROM menu_logix WHERE cod_processo IS NOT NULL ORDER BY cod_processo" # Cria o componente LQUERY. LET m_query_reference = _ADVPL_create_component(NULL,"LQUERY") # Define um evento de exeução para cada registro encontrado. CALL _ADVPL_set_property(m_query_reference,"EVENT","LQUERY_testeEvent") # Executa o SQL, retornando 50 registros a partir do 250o registro. LET l_status = _ADVPL_get_property(m_query_reference,"EXECUTE",l_sql_stmt,la_menu_logix,250,50) # Se retornou falso, exibe a mensagem de erro em tela. IF NOT l_status THEN LET l_message = _ADVPL_get_property(m_query_reference,"ERRMESSAGE") CALL log0030_mensagem(l_message,"excl") RETURN FALSE END IF # Recupera a quantidade de registros encontrados na consulta. LET l_length = _ADVPL_get_property(m_query_reference,"COUNT") FOR l_ind = 1 TO l_length CALL CONOUT("MENU LOGIX "||la_menu_logix[l_ind].cod_processo CLIPPED||".") END FOR # Remove e libera o componente da memória. CALL _ADVPL_destroy_component(m_query_reference) LET m_query_reference = NULL RETURN TRUE END FUNCTION #------------------------------------------------------------------------------# FUNCTION LQUERY_testeEvent(l_ind) #------------------------------------------------------------------------------# DEFINE l_ind INTEGER DEFINE lr_menu_logix RECORD LIKE menu_logix.* LET lr_menu_logix.cod_sistema = _ADVPL_get_property(m_query_reference,"VALUE","cod_sistema",l_ind) LET lr_menu_logix.cod_nivel_1 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_1",l_ind) LET lr_menu_logix.cod_nivel_2 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_2",l_ind) LET lr_menu_logix.cod_nivel_3 = _ADVPL_get_property(m_query_reference,"VALUE","cod_nivel_3",l_ind) LET lr_menu_logix.num_sequencia = _ADVPL_get_property(m_query_reference,"VALUE","num_sequencia",l_ind) LET lr_menu_logix.cod_processo = _ADVPL_get_property(m_query_reference,"VALUE","cod_processo",l_ind) LET lr_menu_logix.cod_tip_processo = _ADVPL_get_property(m_query_reference,"VALUE","cod_tip_processo",l_ind) LET lr_menu_logix.cod_help = _ADVPL_get_property(m_query_reference,"VALUE","cod_help",l_ind) LET lr_menu_logix.cod_transacao = _ADVPL_get_property(m_query_reference,"VALUE","cod_transacao",l_ind) LET lr_menu_logix.den_transacao = _ADVPL_get_property(m_query_reference,"VALUE","den_transacao",l_ind) LET lr_menu_logix.chave_sistema = _ADVPL_get_property(m_query_reference,"VALUE","chave_sistema",l_ind) CALL CONOUT("MENU LOGIX EVENT "||lr_menu_logix.cod_processo CLIPPED||".") RETURN TRUE END FUNCTION