Autor Beitrag
Black_Fox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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

ausblenden 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 user profile iconChristian S.: Code- durch Delphi-Tags ersetzt
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Mi 02.04.08 19:56 
Du musst mit einem TBlobField (BLOB = Binary Large OBject) und einem Stream arbeiten. Das sollte so gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Var
  MyPictureStream : TMemoryStream;

Begin
  MyPictureStream := TMemoryStream.Create;
  Try
    ThePicture.SaveToStream (MyPictureStream);
    MyPictureStream.Seek (0, soFromBeginning);
    (MyTable.FieldByName('PictureFieldName'as TBLobField).LoadFromStream (MyPictureStream);
  Finally
    MyPictureStream.Free;
  End
End;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt

_________________
Na denn, dann. Bis dann, denn.
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 03.04.08 17:10 
Habs jetzt so gemacht:

ausblenden 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 user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 03.04.08 17:14 
Na, in den Edit/Append-Modus solltest Du schon wechseln. Felder einer Datentabelle verändert man so:

ausblenden Delphi-Quelltext
1:
2:
3:
MyTable.Edit; // oder MyTable.Append;
MyTable['Feld'] := Irgendwas;
MyTable.Post; // oder MyTable.Cancel, das verwirft alle Ändernungen


Moderiert von user profile iconKlabautermann: Delphi-Tags eingefügt.

_________________
Na denn, dann. Bis dann, denn.
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Do 03.04.08 18:58 
ok werd ich mal ausprobieren^^ wusste das was fehlt
hab delphi 6 enterprise
Black_Fox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Fr 04.04.08 16:11 
Hab das jetzt so gemacht, aber es kommt immer noch der Fehler:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TFAdressbuch.BBildSpeichernClick(Sender: TObject);
var MyPictureStream : TMemoryStream;
begin
  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;


Moderiert von user profile iconKlabautermann: Code- durch Delphi-Tags ersetzt
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: Sa 05.04.08 14:14 
Wenn du ein Feld editieren willst, musst du es erst "auswählen"...

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
//
TAdressdaten.RecNo := {Hier der Datensatz z.b.: "2"}
//
  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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
TAdressdaten.FieldByName('Bild') := DBBild.Picture;					

Diese Zeile dürfte also der Fehler sein.

Und dass, das Ergebnis:
ausblenden 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;
  //TAdressdaten['Bild'] := DBBild.Picture; <--- weg damit
  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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 66



BeitragVerfasst: Sa 12.04.08 13:33 
jop hab nachgescaut kann da kein dbimage1.savetostream gibt es nicht? wie muss ich das jetzt machen?
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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?