Bild aus Datenbank laden



  • Hallo zusammen!
    Ich habe bereits in dem Forum nach einem Beispiel für das Laden der Bilder aus der Datenbank gesucht, konnte aber leider bis jetzt nichts Brauchbares finden. Kennt vielleicht einer wie man das realisieren kann? Die Bilder sind binär in der Datenbank gespeichert.
    Ich bedanke mich im Voraus für jeden Tipp, mit freundlichen Grüßen
    coder24h



  • Hallo

    Wenn du dir Bilder nur anzeigen willst, brauchst du nur TDBImage als Datenkomponente zu nehmen. Diese Komponente beherscht dann auch das Laden und Speichern als/aus Bitmap-Datei.
    Wenn du wirklich die binären Daten an sich rankommen willst, must du das entsprechende Feld in ein TBlobField casten, das bietet Methoden an, um einen Stream zu bekommen.

    bis bald
    akari



  • Danke akari, du hast mir wieder sehr geholfen.
    So habe ich das gelöst:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
        Query1->Open();
        TBlobField* f = new TBlobField(NULL);
        f = dynamic_cast<TBlobField*>(Query1->FieldByName("ZEICHNUNG_BILD"));
        TBlobStream* s = new TBlobStream(f, bmRead);
        TJPEGImage* img = new TJPEGImage();
        img->LoadFromStream(s);        
        img->SaveToFile("C:\\test_test.jpg");
        delete f;
        delete s;
        delete img;
    }
    

    Schönes Wochenende 👍



  • Das Problem ist noch nicht ganz gelöst, das Bild das ich auslese ist leider nicht komplett. Und zwar ist das so, dass wenn ich die TQuery auf das Formular packe alles richtig abgebildet wir, erzeuge ich dagegen eine Instanz von TQuery zur Laufzeit bekomme ich mein Bild nicht vollständig, wobei das Problem bei größeren Bildern verstärkt wird.

    TQuery *q = new TQuery(NULL);
    
        q->DatabaseName = "TestDB";
        q->SQL->Text = "SELECT ZEICHNUNG_BILD \
                        FROM   MERKMAL                        \
                        where  ARTIKEL = 'TEST' ";
    
        q->Open();
        TBlobField* f; 
        f = dynamic_cast<TBlobField*>(q->FieldByName("ZEICHNUNG_BILD"));
        TBlobStream* s = new TBlobStream(f, bmRead);
        TJPEGImage* img = new TJPEGImage();
        img->LoadFromStream(s);
        img->SaveToFile("C:\\test_test.jpg");
        delete s;
        delete img;
        q->Close();
        delete q;
    

    Kann mir bitte hier was dazu sagen, wie man das Problem umgehen kann? 😞


Anmelden zum Antworten