usar - unir varias filas en una sola sql
¿Cómo usar ADO Query Parameters para especificar nombres de tablas y campos? (1)
Los parámetros de consulta no están diseñados para parametrizar nombres de tabla.
Lo que puede hacer es usar marcadores de posición para el / los nombre / s de la tabla en su SQL, y luego usar la función de Format
para reemplazar aquellos con el / los nombre / s de la tabla, y luego usar parámetros para los otros valores como de costumbre. Esto todavía es relativamente seguro a partir de la inyección SQL (la persona malévola debería conocer los nombres exactos de las tablas, la declaración SQL específica que se usa y los valores para proporcionar parámetros).
const
QryText = ''update %s set :fieldname = :newid where :fieldname = :oldid'';
begin
Q.SQL.Text := Format(QryText, [TableName]);
Q.Parameters.ParamValues[''fieldname''] := FieldName;
Q.Parameters.ParamValues[''oldid''] := OldID;
Q.Parameters.ParamValues[''newid''] := NewID;
...
end;
Estoy ejecutando una instrucción UPDATE
en TADOQuery
y estoy usando parámetros para algunas cosas. Inicialmente, esto estaba funcionando bien, pero agregué otro parámetro para el nombre de la tabla y el nombre del campo, y ahora está rompiendo.
El código se ve así:
Q.SQL.Text:= ''update :tablename set :fieldname = :newid where :fieldname = :oldid'';
Q.Parameters.ParamValues[''tablename'']:= TableName;
Q.Parameters.ParamValues[''fieldname'']:= FieldName;
Q.Parameters.ParamValues[''oldid'']:= OldID;
Q.Parameters.ParamValues[''newid'']:= NewID;
Y el error que obtengo:
Supongo que esto es porque estoy usando este nombre de campo dos veces. Puedo superar esto usando otro nombre de campo único por segunda vez, sin embargo, todavía tengo otro error:
¿Cómo uso los parámetros para especificar la tabla y el campo para actualizar?