Domanda

Ho un TSqlDataSet che ha un campo BLOB, ho bisogno di ottenere i dati di questo campo BLOB nell'evento BeforeUpdateRecord del provider ed eseguire un comando di aggiornamento, ho provato questo:

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;

Quando eseguo che ottengo un EDatabaseError con messaggio: 'Nessun valore per il parametro PIMAGE.

Cosa mi sto perdendo?

È stato utile?

Soluzione

Rispondendo alla mia domanda, il modo corretto di farlo è il seguente:

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;

Altri suggerimenti

Hai provato a provare con un altro driver (ad es. ODBC)? È possibile che l'errore non sia nel tuo codice. Questo approccio (modifica dei fornitori / driver di dati) mi ha aiutato con alcuni problemi confusi che si sono rivelati non essere miei.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top