Pregunta

Tengo un TSqlDataSet que tiene un campo de blob, necesito obtener los datos de este campo de blob en el evento BeforeUpdateRecord del proveedor y ejecutar un comando de actualización, he intentado esto:

Cmd := TSQLQuery.Create(nil);
try
  Cmd.SQLConnection := SQLConnection;
  Cmd.CommandText := 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID';
  Cmd.Params.CreateParam(ftBlob, 'PIMAGE ', ptInput).Value := DeltaDS.FieldByName('IMAGE').NewValue; //blob field
  Cmd.Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
  Cmd.ExecSQL;
finally
  Cmd.Free;
end;

Cuando ejecuto eso, obtengo un EDatabaseError con el mensaje: 'Sin valor para el parámetro PIMAGE.

¿Qué me estoy perdiendo?

¿Fue útil?

Solución

Respondiendo a mi propia pregunta, la forma correcta de hacerlo es la siguiente:

const
  SQL = 'UPDATE MYTABLE SET IMAGE = :PIMAGE WHERE ID = :PID;';
var
  Params: TParams;
begin
  Params := TParams.Create(nil);
  try
    Params.CreateParam(ftBlob, 'PIMAGE', ptInput).AsBlob := DeltaDS.FieldByName('IMAGE').NewValue;
    Params.CreateParam(ftString, 'PID', ptInput).Value := DeltaDS.FieldByName('ID').NewValue;
    SQLConnection.Execute(SQL, Params);
  finally
    Params.Free;
  end;
end;

Otros consejos

¿Has intentado probar con otro controlador (por ejemplo, ODBC)? Es posible que el error no esté en su código. Este enfoque (cambio de proveedores / controladores de datos) me ha ayudado con algunos problemas confusos que resultaron no ser míos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top