Delphi-PRAXiS
Seite 4 von 8   « Erste     234 56     Letzte »    

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)

hoika 30. Apr 2009 12:21

Re: Image in Access Datenbank speichern
 
Hallo,

entweder die Tabelle ist leer oder du stehst hinter dem letzten Datensatz (EOF),
dann wird ein Table.Edit automatisch zu Table.Insert,
oder du machst was verkehrt ...

Was machst du genau vor dem Table.Edit ?
Hängt an dem Table noch was dran (DBGrid) ?


#Edit:
gerade gesehen

Zitat:

wenn ich einen neuen datensatz anlegen möchte
Warum kein Table.Insert ?

Lass mal den ganzen Blob-Kram weg und lege nur einen leeren Record an.



Heiko

uwe12 30. Apr 2009 14:06

Re: Image in Access Datenbank speichern
 
ich versteht das nicht ganz. ich komm irgendwie nicht weiter. die tabelle ist nicht leer. Vor dem AdoTable1.edit lege ich einen neuen datensatz über Adotable1.append an.
hab hier nochmal mein quelltext.
Delphi-Quellcode:
var
  blob: TAdoBlobStream;
  fs:TMemorystream;
begin
  AdoTable1.edit;
  blob := TADOBlobStream.Create(AdoTable1Bild, bmwrite);
  try  
    fs := TMemorystream.create();
    ADOImage.Picture.Bitmap.SaveToStream(fs);
    fs.Seek(0, soFromBeginning);
    try
      blob.CopyFrom(fs, fs.Size);
        AdoTable1.post;
    finally
      fs.Free;
    end;
  finally    
    blob.Free;
  end;
end;

DeddyH 30. Apr 2009 14:14

Re: Image in Access Datenbank speichern
 
Kommt denn nach dem Append noch ein Post?

hoika 30. Apr 2009 14:18

Re: Image in Access Datenbank speichern
 
Hallo,

Zitat:

Vor dem AdoTable1.edit lege ich einen neuen datensatz über Adotable1.append an.
hab hier nochmal mein quelltext.
Wie sollen wir helfen, wenn du nur die Hälfte postest.

Ich sehe hier kein Append.

Ein Edit ist nicht nowendig, wenn du genau vorher ein Append machst.

Unter Tex würde man jetzt sagen: Minimal-Bsp. erzeugen und + DB posten.


Heiko

uwe12 30. Apr 2009 14:48

Re: Image in Access Datenbank speichern
 
es kommt nur append. ich habe hier mal meinen gesamten quelltext.
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 TForm1.ADOTable1AfterScroll(DataSet: TDataSet);
var
  bS : TADOBlobStream;
  Pic : TJpegImage;
 begin
 if AdoTable1.FieldByName('Bild').AsString <> '' then
 begin
  bS := TADOBlobStream.Create(AdoTable1Bild, bmRead);
  try
    bS.Seek(JpegStartsInBlob(AdoTable1Bild), soFromBeginning);
    Pic:=TJpegImage.Create;
    try
     Pic.LoadFromStream(bS);
     ADOImage.Picture.Graphic:=Pic;
    finally
     Pic.Free;
    end;
  finally
    bS.Free
  end;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if openpicturedialog1.Execute then
begin
  AdoImage.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
end;
     
procedure TForm1.Button2Click(Sender: TObject);
var
  blob: TAdoBlobStream;
  fs:TMemorystream;
begin
  AdoTable1.edit;
  blob := TADOBlobStream.Create(AdoTable1Bild, bmwrite);
  try  
    fs := TMemorystream.create();
    ADOImage.Picture.Bitmap.SaveToStream(fs);
    fs.Seek(0, soFromBeginning);
    try
      blob.CopyFrom(fs, fs.Size);
    finally
      AdoTable1.post;
      fs.Free;
    end;
  finally
    blob.Free;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Adotable1.Append;
end;

procedure TForm1.FormCreate(Sender: TObject);
var sDBPath, sCons: string;
begin
sDBPath := 'O:\adopic\Datenbank1.mdb';
sCons := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + sDBPath + ';Persist Security Info=False';
ADOTable1.Active:=True;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ADOTable1.Active:=False;
end;

end.

DeddyH 30. Apr 2009 14:54

Re: Image in Access Datenbank speichern
 
Also entweder Append oder Edit, so wie oben macht das ja nicht viel Sinn.

uwe12 30. Apr 2009 15:01

Re: Image in Access Datenbank speichern
 
aber wenn ich das Adotable1.edit weglasse, dann kommt folgende Fehlermeldung, wenn ich auf speichern klicke: Eine leere Zeile kann nicht eingefügt werden. Mindestens ein Spaltenwert der Zeile muss festgelegt sein.

DeddyH 30. Apr 2009 15:07

Re: Image in Access Datenbank speichern
 
Nimm doch das jetzige Append weg und mach es dorthin, wo jetzt Edit steht (ich mache sowas immer per SQL und nicht per Dataset-Methoden, daher bin ich da nicht ganz sicher).

mkinzler 30. Apr 2009 15:12

Re: Image in Access Datenbank speichern
 
Zitat:

Nimm doch das jetzige Append weg und mach es dorthin, wo jetzt Edit steht
Ja .Edit versetzt den aktuellen Datensatz in den Bearbeitungsmodus; .Insert fügt einen neuen datensatz vor dem bisher aktuelle ein und wechselt in den Bearbeitungsmodus, .Append fügt ihn an am Ende ein und wechselt in Bearbeitungsmodus

uwe12 30. Apr 2009 15:17

Re: Image in Access Datenbank speichern
 
es kommt immernoch die meldung: eine leere zeile kann nicht eingefügt werden. Ich glaube das programm weis nicht, was es einfügen soll.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.
Seite 4 von 8   « Erste     234 56     Letzte »    

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