Bild mit C++ in eine IBDatenbank??
-
Hallo erstmal,
Ich habe in einer Tabelle ein Blob Feld. In dieses möchte ich ein Bild für jeden Datensatz einfügen. Ich habe mit der Suchen-Funktion hier im Forum nichts brauchbares gefunden. Kann mir einer sagen wie das geht, oder einen Tip geben.
-
Kann es den sein, dass sich hier keiner mit Blob-Feldern auskennt?? Ich kann nicht glauben, dass das noch keiner versucht hat. Ich weiss mitlerweile das mann nicht direkt in dieses Feld schreiben kann, man muß das Image erst in einen Stream umwandeln. Ist denn da Draussen keiner, der das gleiche Problem hat? Eventuell können wir das dann zusammen Lösen.
-
Nun ja, falls Du den BCB verwendest, sieh Dir mal TBLOBStream an, wie das allerdings in reinem C++ geht...
Die generelle Logik dahinter ist die Daten in einen Stream zu schreiben und diesen Stream über eine geeignete Methode der DB-Zugriffskomponenten in die DB zu schreiben.
-
Ich ich verwende den BCB 6. Ich schau mal was ich da finde. Danke erstmal.
-
Also ich hab volgendes gefunden:
void __fastcall TForm1::Button1Click(TObject *Sender) { TStream *Stream2; try { Stream2 = IBClientDataSet1->CreateBlobStream(IBClientDataSet1->FieldByName("Bild"), bmReadWrite); try { IBClientDataSet1->Post(); } __finally { delete Stream2; } } }
Aber wie bekomme ich das Image von der Batei in das stream??
Es muss da was wie...Stream2 = LoadFromFile(OpenPictureDialog1);
... geben???
-
Das Bild in eine entsprechende Komponente laden (TBitmap, TJPEGImage) und dann die Methode SaveToStream() verwenden.
-
Ich bekomme beim Deklarieren des TBitmap Objektes volgenden Fehler:
"E2015 Mehrdeutigkeit zwischen 'TBitmap' und 'Windows::TBitmap' "
wie mach ich das eindeutig?
-
Es gibt 2 Versionen von TBitmap (einmal in Graphics und einmal in Windows).
Du benötigst Graphics::TBitmap. (Du kannst auch den Namespace vorgeben)
-
Also das hat der Compiler gefressen:
TStream *Stream2; Graphics::TBitmap *Bild; Bild=new Graphics::TBitmap; Stream2 = IBDataSet1->CreateBlobStream(IBDataSet1->FieldByName("Bild"), bmReadWrite); Bild->LoadFromFile(OpenPictureDialog1->FileName); Bild->SaveToStream(Stream2); IBClientDataSet1->Post(); delete Stream2;
Nur Beim Bild laden sagt der, dass das nicht geht.
Bild->LoadFromFile(OpenPictureDialog1->FileName);
Was hab ich falsch gemacht??
-
Also ich habe vergessen den "OpenPictureDialog1->Execute();" aufzurufen.
Aber nun bekomme ich die Meldung, dass die DB nicht im Bearbeitungsmodus ist.
-
Also jetzt hab ich es!!!
void __fastcall TForm1::Button1Click(TObject *Sender) { TStream *Stream2; Graphics::TBitmap *Bild; Bild=new Graphics::TBitmap; IBDataSet1->Edit(); Stream2 = IBDataSet1->CreateBlobStream(IBDataSet1->FieldByName("Bild"), bmReadWrite); OpenPictureDialog1->Execute(); Bild->LoadFromFile(OpenPictureDialog1->FileName); Bild->SaveToStream(Stream2); IBDataSet1->Post(); IBDataSet1->Close(); IBDataSet1->Open(); delete Stream2; }
Danke für deine Hilfe.