Query String ou Embedded SQL

Quais as vantagens Query String ou Embedded SQL?

Olha Dilson eu particularmente prefiro montar a string diretamente no fonte mesmo e executar com a classe FwExecStatement() que faz o cache das querys no SQL além de proteção dos parâmetros de filtro (tratamento para aspas, etc.).

Exemplo:

Local cQuery	:= ''							AS Character
Local oQry										AS Object
Local ucQry										AS Variant

BeginContent Var cQuery

SELECT *
FROM %Exp:FWSX2Util():GetFile("SRA")% SRA 
WHERE SRA.D_E_L_E_T_ <> '*' 
	AND RA_MAT = ? 

EndContent
oQry	:= FwExecStatement():New(cQuery)
oQry:setString	(1,cFiltro)

oQry:OpenAlias(@ucQry)	//oQry:getFixQuery() retorna query processada
While (ucQry)->(!EoF())
	//-- EXECUTA O QUE PRECISAR AQUI COM OS DADOS DA QUERY
	(ucQry)->(dbSkip())
EndDo
(ucQry)->(dbCloseArea()) //Fecha a query
oQry:Destroy()
FreeObj(oQry)
1 curtida

Eu prefiro usar Embedded SQL em query’s simples e diretas (como um select básico em alguma tabela e uso o FwExecStatement() quando quero fazer alguma iteração utilizando os dados da query.

1 curtida

O Embedded SQL tem um detalhe que o CodeAnalysis sempre critica, é que ele não trata o SQL Injection o que pode ser um problema dependo da fonte dos dados para a query. Já a classe FwExecStatement() faz todo esse tratamento e resolve esse impasse. Da forma que uso inclusive é bem semelhante a do Embedded SQL na leitura da consulta.

1 curtida

Se a prioridade for a depuração e a flexibilidade na construção dinâmica de consultas, “Query String” pode ser uma opção.
Se a prioridade for a legibilidade, a manutenção e a performance do código, Embedded SQL é geralmente a opção recomendada.

A TOTVS recomenda o uso de Embedded SQL, pois ele encapsula ChangeQuery, e cria cache das querys, aumentando a performance

2 curtidas

Olá,

Hoje recomendamos sempre utilizar FWExecStatement, pois essa classe consegue efetuar o tratamento de SQL Injection.

Ela já possui métodos para abrir a query, portanto é uma grande facilitadora:
https://tdn.totvs.com/display/public/framework/FWExecStatement

3 curtidas