MySQL Connector



  • Hallo
    Ich versuche seit längerem, mit Borland C++ Builder 5.0 eine MySQL Datenbank anzusprechen.
    Anfangs habe ich es mit XAMPP versucht, allerdings habe ich fast keine Infos gefunden über XAMPP mit C++.
    Nun versuche ich es mit MySQL Server von Oracle (oder Sun) und MySQL++.
    Am Ende habe ich immer die selben Probleme: Egal welchen Konektor dass ich verwende, der Builder meldet immer Fehler beim einbinden der Headerfiles, oder in den Headerfiles selbst.
    Mit MySQL++ werden ja fertige Beispiele mitgeliefert. Doch der Compiler meldet einen Fehler beim einbinden einer Header Datei aus einer anderen Header Datei heraus.
    Die Datenstruktur ist ja vorhanden. So wie ich das gesehen habe ist das ganze mit Visual C++ gemacht. Könnte es sein, das Borland Header anders sind als Visual C++ Headers?
    Weiter hatte ich zum Teil auch Fehler im Code der Headers, das sollte nicht sein bei fertigen Beispielprojekten, oder?

    In der MySQL Server Doku steht zudem folgendes geschrieben:

    24.5.1. Borland C++
    Sie können die MySQL Windows-Quelldatei mit Borland C++ 5.02 kompilieren. (Zur Windows-Quelldatei gehören nur Projekte
    für Microsoft VC++; Projektdateien für Borland C++ müssen Sie sich selbst beschaffen.)
    Ein bekanntes Problem mit Borland C++ ist, dass er eine andere Strukturanordnung als VC++ verwendet. Daher bekommen Sie
    Probleme, wenn Sie versuchen, mit Borland C++ die standardmäßigen libmysql.dll-Bibliotheken zu benutzen (die mit VC++
    kompiliert wurden). Um dies zu vermeiden, rufen Sie mysql_init() nur mit NULL als Argument auf und verwenden keine vorab
    zugewiesene MYSQL-Struktur.

    Bringt man solches überhaupt Fehlerfrei mit Borland zum laufen?
    Besten Dank für euren Rat!



  • Du könntest alternativ mit DBExpress arbeiten, damit du die Datenbanksteuerelemente direkt ansprechen kannst. Ich habe das aber selber mit mysql nie ausprobiert:
    http://forums.mysql.com/read.php?49,81834,81834



  • DBExpress gab es im Borland C++ Builder 5.0 noch nicht.

    Würde da eher ZEOSLib http://zeos.firmos.at/portal.php verwenden.



  • Besten Dank für eure Empfehlungen... Ich werde das sicher noch Prüfen, und mal schauen, ob ich das zu laufen kriege. Ich bin im Momment noch am Experimentieren mit MySQL++. Hier bin ich einen kleinen Schritt weiter gekommen. Folgender Fehler ist jedoch im Momment aufgetreten: beim Einbinden von stdint.h meldet der Compiler bei:

    typedef long long  int64_t;
    

    oder

    typedef unsigned long long   uint64_t;
    

    E2176 Too many types in declaration

    Vermutlich liegts am long long. Ist bereits in einer anderen Header-Datei aufgetreten. Dort stand im Kommentar geschrieben, dass, falls der Compiler Fehler meldet, die Stelle mit

    #define MYSQLPP_NO_LONG_LONGS
    

    ausgeklammert werden kann.

    Nun das Header-File stdint.h dient aber gemäss Wikipedia genau für solche langen Variablen. Funktioniert das ganze noch, wenn ich auch diese Teile ausklammere?
    Hat jemamd Erfahrung mit MySQL++?



  • Warum nicht direkt bei http://www.mysql.com/downloads/connector/cpp/ entsprechende Source laden und verwenden? Ich habe es zwar bisher nur mit VC++6 verwendet, aber das klappte supi.



  • Das habe ich eigentlich bereits versucht, und bin mangels Fachkenntniss daran gescheitert. Auch dort hatte ich Fehler beim Einbinden der Header und in den Header selber, könnte allerdings auch an mir gelegen sein. Versuche ich in diesem Falle nochmal. Habe ich das richtig verstanden, dass, damit der C++ Connector funktioniert, zuerst der C Connector installiert werden muss?
    Sieht auch beim Installieren so aus: Installiere ich den C++ Connector mit der Option "Benutzerdefiniert" und wähle "Debug Informations" ab, beträgt die Grösse 0KB.



  • So, wieder etwas herausgefunden: offenbar giebt es im Borland den Typ long long als __int64. Habe nun an diversen Orten im Header folgendes eingesetzt:

    #if !defined(BorlandCplusplus)
    typedef long long  int_fast64_t;
    typedef unsigned long long   uint_fast64_t;
    #else
    typedef __int64 int_fast64_t;
    typedef unsigned __int64 uint_fast64_t;
    #endif
    

    Ich hoffe, ich bin damit auf dem richtigen Weg. Habe aber noch einiges zu ersetzen in den Headers...



  • Doch noch nicht alles in Ordnung:
    beim Versuch die MYSQL++ Headers zu modifizieren bin ich zwar weit gekommen, jedoch nicht ganz bis ans Ende. Am schluss hatte ich doch noch andere Fehler als nur den longlong.
    Nun bin ich wider zum MYSQL C Connector zurückgekehrt. Zuvor habe ich noch die Installation der Datenbank überprüft. Ich konnte mit den Konsolenprogrammen auf die Datenbank connecten und Daten auslesen.
    Nur hätte ich dies nun auch gerne noch vom Builder aus getan.
    Da ich mit C++ letztes mal an folgender Stelle gescheitert wahr (Compiler brachte Fehler wegen ungültiger Stelle von extern "C"):

    #ifdef __cplusplus
    extern "C" {
    #endif
    

    versuchte ich es dieses Mal mit einem reinen C File.
    Allerdings mit mässigem Erfolg:

    Wider meldet der Compiler einen Fehler:

    typedef struct st_net {
    #if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY)
      Vio *vio;
      unsigned char *buff,*buff_end,*write_pos,*read_pos;
      my_socket fd;					/* For Perl DBI/dbd */
      /*
        The following variable is set if we are doing several queries in one
        command ( as in LOAD TABLE ... FROM MASTER ),
        and do not want to confuse the client with OK at the wrong time
      */
    

    bei my_socket fd; bringt der Compiler den Error 2139:Declaration missing;
    das betroffene Lib-File heisst mysql_com.h

    Sieht hier jemand eine Lösung? 😕


Anmelden zum Antworten