Wie kann ich einen SQL-Befehl mit einem Klecks param in dbx ausführen?
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?
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