Nesse vídeo demonstraremos a utilização da classe FWPreparedStatement, que serve formatar uma query.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include 'TOTVS.ch' /*/{Protheus.doc} User Function zExe239 Classe que prepara uma query SQL @type Function @author Atilio @since 20/02/2023 @see https://tdn.totvs.com/display/public/framework/FWPreparedStatement @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe239() Local aArea := FWGetArea() Local oStateQry Local cQueryOrig Local cQueryNova //Prepara a query original cQueryOrig := "SELECT * FROM " + RetSQLName("SB1") + " SB1 WHERE B1_TIPO = ? AND B1_LOCPAD = ? AND SB1.D_E_L_E_T_ = ' '" //Começa a montar a query oStateQry := FWPreparedStatement():New() //Define a query e define o conteúdo das interrogações oStateQry:SetQuery(cQueryOrig) oStateQry:SetString(1, "PA") oStateQry:SetString(2, "01") //Busca a query formatada cQueryNova := oStateQry:GetFixQuery() FWAlertInfo(cQueryNova, "Teste 1 FWPreparedStatement") RestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Fala Atilão, tudo certo meu querido.
Jovem, só uma observação muito importante quanto ao uso dessa classe.
Um dos pontos importantes dela é a proteção contra sql Injection. E pegar a query através do GetFixQuery() e executar ela por MpSysOpenQuery, TcQuery ou afins, não vai proteger o código da injeção de dependencias, pois em suma o que o GetFixQuery vai fazer, é apenas trocar os ‘?’ pelos valores, ou seja, fazer o bind.
Para que a query seja protegida do SQL Injection, ela precisa ser executada através da classe, usando o método executeQuery por exemplo.
Mas o melhor é não fazer uso da FWPreparedStatement, mas sim da classe FWExecStatement que é mais moderna, usa conceitos da classe FWExecCachedQuery e por isso acaba sendo mais rápida. Mas nelas a proteção do SQL Injection também só existe se as querys forem executadas pela própria classe. Exemplo, a FWExecStatement os métodos que executariam a query e protegeria da injeção de dependencias são OpenAlias e o ExecScalar.
Estou fazendo esse comentário pois já estou vendo muitos códigos usando o FWPreparedStatement, pegando a query pelo GetFixQuery, e executando ela pelas funções padrões, na ilusão que o GetFixQuery já tira a injeção de sql.
Bom dia mano Súlivan, por aqui tudo joia graças a Deus e por aí?
Opa, muito obrigado pelo excelente adendo.
Realmente é uma ótima dica, depois estudarei também essa FWExecStatement.
Tenha uma ótima e abençoada quinta feira.
Um forte abraço.
Verdade no desenvolvimento a orientação é usar o FwExecStatement
Bom dia, tudo joia?
Opa, obrigado pelo comentário.
Tenha uma ótima e abençoada quarta feira.
Um forte abraço.