cQueryConsulta SQL com marcadores ? para os valores que serão associados posteriormente.
AdvPL GuiaFWExecStatement():New( <cQuery> ) --> oStatementExecuta consultas SQL parametrizadas com bind de valores, abertura do resultado em alias e suporte aos recursos herdados de FWPreparedStatement.
FWExecStatement é derivada de FWPreparedStatement e encapsula os conceitos de execução/cache de consultas utilizados pelo Framework. A classe permite construir uma instrução com marcadores ?, associar valores por tipo e executar a consulta por OpenAlias() ou ExecScalar(). A documentação oficial informa disponibilidade a partir da LIB label 20211116 e orienta respeitar as regras e limitações da TCGenQry2 utilizadas no bind.
FWExecStatement():New( <cQuery> ) --> oStatementcQueryConsulta SQL com marcadores ? para os valores que serão associados posteriormente.
oStatement:OpenAlias( [cAlias], [cLifeTime], [cTimeout] ) --> cAliascAliasCaractereOpcionalAlias que será criado para o resultado.
cLifeTimeCaractereOpcionalConfiguração de tempo de vida da consulta no cache da DBAPI.
cTimeoutCaractereOpcionalConfiguração de timeout relacionada ao cache da consulta.
cAlias, caractere. Alias em que o resultado foi aberto.
oStatement:ExecScalar( <cColumn>, [cLifeTime], [cTimeout] ) --> xValuecColumnCaractereObrigatórioNome da coluna que deve ser retornada.
cLifeTimeCaractereOpcionalConfiguração de tempo de vida no cache da DBAPI.
cTimeoutCaractereOpcionalConfiguração de timeout relacionada ao cache.
xValue, variante. Valor obtido da coluna informada.
oStatement:SetString( <nParam>, <cValue> )oStatement:SetDate( <nParam>, <dDate> )oStatement:SetBoolean( <nParam>, <lValue>, [lProtheus] )oStatement:SetIn( <nParam>, <aValues> )oStatement:SetUnsafe( <nParam>, <xValue> )oStatement:GetFixQuery() --> cQueryoStatement:Destroy()O construtor retorna o objeto FWExecStatement. A execução ocorre posteriormente por OpenAlias() ou ExecScalar().
#Include "TOTVS.ch"
User Function ExFWExec()
Local cQuery := ""
Local cAlias := ""
Local oStmt
// A1_COD é o código, A1_NOME o nome e A1_FILIAL a filial do cliente.
cQuery := "SELECT A1_COD, A1_NOME FROM " + RetSqlName("SA1")
cQuery += " WHERE A1_FILIAL = ? AND A1_COD = ? AND D_E_L_E_T_ = ' '"
cQuery := ChangeQuery(cQuery)
oStmt := FWExecStatement():New(cQuery)
// Os parâmetros começam em 1 e seguem a ordem dos marcadores ?.
oStmt:SetString(1, xFilial("SA1"))
oStmt:SetString(2, "000001")
cAlias := oStmt:OpenAlias()
While !(cAlias)->(Eof())
ConOut((cAlias)->A1_COD + " - " + (cAlias)->A1_NOME)
(cAlias)->(DbSkip())
EndDo
// Libere primeiro o alias e depois o objeto statement.
(cAlias)->(DbCloseArea())
oStmt:Destroy()
ReturnA consulta associa filial e código aos marcadores e abre o resultado em uma WorkArea.
User Function ExFWExecIn()
Local cQuery := "SELECT A1_COD, A1_NOME FROM " + RetSqlName("SA1")
Local cAlias := ""
Local oStmt
Local aCodigos := {"000001", "000003"}
cQuery += " WHERE A1_FILIAL = ? AND A1_COD IN (?) AND D_E_L_E_T_ = ' '"
cQuery := ChangeQuery(cQuery)
oStmt := FWExecStatement():New(cQuery)
oStmt:SetString(1, xFilial("SA1"))
// SetIn() é herdado de FWPreparedStatement e recebe um array.
oStmt:SetIn(2, aCodigos)
cAlias := oStmt:OpenAlias()
// Processamento do alias omitido para destacar a parametrização.
(cAlias)->(DbCloseArea())
oStmt:Destroy()
ReturnSetIn() associa a lista de códigos ao segundo marcador da consulta.
User Function ExFWScalar()
Local cQuery := "SELECT COUNT(*) QTD FROM " + RetSqlName("SA1")
Local oStmt
Local nQtd := 0
cQuery += " WHERE A1_FILIAL = ? AND D_E_L_E_T_ = ' '"
cQuery := ChangeQuery(cQuery)
oStmt := FWExecStatement():New(cQuery)
oStmt:SetString(1, xFilial("SA1"))
// ExecScalar() evita abrir alias quando precisamos somente de uma coluna/valor.
nQtd := oStmt:ExecScalar("QTD")
oStmt:Destroy()
ConOut("Quantidade: " + CValToChar(nQtd))
ReturnExecScalar() retorna diretamente o valor da coluna agregada.
© 2026 Usina.BR. Todos os direitos reservados. TOTVS, Protheus, Microsiga e seus respectivos logotipos são marcas de seus titulares. O AdvPL Guia é independente e utiliza citações limitadas, atribuídas e justificadas por finalidade educativa. Consulte os Termos de Uso. Termos de Uso
Comentários
Ainda não há comentários aprovados.
Entre com Google ou Microsoft para comentar.