Páginas filhas
  • FWExecCachedQuery

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Inclusão da necessidade de atualização da dabapi.dll e dbaccess

Descrição:

Classe com métodos estáticos que faz a execução de uma query no DBAccess utilizando do cache de queries.

O cache é mantido na DBAPI e consome uma quantidade de memória proporcional ao retorno da query.

Caso EXATAMENTE a mesma query seja executada, o retorno será diretamente do cache da DBAPI, tendo assim uma performance muito superior a uma nova consulta no banco de dados.

Disponível Classe disponível a partir da lib label 20200908. Para saber o label de uma lib via advpl : FwLibVersion.

Para uso desta funcionalidade também é necessário a atualização do dbaccess e dbapi.dll para a versão 20.1.1.3 (sem a atualização da dbapi.dll e do dbaccess não é gerado qualquer erro, mas ao usar a classe o cache não é realizado).





Métodos:



OpenQuery

Descrição:
Executa uma query no banco de dados e faz o cache da mesma


Sintaxe:

FwExecCachedQuery():OpenQuery( <cQuery> , <cAlias>, <aSetField> , <cDriver> , <cLifeTime> , <cTimeOut> )


Parâmetros

NomeTipoDescriçãoObrigatórioReferência
cQueryCaractereQuery a ser executadaX
cAliasCaractereAlias no qual a query será aberta
X
aSetFieldArrayArray com os campos para execução de TCSetField com a estrutura

cDriverCaractereDriver de abertura da tabela

cLifeTimeCaractereDefine se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundosX
cTimeOutCaractereDefine se a query vai ficar no cache do DBAccess e qual o timeout dela em segundosX


Retorno:
cAlias → Alias no qual a query foi aberta



ExecScalar

Descrição:
Executa uma query no banco de dados, fazendo cache da mesma e retornando apenas a primeira coluna da primeira linha


Sintaxe:

FwExecCachedQuery():ExecScalar( <cQuery> , <cColumn> , <cLifeTime> , <cTimeOut> )


Parâmetros

NomeTipoDescriçãoObrigatórioReferência
cQueryCaractereQuery a ser executadaX
cColumnCaractereNome da coluna a ser retornadaX
cLifeTimeCaractereDefine se a query vai ficar no cache do DBAccess e qual o tempo de vida dela em segundosX
cTimeOutCaractereDefine se a query vai ficar no cache do DBAccess e qual o timeout dela em segundosX



Exemplo de utilização:


Bloco de código
languagejs
themeRDark
#include "protheus.ch"
 
#define C_GRUPO  "99"
#define C_FILIAL "01"
 
//-------------------------------------------------------------------
/*{Protheus.doc} QryCached
Exemplo de utilização da classe FwExecCachedQuery, classe responsável
por abrir queries já efetuando cache de seu retorno
 
@author Daniel Mendes
@since 28/08/2020
@version 1.0
*/
//-------------------------------------------------------------------
user function QryCached()
local cAlias as char
local cQuery as char

RpcSetEnv(C_GRUPO, C_FILIAL)

cQuery := "SELECT ED_CODIGO FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' '"

cAlias := FwExecCachedQuery():OpenQuery(cQuery,/*cAlias*/, /*aSetField*/, /*cDriver*/, "120", "60")

while !(cAlias)->(Eof())
    ConOut((cAlias)->ED_CODIGO)
    (cAlias)->(DBSkip())
enddo

(cAlias)->(DBCloseArea())

cQuery := "SELECT ED_DESCRIC FROM " + RetSqlName("SED") + " WHERE D_E_L_E_T_ = ' ' AND ED_CODIGO = 'XISTO'"

ConOut("ED_DESCRIC = " + FwExecCachedQuery():ExecScalar(cQuery, "ED_DESCRIC", "120", "60"))

RpcClearEnv()

return


Templatedocumentos

HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>