![]() |
Datenbank: ACCESS • Zugriff über: ADO Komponenten
Timage aus Blobfeld
Hallo,
ein Icon (.ico) wurde in ein Access Blobfeld gespeichert. wie kriege ich direkt aus Blobfeld wieder ein Timage?
Delphi-Quellcode:
Bisher mache ich das über den Umweg abspeichern auf Platte.
procedure TForm1.Button3Click(Sender: TObject);
var blobF : TBlobField; blobstream:tstream; fname:string; begin mytable.Active:=true; myTable.first; fname:=myTable.FieldByName('name').AsString; blobF := mytable.FieldByName('Picture') as TBlobField; blobf.SaveToFile('test.ico'); s.LoadFromFile('test.ico'); image1.Picture.LoadFromFile('test.ico'); end; gehts auch einfacher? Danke |
Re: Timage aus Blobfeld
Hi,
Vielleicht mit
Delphi-Quellcode:
Gruß
Image1.Picture.Icon.LoadFromStream
Neutral General |
Re: Timage aus Blobfeld
Hallo,
geht nicht. Ich kann nur einen Tblobstream erzeugen. Der ist nicht kompatibel zu einem Stream den ich mit Timage benutzen kann. Danke |
Re: Timage aus Blobfeld
Hi,
Dann speicherst du das Blobfield in nen normalen Stream und lädst dann das Icon daraus aus.
Delphi-Quellcode:
Gruß
var Stream: TMemoryStream;
begin // [...] Stream := TMemoryStream.Create; try blobf.SaveToStream(Stream); Image1.Picture.Icon.LoadFromStream(Stream); finally Stream.Free; end; // [...] end; Neutral General |
Re: Timage aus Blobfeld
... oder mit CreateBlobStream:
Delphi-Quellcode:
Cu, Frank
procedure TForm1.Button3Click(Sender: TObject);
var AStream: TStream; begin MyTable.Active := true; MyTable.First; AStream := MyTable.CreateBlobStream(FieldByName('Picture'), bmRead); try image1.Picture.LoadFromStream(AStream); finally AStream.Free; end; end; |
Re: Timage aus Blobfeld
Hallo dataspider,
dein Code funktioniert einwandfrei. Für alle die das nachvollziehen wollen: bei dir hat sich leider ein kleiner Fehler eingeschlichen. (hab try except; weggelassen)
Delphi-Quellcode:
Bei dir:
procedure TForm1.Button4Click(Sender: TObject);
var AStream: TStream; begin MyTable.Active := true; MyTable.First; AStream := MyTable.CreateBlobStream(Mytable.FieldByName('Picture'), bmRead); image1.Picture.Icon.LoadFromStream(AStream); end; image1.Picture.LoadFromStream(AStream); Die Methode Loadfromstream gibt's bei picture nicht! Richtig: image1.Picture.Icon.LoadFromStream(AStream); Zu deinem Code Neutral General: dein Code funktioniert nicht. Ergebnis Streamlesefehler. (Warum hab ich noch nicht rausgefunden.) Vielen Dank!!! Ihr habt mir sehr geholfen. |
Re: Timage aus Blobfeld
Zitat:
jup, habe den Fehler von oben übernommen. Ich denke aber, es sollte dann
Delphi-Quellcode:
Cu, Frank
image1.Picture.Bitmap.LoadFromStream(AStream);
|
Re: Timage aus Blobfeld
hallo,
habe eine komplette Unit gebaut: 1.) Procedure save_file_to_access (s:TObject;pfad,fname,name,Fieldname:string); Speichert ein Icon komplett in einer Access Datenbank s --> TADOTable pfad --> Pfad des Icons fname --> Filename des Icons name --> Bezeichner des Namens in der Accessdatenbank Fieldname --> Bezeichner des OLE Feldes in der Accesdatenbank 2.) Procedure save_access_to_file(s: TObject;pfad,fname,name,Fieldname:string); Holt ein Icon aus einer Access datenbank und legt es als File ab. s --> TADOTable pfad --> Pfad des Icons fname --> Filename des Icons name --> Bezeichner des Namens in der Accessdatenbank Fieldname --> Bezeichner des OLE Feldes in der Accesdatenbank 3.) Procedure save_access_to_Image(s,t: TObject;Fieldname:string); Holt ein Icon aus einer Access Datenbank und stellt es als Timage dar. s --> TADOTable T --> Timage in dem das Icon erscheinen soll Fieldname --> Bezeichner des OLE Feldes in der Accesdatenbank
Delphi-Quellcode:
Vielleicht kann jemand den Code gebrauchen.
unit U_blobmanage;
interface uses DB, Classes, ADODB, ExtCtrls; Procedure save_file_to_access(s: TObject;pfad,fname,name,Fieldname:string); Procedure save_access_to_file(s: TObject;pfad,fname,name,Fieldname:string); Procedure save_access_to_Image(s,t: TObject;Fieldname:string); implementation Procedure save_file_to_access(s: TObject;pfad,fname,name,Fieldname:string); var blobF : TBlobField; begin TADOTable(s).Active:=true; TADOTable(s).Insert; if (Pfad<>'') then if (pfad[length(pfad)]<>'\') then pfad:=pfad+'\'; TADOTable(s).FieldByName(name).AsString:=fname; blobF := TADOTable(s).FieldByName(Fieldname) as TBlobField; blobf.LoadFromFile(pfad+fname); TADOTable(s).Post; end; Procedure save_access_to_file(s: TObject;pfad,fname,name,Fieldname:string); var blobF : TBlobField; begin TADOTable(s).Active:=true; TADOTable(s).first; if (Pfad<>'') then if (pfad[length(pfad)]<>'\') then pfad:=pfad+'\'; fname:=TADOTable(s).FieldByName(name).AsString; blobF := TADOTable(s).FieldByName(Fieldname) as TBlobField; blobf.SaveToFile(pfad+fname); end; Procedure save_access_to_Image(s,t: TObject;Fieldname:string); var AStream: TStream; begin TADOTable(s).Active := true; TADOTable(s).First; AStream := TADOTable(s).CreateBlobStream(TADOTable(s).FieldByName(Fieldname), bmRead); TImage(t).Picture.Icon.LoadFromStream(AStream); end; end. Viele Grüsse und vielen Dank besonders an Neutral General und dataspider. |
Re: Timage aus Blobfeld
Hi,
ich habe mir eine Proc mal rausgepickt und angepasst. Es ist besser, statt TObject TDataSet als Parameter zu definieren. Die Prüfung, ob die Datei existiert, sollte zu Beginn erfolgen. Die Benennung der Parameter sollte nachvollziehbar sein.
Delphi-Quellcode:
Vielleicht hilft es dir noch etwas.
...
procedure SaveFileToDB(DataSet: TDataSet; const FilePath, FileName, NameFieldname: string; DataFieldName: string); ... procedure SaveFileToDB(DataSet: TDataSet; const FilePath, FileName, NameFieldname: string; DataFieldName: string); Var FullFileName: String; begin FullFileName := IncludeTrailingPathDelimiter(FilePath) + FileName; // PreCondition - File must exist if not FileExists(FullFileName) then exception.Create(Format('Datei %s nicht vorhanden', [FullFileName])); with DataSet do begin if not Active then Active := true; Insert; FieldByName(NameFieldname).AsString := FileName; TBlobField(FieldByName(DataFieldName)).LoadFromFile(FullFileName); Post; end; end; Cu, Frank |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz