Frage

ich ein TSQLDataSet habe, die ein BLOB-Feld hat, muß ich die Daten dieses BLOB-Feldes in dem Before Ereignisse des Anbieters bekommen und einen Update-Befehl ausführen, ich habe dies versucht:

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;

Wenn ich ausführen, dass ich eine EDatabaseError mit Meldung:. ‚Kein Wert für Parameter PIMAGE

Was bin ich fehlt?

War es hilfreich?

Lösung

Die Beantwortung meiner Frage, der richtige Weg, es zu tun, ist die folgende:

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;

Andere Tipps

Haben Sie versucht, Tests mit einem anderen Treiber (zum Beispiel ODBC)? Es ist möglich, dass der Fehler nicht im Code ist. Dieser Ansatz (wechselnde Datenprovider / Treiber) hat mich mit einigen verwirrenden Problemen geholfen, die nicht von mir zu entpuppte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top