/ / Salva immagine per registrare - delphi, ms-access, delphi-xe3

Salva immagine da registrare - delphi, ms-access, delphi-xe3

Sto memorizzando alcune informazioni nel mio database di Access, un parametro è un campo BLOB, in questo caso un'immagine, caricata in un Timage.

Sto usando questo codice per salvarlo:

var
AStream : TMemoryStream;
begin
AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
if Adotable1.Active then
begin
Adotable1.Edit;
TBlobField(Adotable1.FieldByName("Termograma")).LoadFromStream(AStream);
Adotable1.Post;
end;
finally
AStream.Free;

adotable1.Append;
adotable1["Data"]:= datetimepicker1.Date;
adotable1["Temax"]:= edit4.Text;
adotable1["Temin"]:= edit5.Text;
adotable1["Descrição da Posição"]:= memo1.Text;
adotable1["Comentários"]:= memo2.Text;
adotable1.Post;

Ma ho anche altre informazioni che sto memorizzando facendo clic sullo stesso pulsante come la parte "aggiungi".

Quello che succede è che quando premo il pulsante Salva, questa informazione non viene memorizzata nello stesso ID sul database.

Come posso correggere questo problema?

risposte:

5 per risposta № 1

Stai modificando il record corrente, salvando il filel'immagine, aggiungendo un nuovo record e salvando il resto delle informazioni su quel nuovo record. Penso che intendi aggiungere un intero nuovo record, aggiungere l'immagine e i dati a quello nuovo e quindi salvare tali modifiche.

Prova questo invece:

var
AStream : TMemoryStream;
begin
if not AdoTable1.Active then
AdoTable1.Open;

Adotable1.Append;

AStream := TMemoryStream.Create;
try
Image1.Picture.Graphic.SaveToStream(AStream);
AStream.Position := 0;
TBlobField(Adotable1.FieldByName("Termograma")).LoadFromStream(AStream);
finally
AStream.Free;
end;

adotable1["Data"]:= datetimepicker1.Date;
adotable1["Temax"]:= edit4.Text;
adotable1["Temin"]:= edit5.Text;
adotable1["Descrição da Posição"]:= memo1.Text;
adotable1["Comentários"]:= memo2.Text;
adotable1.Post;
end;