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:
Lass mal den ganzen Blob-Kram weg und lege nur einen leeren Record an. Heiko |
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; |
Re: Image in Access Datenbank speichern
Kommt denn nach dem Append noch ein Post?
|
Re: Image in Access Datenbank speichern
Hallo,
Zitat:
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 |
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. |
Re: Image in Access Datenbank speichern
Also entweder Append oder Edit, so wie oben macht das ja nicht viel Sinn.
|
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.
|
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).
|
Re: Image in Access Datenbank speichern
Zitat:
|
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. |
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