AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Image in Access Datenbank speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Image in Access Datenbank speichern

Ein Thema von uwe12 · begonnen am 28. Apr 2009 · letzter Beitrag vom 5. Mai 2009
Antwort Antwort
Seite 6 von 8   « Erste     456 78      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#51

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 13:23
Access ist meine schwache Stelle *g*, aber wenn ich das richtig verstehe, ist das schon der richtige Datentyp, hmm....

[edit] Hier noch 2 Links zum Nachlesen:
http://delphi.about.com/od/database/l/aa030601a.htm
http://entwickler-forum.de/showthread.php?t=18445 [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
uwe12

Registriert seit: 21. Apr 2009
58 Beiträge
 
#52

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 13:35
das auslesen eines bildes aus der datenbank funktioniert, aber das speichern nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#53

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 14:40
Zeig doch nochmal den aktuellen Code zum Speichern.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
uwe12

Registriert seit: 21. Apr 2009
58 Beiträge
 
#54

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 18:49
hier ist nochmal der code zum speichern. über einen anderen button legt ich über adodataset1.append einen neuen datensatz an.
Delphi-Quellcode:
var
  blob: TAdoBlobStream;
  fs:TMemorystream;
begin
AdoDataset1.edit;
  blob := TADOBlobStream.Create(AdoDataset1Bild, bmwrite);
    try
    fs := TMemorystream.create();
    ADOImage.Picture.Bitmap.SaveToStream(fs);
    fs.Seek(0, soFromBeginning);
    try
      blob.CopyFrom(fs, fs.Size);
    finally
      fs.Free;
    end;
  finally
    blob.Free;
          AdoDataset1.post;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#55

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 19:15
Und wenn Du das ADODataset.Edit weglässt?

[edit] Habe meinen alten Code wiedergefunden (Firebird und ZEOS, aber das dürfte mit ADO ähnlich funktionieren):
Delphi-Quellcode:
procedure TFrmNewPic.btnSaveClick(Sender: TObject);
var Stream: TMemoryStream;
    aBMP: TBitmap;
    aJPG: TJPEGImage;
begin
  if Image1.Picture.Graphic.Empty then exit;
  Stream := TMemoryStream.Create;
  try
    aBMP := TBitmap.Create;
    try
      aJPG := TJPEGImage.Create;
      try
        try
          aBMP.Assign(Image1.Picture.Graphic);
          aJPG.Assign(aBMP);
          aJPG.SaveToStream(Stream);
          Stream.Position := 0;
          with ZQuery1 do
            begin
              Close;
              SQL.Text := 'INSERT INTO Bild(Grafik, Bezeichnung) VALUES(:img,:bez)';
              ParamByName('img').LoadFromStream(Stream,ftGraphic);
              ParamByName('bez').AsString := edtBezeichnung.Text;
              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;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
uwe12

Registriert seit: 21. Apr 2009
58 Beiträge
 
#56

Re: Image in Access Datenbank speichern

  Alt 1. Mai 2009, 19:27
dann kommt die fehlermeldung, dass das dataset nicht im editiermodus ist. aber was ich auch nicht verstehe, warum mein anderer buuton zum anlegen eines neuen datensatzes auch nicht funktioniert. hab nochmal den kompletten quelltext von dem programm reingestellt.

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 = 'FFthen begin
     bS.ReadBuffer(buffer, 1);
     hx:=IntToHex(buffer,2);
     if hx = 'D8then Result := bS.Position - 2
     else if hx = 'FFthen bS.Position := bS.Position-1;
   end;
  end;
 finally
  bS.Free
 end;
end;
procedure Tad.ADODataSet1AfterScroll(DataSet: TDataSet);
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
 begin
  bS := TADOBlobStream.Create(AdoDataset1Bild, bmRead);
  try
    bS.Seek(JpegStartsInBlob(AdoDataset1Bild), 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
  blob: TAdoBlobStream;
  fs:TMemorystream;
begin
   AdoDataset1.edit;
  blob := TADOBlobStream.Create(AdoDataset1Bild, bmwrite);
    try
    fs := TMemorystream.create();
    ADOImage.Picture.Bitmap.SaveToStream(fs);
    fs.Seek(0, soFromBeginning);
    try
      blob.CopyFrom(fs, fs.Size);
    finally
      fs.Free;
    end;
  finally
    blob.Free;
          AdoDataset1.post;
  end;
end;
procedure Tad.Button3Click(Sender: TObject);
begin
adodataset1.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';
AdoDataset1.Active:=True;
end;
procedure Tad.FormDestroy(Sender: TObject);
begin
AdoDataset1.Active:=False;
end;
end.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#57

Re: Image in Access Datenbank speichern

  Alt 2. Mai 2009, 13:07
Klappt es denn, wenn Du das mit SQL machst wie in meinem Beispiel?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
uwe12

Registriert seit: 21. Apr 2009
58 Beiträge
 
#58

Re: Image in Access Datenbank speichern

  Alt 3. Mai 2009, 09:21
da kommt bei mir immer, dass ParamByName nicht deklariert wurde.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#59

Re: Image in Access Datenbank speichern

  Alt 3. Mai 2009, 09:42
Bei Ado muss noch ein Parameters eingeschoben werden:
Dataset.Parameters.ParamByName().Value
Markus Kinzler
  Mit Zitat antworten Zitat
uwe12

Registriert seit: 21. Apr 2009
58 Beiträge
 
#60

Re: Image in Access Datenbank speichern

  Alt 3. Mai 2009, 09:49
ich hab das jetzt mal davor geschrieben, aber es bleibt immer noch undeklariert.
Delphi-Quellcode:
AdoQuery1.Parameters.ParamByName().Value
ParamByName('img').LoadFromStream(Stream,ftGraphic);
ParamByName('bez').AsString := edtBezeichnung.Text;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 6 von 8   « Erste     456 78      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.
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