Delphi-PRAXiS
Seite 8 von 8   « Erste     678   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Image in Access Datenbank speichern (https://www.delphipraxis.net/133254-image-access-datenbank-speichern.html)

mkinzler 3. Mai 2009 09:51

Re: Image in Access Datenbank speichern
 
Da kann man wohl eine Bezeichnung für das gespeicherte Bild angeben.

uwe12 3. Mai 2009 09:57

Re: Image in Access Datenbank speichern
 
das speichern funktioniert jetzt. aber wenn ich das bild speichere, dann kommt die meldung, dass das bild gespeichert wurde. wenn ich dann auf ok klicke, dann schließt sich das programm.ich habe den quelltext mal so umgeschrieben:
Delphi-Quellcode:
procedure Tad.Button2Click(Sender: TObject);
var Stream: TMemoryStream;
    aBMP: TBitmap;
    aJPG: TJPEGImage;
begin
  if AdoImage.Picture.Graphic.Empty then exit;
  Stream := TMemoryStream.Create;
  try
    aBMP := TBitmap.Create;
    try
      aJPG := TJPEGImage.Create;
      try
        try
          aBMP.Assign(AdoImage.Picture.Graphic);
          aJPG.Assign(aBMP);
          aJPG.SaveToStream(Stream);
          Stream.Position := 0;
          with Adoquery1 do
            begin
              Close;
              SQL.Text := 'INSERT INTO Tabelle1(Bild) VALUES(:img)';
               AdoQuery1.Parameters.ParamByName('img').LoadFromStream(Stream,ftGraphic);

              ExecSQL;
            end;
          MessageBox(Handle,'Bild wurde gespeichert','Information',MB_OK or MB_ICONINFORMATION);
          Close;
        except
          MessageBox(Handle,'Bild konnte nicht gespeichert werden','Fehler',MB_OK or MB_ICONERROR);
        end;
      finally
        aJPG.Free;
      end;
    finally
      aBMP.Free;
    end;
  finally
    Stream.Free;
  end;
end;

Klaus01 3. Mai 2009 09:59

Re: Image in Access Datenbank speichern
 
Hallo,

was glaubst Du was das hier macht?

Delphi-Quellcode:
 MessageBox(Handle,'Bild wurde gespeichert','Information',MB_OK or MB_ICONINFORMATION);
 Close;
Grüße
Klaus

DeddyH 3. Mai 2009 12:16

Re: Image in Access Datenbank speichern
 
Entschuldige, dass ich hier unmodifizierten Code aus einem meiner Programme eingestellt habe, den Du so nicht 1:1 übernehmen kannst. Ein klein wenig Eigeninitiative hatte ich schon erwartet :?.

uwe12 3. Mai 2009 18:05

Re: Image in Access Datenbank speichern
 
tut mir leid, ich habe das close nicht gesehen. das speichern funktioniert schon soweit, aber nach dem speichern sind aber keine datensätze in der dbgrid vorhanden. wenn ich das programm neustarte, dann kommen zwar die datensätze wieder, aber die bilder werden nicht angezeigt. ein neuer datensatz wird über einen anderen button hinzugefügt.
Delphi-Quellcode:
function JpegStartsInBlob(PicField:TBlobField):integer;
var
 bS    : TADOBlobStream;
 buffer : Word;
 hx    : string;
begin
 Result := -1;
 bS := TADOBlobStream.Create(PicField, bmRead);
 try
  while (Result = -1) and (bS.Position + 1 < bS.Size) do begin
   bS.ReadBuffer(buffer, 1);
   hx:=IntToHex(buffer,2);
   if hx = 'FF' then begin
     bS.ReadBuffer(buffer, 1);
     hx:=IntToHex(buffer,2);
     if hx = 'D8' then Result := bS.Position - 2
     else if hx = 'FF' then bS.Position := bS.Position-1;
   end;//if
  end;//while
 finally
  bS.Free
 end; //try
end;

procedure Tad.ADODataSet1AfterScroll(DataSet: TDataSet);
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
 begin
  bS := TADOBlobStream.Create(AdoQuery1Bild, bmRead);
  try
    bS.Seek(JpegStartsInBlob(AdoQuery1Bild), soFromBeginning);
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(bS);
     ADOImage.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
end;

procedure Tad.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
begin
  AdoImage.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
end;  
procedure Tad.Button2Click(Sender: TObject);
var Stream: TMemoryStream;
    aBMP: TBitmap;
    aJPG: TJPEGImage;
begin
  if AdoImage.Picture.Graphic.Empty then exit;
  Stream := TMemoryStream.Create;
  try
    aBMP := TBitmap.Create;
    try
      aJPG := TJPEGImage.Create;
      try
        try
          aBMP.Assign(AdoImage.Picture.Graphic);
          aJPG.Assign(aBMP);
          aJPG.SaveToStream(Stream);
          Stream.Position := 0;
          with Adoquery1 do
            begin
              Close;
              SQL.Text := 'INSERT INTO Tabelle1(Bild) VALUES(:img)';
               AdoQuery1.Parameters.ParamByName('img').LoadFromStream(Stream,ftGraphic);
               ExecSQL;
            end;
          MessageBox(Handle,'Bild wurde gespeichert','Information',MB_OK or MB_ICONINFORMATION);
                  except
          MessageBox(Handle,'Bild konnte nicht gespeichert werden','Fehler',MB_OK or MB_ICONERROR);
        end;
      finally
        aJPG.Free;
      end;
    finally
      aBMP.Free;
    end;
  finally
    Stream.Free;
  end;
end;
procedure Tad.Button3Click(Sender: TObject);
begin
adoquery1.append;
end;
procedure Tad.FormCreate(Sender: TObject);
var sDBPath, sCons: string;
begin
sDBPath := 'Desktop\Datenbank1.mdb';
sCons := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sDBPath + ';Persist Security Info=False';
AdoQuery1.Active:=True;
end;
procedure Tad.FormDestroy(Sender: TObject);
begin
AdoQuery1.Active:=False;
end;

uwe12 5. Mai 2009 18:44

Re: Image in Access Datenbank speichern
 
kann mir keiner helfen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:12 Uhr.
Seite 8 von 8   « Erste     678   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz