Descrição:
Objeto que representa um comando SQL precompilado. Esse objeto pode ser usado para executar eficientemente um comando SQL inúmeras vezes.
Métodos:
New()
Sintaxe:
FWPreparedStatement():New( cQuery ) ->
Descrição:
Construtor da carga
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
cQuery | Caracter | Query em SQL ANSI |
Destroy()
Sintaxe:
FWPreparedStatement():Destroy( ) ->
Descrição:
Destrói o objeto
SetQuery()
Sintaxe:
FWPreparedStatement():SetQuery( cQuery ) ->
Descrição:
Informa a query a ser executada, deve ser utilizada a construção com os parametros com ? ao invés do valor, que posteriormente serão passados via setString, SetDate etc.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
cQuery | Caracter | Query em SQL ANSI |
setBoolean()
Sintaxe:
FWPreparedStatement():setBoolean( nParam , lValue , lProtheus ) ->
Descrição:
Seta um parâmetro na query do tipo Boolean. Parâmetros iniciam sempre com 1.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
lValue | Lógico | Valor boolean a se passar na query |
lProtheus | Lógico | Se .T. trata o lógico igual ao Protheus, .T. é Default |
setDate()
Sintaxe:
FWPreparedStatement():setDate( nParam , dDate ) ->
Descrição:
Seta um parâmetro na query do tipo Data do Protheus. Parâmetros iniciam sempre com 1.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
dDate | Data | Data no formato Protheus |
setString()
Sintaxe:
FWPreparedStatement():setString( nParam , cValue ) -> cBuffer
Descrição:
Seta um parâmetro na query via String. Parâmetros iniciam sempre com 1.
Obs.: Deve-se passar a string normalmente, sem uso de aspas simples (') para o banco. Caso seja encontrado esse caracter, será considerado parte da string para o banco, e não como delimitador de string em SQL.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
cValue | Caracter | Valor do conteúdo de String |
Retorno:
cBuffer
setIn()
Sintaxe:
FWPreparedStatement():setIn( nParam , aValues ) ->
Descrição:
Seta um parâmetro na query do tipo IN. Parâmetros iniciam sempre com 1.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
aValues | Array | Array com valores do IN |
validParamSize()
Sintaxe:
FWPreparedStatement():validParamSize( nParam ) ->
Descrição:
Valida se o parâmetro informado existe na query atual.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
getFixQuery()
Sintaxe:
FWPreparedStatement():getFixQuery( ) -> cQuery
Descrição:
Retorna a query com os parâmetros já tratados e substituídos. Pronta para ser enviada ao banco.
Retorno:
cQuery - Query no padrão do banco conectado
executeQuery()
Sintaxe:
FWPreparedStatement():executeQuery( cAlias , aSetField ) -> xRet
Descrição:
Executa a Query
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
cAlias | Caracter | Alias a ser criado |
aSetField | Array | Vetor com os campos para execução de TCSetField com a estrutura: [1] Nome do Campo |
Retorno:
xRet
setFields()
Sintaxe:
FWPreparedStatement():setFields( aSelect ) ->
Descrição:
Seta os campos do Select
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
aSelect | Array | Array com os nomes dos campos Pode-se utilizar um array no formato: Ou no formato: |
getFieldSelect()
Sintaxe:
FWPreparedStatement():getFieldSelect( ) -> cSelect
Descrição:
Retorna uma String com todos os campos da query
Retorno:
cSelect
doTcSetField()
Sintaxe:
FWPreparedStatement():doTcSetField( cAlias ) ->
Descrição:
Executa o TCSetField para todos os campos informados via parâmetro SetFields. É necessário que a query já esteja aberta.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
cAlias | Caracter | Alias que será realizado o TCSetField |
getResultArray()
Sintaxe:
FWPreparedStatement():getResultArray( cAlias , lClose ) -> aResult
Descrição:
Retorna um array com todos os campos da query para todos os registros. Será utilizado o array de campo passado no SetFields, e não o DBStruct da query.
Esse método não faz DBGOTOP no alias, portanto o ResultSet será a partir do ponto que a "query" está posicionada.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
cAlias | Caracter | Nome do Alias |
lClose | Lógico | Se .T. fecha o alias após consumir os valores. .T. é Default |
Retorno:
aResult - Array com o resultado da query
setConnection()
Sintaxe:
FWPreparedStatement():setConnection( oObj ) ->
Descrição:
Seta o Objeto
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
oObj | Objeto | Objeto de conexão externo (ver Classe: FWDBAccess) |
setNumeric()
Sintaxe:
FWPreparedStatement():setNumeric( nParam , nValue ) ->
Descrição:
Seta um parâmetro na query via String. Parâmetros iniciam sempre com 1.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
nValue | Numérico | Valor do conteúdo numérico |
setParams()
Sintaxe:
FWPreparedStatement():setParams( aParams ) ->
Descrição:
Seta todos os parâmetros passados no array. Essa função não é tão performática quanto chamar o setXXXX de cada tipo, pois ela usa valtype.
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
aParams | Array | Array com o valores a serem testados |
setUnsafe()
Sintaxe:
FWPreparedStatement():SetUnsafe( nParam , xValue)
Descrição:
Seta um parâmetro na query. Parâmetros iniciam sempre com 1.
Obs.: Por enviar um parâmetro de forma não segura para o statment ele nunca deve ser utilizado
para inserir um parâmetro recebido por uma requisição HTTP, por exemplo, pois ele pode
receber um SqlInjection e causar problemas no sistema. Somente utilize este método
se você estiver seguro que o parâmetro enviado é seguro (por exemplo, trocar o nome de uma tabela de forma dinâmica)
Parâmetros:
Nome | Tipo | Descrição |
---|---|---|
nParam | Numérico | Número do parâmetro (1..N) |
XValue | Variant | Valor do conteúdo a ser incluído |
Retorno:
nil
Exemplo de Uso da Classe
User Function tPrepStat Local oStatement Local cQuery Local cFinalQuery Local cUser := "000001" Local cPassword := "testeFWPS" oStatement := FWPreparedStatement():New() cQuery := "SELECT * FROM users WHERE username=? AND password=?" //Define a consulta e os parâmetros oStatement:SetQuery(cQuery) oStatement:SetString(1,cUser) oStatement:SetString(2,cPassword) //Recupera a consulta já com os parâmetros injetados cFinalQuery := oStatement:GetFixQuery()