Ver Mensaje Individual
  #1  
Antiguo 13-12-2007
Josepo Josepo is offline
Miembro
 
Registrado: nov 2007
Ubicación: Barcelona
Posts: 14
Reputación: 0
Josepo Va por buen camino
Question Pasar parámetros a sentencia SQL con DBExpress

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?
Responder Con Cita