cQueryQuery SQL con marcadores ? para los valores que se asociarán posteriormente.
Guía AdvPLFWExecStatement():New( <cQuery> ) --> oStatementEjecuta queries SQL parametrizadas con asociación de valores, resultados abiertos como alias y métodos heredados de FWPreparedStatement.
FWExecStatement deriva de FWPreparedStatement y encapsula conceptos de ejecución/caché de queries del Framework. Permite construir SQL con marcadores ?, asociar valores por tipo y ejecutar mediante OpenAlias() o ExecScalar(). La documentación oficial indica disponibilidad desde la LIB label 20211116 y que el bind sigue las reglas y limitaciones de TCGenQry2.
FWExecStatement():New( <cQuery> ) --> oStatementcQueryQuery SQL con marcadores ? para los valores que se asociarán 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] ) --> xValuecColumnCaractereObligatorioNome 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()El constructor devuelve un objeto FWExecStatement. La ejecución de la query ocurre posteriormente mediante OpenAlias() o ExecScalar().
#Include "TOTVS.ch"
User Function ExFWExec()
Local cQuery := ""
Local cAlias := ""
Local oStmt
// A1_COD significa “Código”, A1_NOME significa “Nombre” y A1_FILIAL significa “Sucursal”.
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)
// Los parámetros comienzan en 1 y siguen el orden de los 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
// Cierra primero el alias y después libera el objeto statement.
(cAlias)->(DbCloseArea())
oStmt:Destroy()
ReturnLa query asocia la sucursal y el código a los marcadores y abre el resultado en una WorkArea.
User Function ExFWExecIn()
Local cQuery := "SELECT A1_COD, A1_NOME FROM " + RetSqlName("SA1")
Local cAlias := ""
Local oStmt
Local aCodigos := {"000001", "000003"}
// A1_COD significa “Código”; A1_FILIAL significa “Sucursal”.
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() se hereda de FWPreparedStatement y recibe un array.
oStmt:SetIn(2, aCodigos)
cAlias := oStmt:OpenAlias()
// Se omite el procesamiento del alias para destacar la parametrización.
(cAlias)->(DbCloseArea())
oStmt:Destroy()
ReturnSetIn() asocia la lista de códigos al segundo marcador de la query.
User Function ExFWScalar()
Local cQuery := "SELECT COUNT(*) CANT FROM " + RetSqlName("SA1")
Local oStmt
Local nCant := 0
// A1_FILIAL significa “Sucursal”.
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 un alias cuando solo necesitamos una columna/valor.
nCant := oStmt:ExecScalar("CANT")
oStmt:Destroy()
ConOut("Cantidad: " + CValToChar(nCant))
ReturnExecScalar() devuelve directamente el valor de la columna agregada.
Desarrollado con Usina Docs · Alpha
© 2026 Usina.BR. Todos los derechos reservados. TOTVS, Protheus, Microsiga y sus respectivos logotipos son marcas de sus titulares. Guía AdvPL es independiente y utiliza citas limitadas, atribuidas y justificadas por fines educativos. Consulta los Términos de Uso. Términos de Uso
Comentarios
Todavía no hay comentarios aprobados.
Inicia sesión con Google o Microsoft para comentar.