Image Pfad in Datenbank abspeichern und auslesen



  • Wie kann ich von einem durch OpenDialog geöffneten Bild den Pfad auslesen und in eine datenbank schreiben und auch wieder laden? Wie man ein Bild lädt weiß ich und auch wie ich den Pfad rausbekomme schaffe es aber nur in in Edit oder Memo Felder z.b. zu bringen nicht aber in meine Datenbank. Ich arbeite über Paradox mit einer Access Datenbank.



  • vexx schrieb:

    Ich arbeite über Paradox mit einer Access Datenbank.

    Allein diese Aussage macht es unmöglich Dir zu helfen: Paradox ist eine Datenbank. Access ist eine Datenbank.

    Meinst Du einen Access-DB auf die mit der BDE zugegriffen wird? -> Wenn ja: Tabelle öffnen und Datensatz mit den Informationen einfügen. Hier gibt's garantiert in den FAQs entsprechende Anleitungen. Aber warum nur den Pfad in der DB speichern, warum nicht gleich das Bild selbst (Stichwort: Feldtyp BLOB). Und warum nur den Pfad und nicht auch den Namen der Datei?

    Grüße



  • Arbeite das Datenbanktutorial aus der FAQ durch, insbesondere Kapitel 3.
    Aber das habe ich dir schonmal empfohlen, oder?



  • Hab mich vertan nur access datenbank, pfad und dateiname sollen natürlcuh gespeichert werden, nur den Pfad damit die Datenbank nicht zu groß wird. Wenn ich das über die blob mache wie lautet den der Befehl um das bild von OpenDialog1 z.b. in Datenfeld X abzuspeichern? Bitte nicht hauen aber anfänger müssen auch mal lernen.



  • Ja was denn nun ?
    Willst du das Bild speichern oder nur den Pfad vom Bild ?



  • ich interessiere mich für beide möglichkeiten entweder den pfad zum bild mit dateinamen, oder das bild in der datenbank speichern.



  • Was los keiner lust mir zu helfen? Oder ist das zu einfach? Für mich ist das ein Problem deßhlab wäre ich über jede hilfe froh.



  • Alle Achtung, du hast den Ton drauf, mit dem man sich Freunde macht.

    Generell gilt: Bitte nicht nervtöten! Eine Nachfrage pro Tag ist ausreichend, zumal der Thread immernoch auf der ersten Seite des Forums steht. Die Alternative ist vorübergehendes Schliessen des Threads.
    Das nur als Hinweis, nicht als Aufforderung zur Offtopic-Diskussion.



  • void __fastcall DBfile(AnsiString datei)
    {
    //(002)---DB-file offnen, prüfen, ob *.*-Pfard schon drin  und eintragen in Feld "datei"
    
    Form1->ADOfile->Open();
    Form1->ADOfile->Filtered =True;
    Form1->ADOfile->Filter  ="Datei ="+ QuotedStr(datei);
    if (Form1->ADOfile->RecordCount>0){Form1->ADOfile->Close();
    }else {
    
    Form1->ADOfile->Append();
    Form1->ADOfile->FieldValues["Datei"] = datei;
    Form1->ADOfile->Post();
    Form1->ADOfile->Close();
    
    }
    
     //(002)---Ende
    
     }
    
    //---------------------------------------------------------------------------
    

    Das ist einfache ausschnit von mein Programm.



  • @Jansen
    Ja Sorry war etwas sauer wegen ein paar patzigen antworten in 2 anderen threads von mir. Ich fands scheiße das meine frage nur mit guck in die Faq und die Hilfe gewürdigt wurde, obwohl ich angegeben hatte beides durchgesehen zu haben aber egal.

    Hab das mit dem Speichern des Pfades in meiner datenbank und das auslesen des bildpfades in ein Image Objekt auch hinbekommen, nur wenn ich mein program zu mache sind die daten wieder weg, ich weiß nur nicht wie ich meine änderungen in meine datenbank speichern kann, hab eine Access DB offen und möchte nicht unter neuem namen oder pfad speichern. SOndern nur die änderungen in dieses datei schreiben.



  • Hi,

    hm, wenn ich Dich richtig verstehe, hast Du bisher die Datenbank noch nicht angelegt?

    Um Bilder direkt in die Datenbank zu speichern mußt Du den Feldtyp BLOB verwenden. Das einzig tückische daran ist, dass Du den Umweg über Streams gehen mußt:
    Aus z.B. TBitmap mußt Du die Daten in einen TMemoryStream schreiben und diesen dann in das BLOB-Feld der Datenbank.

    Wenn Du nur den Pfad und den Namen speichern willst, würde ich dir zwei Tabellen empfehlen. Eine Tabelle mit nur einen Feld und einen Eintrag für den Pfad und eine zweite Tabelle für die Namen der Bilder. So vermeidest Du die redundanten Pfadangaben.

    Weißt Du schon wie Du auf die Access-DB zugreifen kannst (willst). Welche Komponenten willst Du für den Zugriff verwenden, respektive welche hast Du zur Verfügung (ist von Deiner BCB-Version abhängig)?

    Grüße



  • Doch doch die datenbank existiert es ist eine Access datenbank und die liegt in dem ordner in dem ich das projekt gespeichert habe. Das feld in dem der Pfad gespeichert wird ist ein textfeld das geht auch super ich möchte jetzt nur wissen wie ich die daten die ich eingegeben habe in der Tabelle speichern kann, sodas nach erneutem öffnen alles noch da ist was ich beim letzten öffnen gändert habe.



  • Und womit greifst Du auf die DB zu? TADO... TQuery, TTable?



  • ttable



  • Dann zum Beispiel mit:

    Table1->Insert();
      Table1->FieldByName("Dateiname")->AsString = Edit->Text;
      // Weitere Felder schreiben... sofern vorhanden
      Table1->Post();
    

    Zum Bearbeiten eines vorhandenen Datensatzes verwendest Du Table1->Edit().

    Hilft Dir das weiter?

    Grüße



  • 🙄 Sorry falls ich mich mißverständlich ausgerückt haben sollte. Ich möchte nicht wissen wie ich die daten meiner Datenbank editiren oder eingeben kann, das weiß ich bereits, ich möchte wissen wie ich diese eingaben in die datenbank speichern kann damit sie beim nächsten öffnen auch noch da sind.



  • Das verstehe ich dann wiederum nicht?!? Normalerweise werden die Daten beim ->Post() in die Datenbank geschrieben. Mehr ist eigentlich nicht nötig.

    Zeig mal die Methode, mit der Du versuchst die Daten in die Datenbank zu schreiben.

    Grüße



  • Hab den Post() befehl vergessen. 😃

    OpenDialog1->Execute();
    if (OpenDialog1->Execute()); Table1->FildByName("Bildfeld")->AsString=(OpenDialog1->FileName);

    so wars glaube ich habs ausm Kopf geschrieben bin gerade nicht an meinem Rechner.

    Muß dann doch nur in die letze Zeile des Befehl
    Table1->Post(); schreiben oder?



  • Ja, sollte dann funktionieren. 🙂



  • Ich hab noch ne kurze Frage gehört zwar eigentlich in ein neues Thema aber egal. Ich hab einen ordner in dem mein Programm ist, mit einem unterorder wo die Bilder drin sind. Wie kann ich dem Programm sagen das es automatisch von dem ordner in dem es sich befindet nach dem ordner bilder sucht(und öffnet) damit ich wenn ich das program mal auf d:/ oder e:/ habe auch noch alle bilder gefunden werden? Mit GetDirectory() vielleicht?



  • AnsiString Verzeichnis = ExtractFilePath(Application->ExeName);
    

    gibt Dir den Pfad der Anwendung zurück. Dann noch das gewünschte Unterverzeichnis anhängen...

    Grüße


Anmelden zum Antworten