SQLite und C++Builder



  • Hallo!

    Ich versuche krampfhaft, auf eine SQLite-Datenbank zuzugreifen. Die Anwendung läßt sich fehlerfrei kompilieren, stürzt jedoch schon vor dem Aufruf von Application->Initialize ab. Hat jemand eine Idee?

    Dank im voraus.

    Rob'



  • Hallo

    das läßt sich wohl kaum ohne Codeausschnitte, insbesondere aus den Startbereichen, sagen.

    bis bald
    akari



  • #include <vcl.h>
    #pragma hdrstop
    
    #include "Main.h"
    #include <sqlite3.h>
    #include <stdio.h>
    
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
      : TForm(Owner)
    {
      sqlite3 *db;
      int rc;
    
      rc = sqlite3_open("robby", &db);
      if( rc ){
        sprintf(msg, "Can't open database: %s\n", sqlite3_errmsg(db));
        ShowMessage(msg);
        sqlite3_close(db);
        return;
      }
    
      sqlite3_close(db);
    }
    

    Der Fehler tritt auch auf, wenn nur die Zeile mit "sqlite3_open" drin ist.

    Rob'



  • Hallo

    ich kenn mich mit der SQLite-Library nicht aus, aber das

    sqlite3 *db;
    rc = sqlite3_open("robby", &db);
    

    ist schon mal verdächtig. Du must sicher für db erstmal eine gültige Instanz mit new erstellen.

    bis bald
    akari



  • Details kenne ich natürlich auch nicht, aber ich vermute die Funktion allokiert Speicher für eine Struktur, deren Zeiger dann in db gespeichert wird. Beim Schließen der Datenbank wird die Struktur dann wieder freigegeben. Ich denke nicht, daß dort der Fehler liegt: Der Code stammt aus einem Beispiel von der SQLite-Website. Außerdem komme ich noch nicht einmal soweit, da das Programm schon vorher abstürzt.

    Rob'



  • Hallo

    Wo genau (Debugger!) stürzt das Programm mit welcher Meldung denn ab?
    Ansonsten schau noch mal auf der von dir angegeben Seite um, ob du alle Initialisierungen für die Library durchgeführt hast.

    bis bald
    akari



  • Wie schon ganz am Anfang gesagt, noch bevor Application->Initialize aufgerufen wird, öffnet sich das CPU-Fenster mit einer Zugriffsverletzung. Ich komme also gar nicht zm Debuggen.

    Im Beispiel wird nichts initialisiert.

    Rob'



  • Versuch mal dein Datenbankfile in robby**.db** umzubennen.
    und dann:

    rc = sqlite3_open("robby.db", &db);
    

    Der Rest scheint in Ordnung zu sein.

    Natürlich muss die Lib oder die Dll eingebunden sein um mit SQLite arbeiten zu können.



  • Danke Euch beiden für eure Hilfe.

    Ursache war, daß daß die DLL nicht gefunden wurde (war nicht im Projektverzeichnis). Und da gibt's bei mir keine Fehlermeldung wie z.B. "Eine zum Ausführen notwendige Bibliotheksdatei wurde nicht gefunden ..." oder so ähnlich, sondern die Anwendung stürzt sofort ab. Jetzt funktioniert's, und auch der Datenbankname ohne Dateierweiterung wird akzeptiert.

    Rob'


Log in to reply