Problem ein JPG in einer Datenbank zu speichern
-
Hallo zusammen, ich möchte ein JPG in eine Datenbank speichern, bekomm das aber einfach nicht hin.
Habe folgendes versucht:ADOQuery1->Close(); ADOQuery1->SQL->Add("select bild from bilder where id = '1'"); ADOQuery1->Open(); ADOQuery1->Edit(); TMemoryStream *ms = new TMemoryStream (); ms->LoadFromFile("1.jpg"); TStream *Stream2; Stream2 = ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("Bild"), bmWrite); Stream2->CopyFrom(ms, ms->Size); ADOQuery1->Post(); }Bild ist vom Typ OLE-Objekt. Habe die Datenbank in Access erstellt.
Kann mir vielleicht einer helfen?
Danke im vorraus
mfg
-
Was genau ist denn dein Problem? Ist kein Bild in der Datenbank?
Schreib doch mal nach dem lesen des Bildesms->Position = 0;Damit wird die Position des Lesestreams auf den Anfang zurückgesetzt.
-
Hab ich auch schon probiert, funzt aber auch nicht

Wenn ich das z.b. danach mach ist Stream3 leer.
Es kommt also kein Bild in der Datenbank an.TStream *Stream3 = ADOQuery1->CreateBlobStream(ADOQuery1->FieldByName("Bild"), bmRead); delete Stream2;Das hab ich auchmal probiert, geht aber auch nicht:
ADOQuery1->Close(); ADOQuery1->SQL->Add("select bild from bilder where patid = '1'"); ADOQuery1->Open(); ADOQuery1->Edit(); TMemoryStream *ms = new TMemoryStream (); ms->LoadFromFile("1.jpg"); TStream *Stream2; Stream2 = ADOQuery1->CreateBlobStream(ADOQuery1->Fields->Fields[0], bmWrite); Stream2->CopyFrom(ms, ms->Size); ADOQuery1->Post();
-
Ersetze mal
Stream2->CopyFrom(ms, ms->Size);durch
Stream2->CopyFrom(ms, 0);Wo ist denn der Unterschied von deinem letzten Post zum Ersten?
-
hier mal ein Beispiel zum Speichern:
TMemoryStream *Stream = new TMemoryStream(); Stream->LoadFromFile("1.jpg"); Stream->Position = 0; ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("update bilder set bild = :bild where patid = '1'"); ADOQuery1->Parameters->ParamByName("bild")->DataType = ftBlob; ADOQuery1->Parameters->ParamByName("bild")->LoadFromStream(Stream,ftBlob); ADOQuery1->ExecSQL();und hier zum Laden:
TMemoryStream *Stream = new TMemoryStream(); ADOQuery1->Close(); ADOQuery1->SQL->Clear(); ADOQuery1->SQL->Add("select bild from bilder where patid = '1'"); ADOQuery1->Open(); static_cast<TBlobField*>(ADOQuery1->FieldByName("bild"))->SaveToStream(Stream); Stream->Position = 0;noch einen Tip: nimm statt ADOQuery lieber ADOCommand
-
Wohuu

Hat super geklappt, danke Linnea
Falls nochmal welche dieses Problem haben:
mfg
-
Falls nochmal welche dieses Problem haben:
Ups, sollte sich auf "Parameters->" beziehen, aber da wars schon editiert

Welche Vorteile hat den Command?