Autor |
Beitrag |
Black_Fox
      
Beiträge: 66
|
Verfasst: Mi 02.04.08 18:02
Hi ich würde gerne ein Bild was ich mit Hilfe eines Buttons in ein DBImage Feld lade, mit Hilfe eines weiteren Buttons in der Tabelle die ich angelegt habe speichern hier mein text bis her:
hab stelle wo der fehler komt mal kommentiert
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TFAdressbuch.BBildLadenClick(Sender: TObject); begin try if OpenPicture.Execute then DBBild.Picture.LoadFromFile(OpenPicture.FileName); except ShowMessage('Bild konnte nicht geöffnet werden!'); end; end;
procedure TFAdressbuch.BBildSpeichernClick(Sender: TObject); begin TAdressdaten.FieldValues['Bild'] := DBBild.Picture; -> hier kommt der Fehler "Inkompatible Typen Variant und TPicture" was kann ich dagegen machen? TAdressdaten.Post; TAdressdaten.Refresh; end; | ,
Moderiert von Christian S.: Code- durch Delphi-Tags ersetzt
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Mi 02.04.08 19:56
_________________ Na denn, dann. Bis dann, denn.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Do 03.04.08 17:10
Habs jetzt so gemacht:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TFAdressbuch.BBildSpeichernClick(Sender: TObject); var MyPictureStream : TMemoryStream; begin MyPictureStream := TMemoryStream.Create; Try ThePicture.SaveToStream (MyPictureStream); MyPictureStream.Seek (0, soFromBeginning); (TAdressdaten.FieldByName('Bild') as TBLobField).LoadFromStream (MyPictureStream); Finally MyPictureStream.Free; end end; |
bloß nur kommt eine Exception: "Im Project1.exe ist eine Exception aufgetreten der Klasse EDatabaseError. Meldung 'tAdressdaten: Datenmenge weder im Eitier- noch im Einfügemodus'. Prozeß wurde angehalten.Mit Einzelene...."
Moderiert von Klabautermann: Code- durch Delphi-Tags ersetzt
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Do 03.04.08 17:14
_________________ Na denn, dann. Bis dann, denn.
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Do 03.04.08 17:17
Was für eine Delphiversion benutzt du denn, bei den Demos sollten einige Beispiele für Datenbanken bei sein jedenfalls bei der Prof und Enterprise.
_________________ Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Do 03.04.08 18:58
ok werd ich mal ausprobieren^^ wusste das was fehlt
hab delphi 6 enterprise
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Fr 04.04.08 16:11
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Fr 04.04.08 17:18
1. Wenn wir dir helfen sollen, solltest du uns den Text der Fehlermeldung nicht vorenthalten.
2. Verwende statt Code Tags, Delphi Tags um deinen Quelltext im Post einzubinden.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Sa 05.04.08 13:58
zu 1. die fehlermedung hatte ich weiter oben schonmal erwähnt deswegen auch: "kommt immer noch der Fehler":
"Im Project1.exe ist eine Exception aufgetreten der Klasse EDatabaseError. Meldung 'tAdressdaten: Datenmenge weder im Eitier- noch im Einfügemodus'. Prozeß wurde angehalten.Mit Einzelene...."
zu 2. ok sind das delphi tags --> [delphi[[/delphi]?
|
|
IceBube
      
Beiträge: 231
|
Verfasst: Sa 05.04.08 14:14
Wenn du ein Feld editieren willst, musst du es erst "auswählen"...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TAdressdaten.RecNo := TAdressdaten.Edit; TAdressdaten['Bild'] := DBBild.Picture; MyPictureStream := TMemoryStream.Create; Try ThePicture.SaveToStream (MyPictureStream); MyPictureStream.Seek (0, soFromBeginning); (TAdressdaten.FieldByName('Bild') as TBLobField).LoadFromStream (MyPictureStream); Finally MyPictureStream.Free; end; TAdressdaten.Post; end; |
lg
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Sa 05.04.08 17:40
Das man auf einem Datensatz stehen muss, ist sicherlich klar.
Was mich nur ein bisschen wundert ist die Zeile:
Delphi-Quelltext 1:
| TAdressdaten['Bild'] := DBBild.Picture; |
Mal abgesehen davon, das ich noch nie den Fall hatte das eine Zuweisung auf diese Art ohne Exception abgeht, ist das eigentlich gleichbedeutend mit:
Delphi-Quelltext 1:
| TAdressdaten.FieldByName('Bild') := DBBild.Picture; |
Diese Zeile dürfte also der Fehler sein.
Und dass, das Ergebnis: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TFAdressbuch.BBildSpeichernClick(Sender: TObject); var MyPictureStream : TMemoryStream; begin TAdressdaten.Edit; MyPictureStream := TMemoryStream.Create; Try ThePicture.SaveToStream (MyPictureStream); MyPictureStream.Seek (0, soFromBeginning); (TAdressdaten.FieldByName('Bild') as TBLobField).LoadFromStream (MyPictureStream); Finally MyPictureStream.Free; end; TAdressdaten.Post; end; |
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Sa 05.04.08 19:29
Kommt immer noch der Fehler T_T: hier nochmal der Quelltext für den Bild lade Button und den Bild speichern Button:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24:
| procedure TFAdressbuch.BBildLadenClick(Sender: TObject); begin try if OpenPicture.Execute then DBBild.Picture.LoadFromFile(OpenPicture.FileName); except ShowMessage('Bild konnte nicht geöffnet werden!'); end; end;
procedure TFAdressbuch.BBildSpeichernClick(Sender: TObject); var MyPictureStream : TMemoryStream; begin TAdressdaten.Edit; MyPictureStream := TMemoryStream.Create; Try ThePicture.SaveToStream (MyPictureStream); MyPictureStream.Seek (0, soFromBeginning); (TAdressdaten.FieldByName('Bild') as TBLobField).LoadFromStream (MyPictureStream); Finally MyPictureStream.Free; end; TAdressdaten.Post; end; |
Also erst öffne ich ein Bild was ich auswähle in dem Fenster und dann soll es mit einem klick in der db gespeichert werden. Der Fehler kommt immer wenn ich das Programm gestartet habe und dann den Button Speichern drücke.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Mi 09.04.08 09:03
hi kann mir jemand sagen was daran falsch ist? hab ne vermutung bin mir aber ni ganz sicher, weiß nämlich nicht wo das "ThePicture" zuzuordnen ist muss ich das deklarieren?
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Mi 09.04.08 19:03
An dem Schnipsel ist nichts falsch.
Selbst wenn was mit ThePicture nicht stimmen würde, würdest du diese Fehlermeldung nicht bekommen. Da weder die Zuweisung noch TAdressdaten.Post bei einer Exception ausgeführt werden würde.
Aber, um auf Nummersicher zu gehen, kannst du es ja mal anders machen und es mit einer Datei von der Platte mal probieren und nicht aus einem Stream:
(TAdressdaten.FieldByName('Bild') as TBLobField).LoadFromFile(-filename-);.
Und dir dabei natürlich auch keinen Zugriff auf ThePicture gönnen, wenn du dort schon den Fehler vermutest.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Do 10.04.08 17:32
also mit loadfromfile gehts, nur wie bekome ich das nun ohne hin?^^
kann ich das den irgendwie sagen das er das nicht aus einen file laden soll sondern aus einem image oder dbimage?
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Do 10.04.08 23:29
Das "ThePicture" soll ein Synonym sein für das Bildobjekt, das auf Deinem Formular sitzt.
In Deinem Fall sollte das "DBBild" sein.
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Fr 11.04.08 08:54
aso ok hab ich mir schon gedacht aber da konnte ich glaube kein savetostream auswählen, da muss ich nochmal schauen
|
|
Black_Fox 
      
Beiträge: 66
|
Verfasst: Sa 12.04.08 13:33
jop hab nachgescaut kann da kein dbimage1.savetostream gibt es nicht? wie muss ich das jetzt machen?
|
|
SmileySN
      
Beiträge: 297
WinXP, Win7
Delphi 2010 Professional
|
Verfasst: Sa 12.04.08 15:10
Kein DBImage sondern ein einfaches Image nehmen und den Dateinamen mit Pfad aus der Datenbank lesen und dann im Image.loadfromfile laden.
Das Bild sollte als, für das Imageobjekt, lesbares Format vorliegen.
Das mit dem Stream ist doch noch etwas zu schwierig, mach es erst mal auf die einfache art.
|
|
Sinspin
      
Beiträge: 1335
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Sa 12.04.08 19:20
Beim verwenden eines DBImages geht es eigentlich am einfachsten. Einfach die DataSource und das Feld zuweisen und erledigt.
Informationen dazu, wie man das Bild bearbeiten und ändern kann stehen in der Delphi Hilfe.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|