Toda la tarde leyendo y haciendo pruebas y no hay manera
Símplemente quiero pasar como parámetro a una sentencia SQL el campo primario escogido de un DBGrid para eliminar el registro de la tabla.
Si paso ese campo a la sentencia SQL como una variable, no hay problema, se ejecuta y borra el registro:
Código Delphi
[-]var CodigoABorrar: Integer; begin CodigoABorrar := DbGrid1.DataSource.DataSet.FieldByName('cli_id').AsInteger;
if Application.MessageBox('¿Deseas borrar el cliente seleccionado?', 'Confirmar', MB_ICONQUESTION or MB_YESNO) = idYes then begin QrBuscaCliente.SQL.Clear;
QrBuscaCliente.SQL.Add('DELETE FROM cliente WHERE cli_id='+ codigoABorrar);
QrBuscaCliente.ExecSql;
end;
Pero si lo paso como parámetro, me dice que éste es desconocido:
Código Delphi
[-] var codigoABorrar: Integer; begin CodigoABorrar := DbGrid1.DataSource.DataSet.FieldByName('cli_id').AsInteger;
if Application.MessageBox('¿Deseas borrar el cliente seleccionado?', 'Confirmar', MB_ICONQUESTION or MB_YESNO) = idYes then begin QrBuscaCliente.SQL.Clear; cdsBuscaCliente.Params.ParamByName('cli_id').asInteger:= codigoABorrar;
QrBuscaCliente.SQL.Add('DELETE FROM cliente WHERE cli_id = :cli_id');
QrBuscaCliente.ExecSql;
end;
Donde cdsBuscaCliente es un TClientDataSet y QrBuscaCliente es un TSQLQuery.
Otras cosas que he hecho dentro de las pruebas:
- En QrBuscaCliente (TSQLQuery), propiedad Params, añado un parámetro llamado cli_id, que corresponde al campo del mismo nombre con Datatype ftInteger
- En cdsBuscaCliente (TClientDataSet), botón derecho sobre componente y clic a Fetch Params, y obtengo los creados en el query.
Algo no he entendido bien sobre los parámetros, según he visto en el foro cambia ligeramente de unos componentes a otros.
¿alguna sugerencia?