| Autor |
Beitrag |
vamp79
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 08.01.03 01:57
Hallo und einen schönen guten abend,
ich hab folgendes Problem. ich habe mir ein kleines Programm geschrieben (oder besser ich versuche es). In der Datenbank des Programms soll zu jeden Datensatz bei bedarf ein bild hinzugefügt werden.
ich hab es versucht mit einer Paradox Datenbank, einem DBImage und einem OpenPictureDialog. aber irgendwie funktioniert das nicht.
das prog. soll in etwa so funktionieren. man klickt auf einen Button, dann öffnet sich der OpenPictureDialog, dann sucht man sich ein JPG von der platte aus und dieses ausgewählte JPG soll dann im DBImage angezeigt werden. außerdem soll der Pfad des Bildes in der Datenbank gespeichert werden.
Vor allem ist es wichtig das die bilder im JPF Format bleiben. ich bekomm dann allerdings immer die fehlermeldung:
| Zitat: | | Bitmap image is not valid. |
Kann mir jemad helfen, ich hab schon im Forum und im internet gesucht aber ich hab nichts passendes gefunden.
So lautet mein quellcode
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56:
| unit Unit1;
interface
uses Jpeg, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, StdCtrls, Mask, DB, DBTables, ExtDlgs;
type TForm1 = class(TForm) DBEdit1: TDBEdit; Button1: TButton; DBImage1: TDBImage; DBNavigator1: TDBNavigator; DataSource1: TDataSource; Table1: TTable; OpenPictureDialog1: TOpenPictureDialog; Button2: TButton; procedure Button1Click(Sender: TObject); procedure DBImage1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
procedure TForm1.DBImage1Click(Sender: TObject); begin DBImage1.Picture.LoadFromFile(OpenPictureDialog1.FileName ); end;
procedure TForm1.Button2Click(Sender: TObject); begin If OpenPictureDialog1.Execute then Begin
Table1.Edit; Table1.FieldbyName('Bild').AsString:=OpenPictureDialog1.Filename; Table1.Post; End;
end;
end. |
Ach so... ich bin anfänger, wäre also für eineeinfach aber genaue Antwort sehr sehr dankbar.
Gruß
Vamp79
|
|
UGrohne
      

Beiträge: 5502
Erhaltene Danke: 220
Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
|
Verfasst: Mi 08.01.03 02:56
Wenn ichs richtig weiß, nimmt DBImage nur Bitmaps auf, Du musst also Dein JPG in ein BMP umwandeln, anders geht es nicht.
Hier hab ich einen Code, der ein JPG in BMP umwandelt und dieses in einem bestimmten Pfad speichert. Ich denke, Du kannst es soweit erweitern, dass ein anderer Pfad genommen werden kann:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure Tform1.JPEGtoBMP(FileName : string); var jpeg : TJPEGImage; bmp : TBitmap; begin jpeg:= TJPEGImage.Create; try jpeg.LoadFromFile(FileName ); jpeg.CompressionQuality := 100; {Normaler Wert, kann weggelassen werden} bmp:= TBitmap.Create; try bmp.Assign(jpeg); ForceDirectories(ExtractFilePath(Application.ExeName)+'graphics'); bmp.SaveTofile(ExtractFilePath(Application.ExeName)+'graphics\logo.bmp'); finally bmp.free end; finally jpeg.free end; |
Ach, jetzt les ich deinen Beitrag nochmal, da stimmt was nicht. Ich lass das oben aber mal, vll. kannstes doch brauchen. DBImage zeigt aus BLOB-Feldern (Binary Large Object) der Datenbank Bilder an. Wenn Du aber den Pfad speichern willst, dann tust Du das auch, dann brauchste aber in der DB ein String-Feld und speicherst dort Deinen Pfad. Das Bild zeigst Du dann aber in einer TImage-Komponente an, ist halt die Frage, ob das dann JPG unterstützt, deswegen der obige Code. Musste einfach mal rumprobieren.
Gruß
|
|
vamp79 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 08.01.03 09:29
Versteh ich das richtig???
Der Pfad des Bildes, was ich über den "OpenPictureDialog" ausgewählt habe wird in der Datenbank in ein stringfeld gespeichert.
dann benutze ich ein TImage-Komponente die auf das stringfeld zugreift und dann das bild anzeigt?
wie erstelle ich in der db eine string feld oder besser was ist ein stringfeld?
und wie verknüpfe ich die TImage-Komponente mit dem Stringfeld.
muß ich sonst noch was beachten??
vielen dank
vamp79
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 08.01.03 10:14
Hi,
durch Zufall habe ich gestern ein kleines Bilder-Programm gemacht und hierbei festgestellt, daß bei TImage das Bild selber in der DFM-Datei steht ! In einer DB würde ich es als Blob-Feld speichern, sofern das mit Paradox überhaupt geht. Werde das mal mit Interbase ausprobieren.
Gruß
Hansa
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 08.01.03 10:18
Wußte doch, daß da was war !
www.delphipraxis.net...p;highlight=blobfeld
Les Dir das mal durch. Da scheint einer ähnliche Probleme zu haben.
Gruß
Hansa
P.S.: Sehe gerade, das bringt Dir nicht viel, der Frage-Steller war damals wenig kooperativ.  Suche lieber mal hier !
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Mi 08.01.03 10:25
Hi
| vamp79 hat folgendes geschrieben: | Der Pfad des Bildes, was ich über den "OpenPictureDialog" ausgewählt habe wird in der Datenbank in ein stringfeld gespeichert.
dann benutze ich ein TImage-Komponente die auf das stringfeld zugreift und dann das bild anzeigt?
|
Ich würde dein erstes Posting auch so interpretieren.
| vamp79 hat folgendes geschrieben: |
wie erstelle ich in der db eine string feld oder besser was ist ein stringfeld?
und wie verknüpfe ich die TImage-Komponente mit dem Stringfeld.
|
Na wie wär's wenn du das gleiche Programm benutzt, mit dem duch auch die Tabelle erzeugt und das Bildfeld hineingezaubert hast?  Stichwort Datenbankoberfläche. Ein Stringfeld ist ein Feld das einen String, eine Zeichenkette speichert. Also ein ganz banales Textfeld. Mit dem Code, den du unter Button2Click stehen hast, füllst du es mit dem Pfad des Bildes.
| vamp79 hat folgendes geschrieben: |
muß ich sonst noch was beachten??
|
Ja, das Textfeld in der Datenbank muss natürlich gross genug sein, um den Pfad aufnehmen zu können. Und wenn du durch die Daten blätterst, muss das Bild auf deinem Formular aktualisiert werden. Das könntest du im AfterScroll Ereignis deiner Tabelle machen. Etwa so:
Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Table1AfterScroll(DataSet: TDataSet); begin image1.picture := nil; if not table1.FieldByName('Pfad').IsNull then if FileExists(table1.FieldByName('Pfad').AsString) then image1.Picture.LoadFromFile(table1.FieldByName('Pfad').AsString); end; |
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Mi 08.01.03 14:18
Hi,
jetzt bin ich hier am grübeln. Bevor ich falsch anfange : Was ist denn nun eigentlich besser, nur den Pfad auf das Bild in der DB zu speichern, oder macht es nichts aus, das Bild selbst als Blob zu speichern? Grübel, grübel und studier.... Oder bin ich da sowieso verkehrt
Gruß
Hansa
|
|
vamp79 
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 08.01.03 18:14
Alles klar jetzt funtioniert es  , das der Pfad des JPG-Bildes in der Datenbank gespeichert
wird, aber wie bekomm ich es hin das das bild mir auch im TImage angezeigt wird??
ich muß ja warscheinlich irgendwie dad timage mit der datenbank verbinden
vielen dank
vamp79
|
|
LCS
      
Beiträge: 1305
Erhaltene Danke: 1
WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
|
Verfasst: Do 09.01.03 09:51
Hi
| vamp79 hat folgendes geschrieben: | Alles klar jetzt funtioniert es , das der Pfad des JPG-Bildes in der Datenbank gespeichert
wird, aber wie bekomm ich es hin das das bild mir auch im TImage angezeigt wird??
ich muß ja warscheinlich irgendwie dad timage mit der datenbank verbinden
|
Steht in meiner Antwort ein Stück weiter oben.
Gruss Lothar
_________________ Der BH ist für die Brust, der Plan ist für'n Ar...
|
|
|