Hemos transferido el código a Delphi XE2, y necesitamos cambiar nuestros componentes de acceso a datos de ODBCExpress de un tercero que ya no está en funcionamiento, a TSQLQuery de dbExpress.¿Puede el uso de TSQLQuery de dbExpress? como parámetros?
Hemos parametrizado consulta SQL tales como:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =?, '+
' IntField = ?, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
si usamos el siguiente código:
var
qry:TSQLQuery;
begin
qry.Close;
qry.SQL.Text := sSQL;
ShowMessage(IntToStr(qry.Params.Count));
end;
Devuelve 0, por lo que podemos conseguir los enlaces de trabajo, pero si cambiamos a sSQL:
sSQL :=
'UPDATE ZTestData SET '+
' StringField =:Param1, '+
' IntField = :Param2, '+
' DecimalField = ?, '+
' BooleanField = ?, '+
' DateTimeField = ?, '+
' TextField = ? '+
' WHERE UniqueID = 3';
devuelve 2.
Va a ser una gran molestia cambiar todas las consultas SQL a la sintaxis del nuevo parámetro. ¿Hay alguna forma para que TSQLQuery reconozca el? ¿sintaxis?
Veo que DBXCommon.TDBXCommand utiliza el? Sintaxis:
http://www.andreanolanusse.com/en/parameterized-queries-with-dbexpress-dbx-framework/
Pero significaría tirar nuestro código que utiliza TSQLQuery. ¿Cuál es la forma más rápida/más fácil de resolver esto? ¿Cuál es la diferencia entre TSQLQuery y TDBXCommand de todos modos, en términos de lo que es relevante para mí?
Ver mi respuesta. DB.TParams.ParseSQL es un método que convierte los parámetros en signos de interrogación, si esa es la ruta que desea seguir. Yo prefiero ParamByName yo mismo. – Robo