/ / Guardar imagen para grabar - delphi, ms-access, delphi-xe3

Guardar imagen para grabar - delphi, ms-access, delphi-xe3

Estoy almacenando alguna información en mi base de datos de Access, un parámetro es un campo BLOB, en este caso una imagen, cargada en un Timage.

Estoy usando este código para guardarlo:

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;

Pero también tengo otra información que estoy almacenando al hacer clic en el mismo botón que en la parte "anexar".

Lo que sucede es que cuando presiono el botón Guardar, esta información no se almacena en la misma ID en la base de datos.

¿Cómo corrijo este problema?

Respuestas

5 para la respuesta № 1

Está editando el registro actual, guardando elHaga clic en la imagen, agregue un nuevo registro y guarde el resto de la información en ese nuevo registro. Creo que tiene la intención de agregar un nuevo registro completo, agregar la imagen y los datos a ese nuevo y luego guardar esos cambios.

Pruebe esto en su lugar:

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;