AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Timage aus Blobfeld

Ein Thema von WS1976 · begonnen am 9. Apr 2007 · letzter Beitrag vom 11. Apr 2007
Antwort Antwort
WS1976
(Gast)

n/a Beiträge
 
#1

Timage aus Blobfeld

  Alt 9. Apr 2007, 13:01
Datenbank: ACCESS • Zugriff über: ADO Komponenten
Hallo,

ein Icon (.ico) wurde in ein Access Blobfeld gespeichert.
wie kriege ich direkt aus Blobfeld wieder ein Timage?

Delphi-Quellcode:
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;
Bisher mache ich das über den Umweg abspeichern auf Platte.
gehts auch einfacher?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

Re: Timage aus Blobfeld

  Alt 9. Apr 2007, 13:14
Hi,

Vielleicht mit

Image1.Picture.Icon.LoadFromStream Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#3

Re: Timage aus Blobfeld

  Alt 9. Apr 2007, 13:18
Hallo,

geht nicht. Ich kann nur einen Tblobstream erzeugen.
Der ist nicht kompatibel zu einem Stream den ich mit Timage benutzen kann.

Danke
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Timage aus Blobfeld

  Alt 9. Apr 2007, 13:25
Hi,

Dann speicherst du das Blobfield in nen normalen Stream und lädst dann das Icon daraus aus.

Delphi-Quellcode:
var Stream: TMemoryStream;
begin
// [...]
  Stream := TMemoryStream.Create;
  try
    blobf.SaveToStream(Stream);
    Image1.Picture.Icon.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
// [...]
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Timage aus Blobfeld

  Alt 9. Apr 2007, 13:38
... oder mit CreateBlobStream:

Delphi-Quellcode:
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;
Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#6

Re: Timage aus Blobfeld

  Alt 10. Apr 2007, 09:35
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:
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;
Bei dir:
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.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Timage aus Blobfeld

  Alt 10. Apr 2007, 09:42
Zitat von WS1976:
Richtig:
image1.Picture.Icon.LoadFromStream(AStream);
Hi,

jup, habe den Fehler von oben übernommen. Ich denke aber, es sollte dann

  image1.Picture.Bitmap.LoadFromStream(AStream); Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#8

Re: Timage aus Blobfeld

  Alt 10. Apr 2007, 17:28
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:
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.
Vielleicht kann jemand den Code gebrauchen.
Viele Grüsse und vielen Dank besonders an Neutral General und dataspider.
  Mit Zitat antworten Zitat
Benutzerbild von dataspider
dataspider

Registriert seit: 9. Nov 2003
Ort: 04539 Groitzsch
1.350 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: Timage aus Blobfeld

  Alt 11. Apr 2007, 08:58
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:
...
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;
Vielleicht hilft es dir noch etwas.

Cu, Frank
Frank Reim
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:39 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