DATETIME von C++ in HeidiSQL DB Funktioniert nicht!



  • Es geht hier nicht um die darunterliegende Datenbank, sondern um die Funktion(en), mit der du aus deinem C-Programm auf diese Datenbank zugreifst.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich weiß nicht genau was du damit meinst, aber ich kann dir sagen, dass ich eine Erweiterung des C++ installiert habe um mit C++ Daten in die Datenbank von HeidiSQL reinshreiben kann. Und die Funktionen die man nutzen kann oder nutzen sollte kenne ich noch nicht da ich mich noch nicht so gut auskenne. So wie es aber eingestellt ist soll es wohl funktionieren.

    MYSQL *conn; /* pointer to connection handler */
        MYSQL_RES *res; /* holds the result set */
        MYSQL_ROW row;
    
        /* initialize connection handler */
        conn = mysql_init (NULL);
    
        /* connect to server */
        mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
        opt_db_name, opt_port_num, opt_socket_name, opt_flags);
        time_t t;
        time(&t);
    
        struct tm *newtime;
        time_t long_time;
    
        time( &long_time ); 
        newtime = localtime( &long_time );
    
        time_t x = time (NULL);
        struct tm * timeinfo = localtime ( &x );
        printf ("%04d-%02d-%02d %02d:%02d:%02d\n",timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec);
    
        char Datum[20];
    
        sprintf(Datum,"%04d-%02d-%02d %02d:%02d:%02d",timeinfo->tm_year+1900, timeinfo->tm_mon+1, timeinfo->tm_mday, newtime->tm_hour, newtime->tm_min, newtime->tm_sec, &Datum); 
    
        (mysql_query(conn, "insert into messung (Zeitstempel, Temperatur) values ('%s' , '%.1f')"),Datum, fMesswert);
          /* show tables in the database (test for errors also) */
    
            fprintf(stderr, "%s \n", mysql_error(conn));
    
        res = mysql_use_result(conn); /* grab the result */
    
        printf("Tables in database\n");
        printf("%s, %.1f\n",Datum, fMesswert);
    

    In die Tabelle von HeidiSQL wird immer nur 0000-00-00 00:00:00 eingetragen.
    Unten in Zeile 40 gibt er mir es richtig aus beim kompilieren, aber nicht in der Tabelle.
    Ist das ein Fehler im Format, da er das Datum nicht richtig einträgt?



  • Hast du denn eine Dokumentation für die Funktionen mysql_init(), mysql_query() etc, die du in diesem Code-Abschnitt verwendet hast? Wenn ja, sollte dort auch drinstehen, wie sie richtig eingesetzt werden können.
    Im Zweifelsfall hilft es sicher, wenn du erst den kompletten INSERT-String zusammensetzt (inklusive der zu verwendenden Werte), bevor du ihn an mysql_query weitergibst.

    PS: Landet eigentlich der richtige Wert in dem float-Feld?



  • Nein leider habe ich keine Dokumentationen darüber.
    Der Wert im Float Feld wird auch nicht richtig übertragen.

    Wie meinst du denn das mit dem INSERT-String? Ich habe ja schon alles zusammen gefasst mit char?



  • Yves Sebastian schrieb:

    Wie meinst du denn das mit dem INSERT-String? Ich habe ja schon alles zusammen gefasst mit char?

    Die Anweisung, die du an die Datenbank schickst.
    Beim Googlen nach "mysql_query" bin ich auf die oben angegebene Funktion gestoßen, die aber nicht ganz zu der Art passt, wie du sie verwendest. Die unterstützt anscheinend keine printf()-Formatierungen zum Zusammenbau der SQL-Anweisungen, also müsstest du die komplette Anweisung vorher zusammenbauen und dort auch die einzufügenden Werte einsetzen.



  • Ich hatte jetzt mal Google gefragt aber auch nicht gefunden wie ich dies in einem String Verfasse und das in die Datenbank bekomme. Ich komme grad nicht weiter und würde gerne nochmal um Hilfe Bitten.

    Schonmal im Vorraus Danke!



  • Du kennst doch schon printf(), das hat auch einen Bruder namens sprintf(). Wobei, wenn du mit C++ arbeitest, würde ich eher mit std::string und std::stringstream arbeiten.



  • Ich hab es auch mit den Strings versucht aber dies funktioniert leider auch nicht. Ich werde mich Morgen nochmal an die Aufgabe setzen und dann löse ich dieses Problem.

    Herzlichen Dank schonmal für deine Hilfe!



  • Ich habe das Problem gelöst.
    Mit einem string zu arbeiten ist richtig:

    MYSQL *conn; /* pointer to connection handler */
        MYSQL_RES *res; /* holds the result set */
        MYSQL_ROW row;
    
        /* initialize connection handler */
        conn = mysql_init (NULL);
    
        /* connect to server */
        mysql_real_connect (conn, opt_host_name, opt_user_name, opt_password,
        opt_db_name, opt_port_num, opt_socket_name, opt_flags);
        time_t t;
        time(&t);
    
        char query[256];
    
        sprintf(query, "insert into messung (Zeitstempel, Temperatur) values (Current_Timestamp, %.1f)",fMesswert);
        mysql_query(conn, query);
    
            fprintf(stderr, "%s \n", mysql_error(conn));
    
        res = mysql_use_result(conn); /* grab the result */
    
        printf("Tables in database\n");
    

    Herzlichen Dank für die Hilfe!!!
    MfG Yves Sebastian


Anmelden zum Antworten