SQlite Datenbank Datum ein und auslesen



  • Hallo,

    ich habe eine SQLite Datenbank die ich mit Borland 6 c++ anspreche.

    Ich habe eine Datenbank lokal erstellt.

    sqlite3 *db;
    int rc;
    rc = sqlite3_open(PathDB.c_str(),&db);
    

    Dann eine Tabelle erstellt

    int rc;
    rc = sqlite3_open(PathDB.c_str(),&db);
    tmp = "CREATE TABLE IF NOT EXISTS T99 ";
    tmp = tmp + "(Bez1 DOUBLE, ";
    tmp = tmp + "Bez2 DATE);";
    

    Dann schreibe ich Daten in die Tabelle

    String tmp1;
    tmp1 = "\"";
    char * buffer;
    int rc;
    char *zErrMsg = 0;
    String query;
    if(rc = sqlite3_open(PathDB.c_str(),&db))
    
    double jetzt = Time();
    jetzt = Now();
    
    query = "insert into T99(Bez1,Bez2)VALUES(";
    query = query  + tmp1 + uniquenr1  + tmp1 ;
    query = query   + "," + tmp1 + jetzt + tmp1 ;
    query = query + ");";
    
    buffer = query.c_str ();
    rc = sqlite3_exec(db, buffer, callback, 0, &zErrMsg);
    

    In der Datenbank sind auch die Richtigen Werte drinnen.

    Datum = 41332,4980045486

    Beim Auslesen der Daten aus der Datenbank
    ist in Bez2 nur der Wert 41332
    also alles nach Komma wird nicht ausgelesen.
    Habe schon mit float TDateTime probiert nichts
    funktioniert.

    String& query = "select Bez1,Bez2 from T99";
    query = query + " order by Bez2 desc";
    txtMeld1->Text = query;
    int zeile = 0;
    int spalte = 0;
    buffer = query.c_str ();
    double Bez1;
    //
    double Bez2;
    //float Bez2;
    TDateTime Bez3;
    int lang;
    double value;
    int Bez4;
    
    sqlite3_stmt *statement;
      if (sqlite3_prepare_v2(db,buffer, -1, &statement, 0)==SQLITE_OK)
     {
        while(sqlite3_step(statement)==SQLITE_ROW)
        {
         //Bez1 = sqlite3_column_int(statement, 0);
         Bez1 = sqlite3_column_double(statement, 0);
         Bez2 = sqlite3_column_double(statement, 1);
    

    Wer kann mir da helfen?

    Vielen Vielen Dank 🙂



  • SQLite hat dafür "REAL"
    aber meiner Erfahrung nach ist das nicht wirklich gut zu handeln
    weil REAL die einzige Ausnahme ist,
    alles andere ist Text..

    Also würde ich im Zweifel vielleicht gleich alles als Text behandeln
    damit kann man sich ne Menge Verrenkungen sparen.



  • So jetzt Tabelle erstellt mit Real

    tmp = "CREATE TABLE IF NOT EXISTS T98 ";
    tmp = tmp + "(Bez1 DOUBLE, ";
    tmp = tmp + "Bez2 REAL);";
    

    mit was auslesen?
    Hatte ja

    Bez2 = sqlite3_column_double(statement, 1);
    

    Diese Möglichkeiten habe ich

    const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
    int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
    int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
    double sqlite3_column_double(sqlite3_stmt*, int iCol);
    int sqlite3_column_int(sqlite3_stmt*, int iCol);
    sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
    const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
    const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
    int sqlite3_column_type(sqlite3_stmt*, int iCol);
    sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);



  • Hat s denn nicht funktioniert ?

    Wenn Nein - Was ist passiert ?


Anmelden zum Antworten