Datenbank zugriff



  • Ich benötige dennoch Eure hilfe.

    Habe mir jetzt sämliche Threads durchgelesen hier im Forum. Die Suche stottert nämlichb nur bei mir wenn ich ein Suchwert angebe.

    Dennoch bleibt mir jetzt etwas unklar. Ich habe mir die Header Files von www.mysql.com und includiert. Jedoch bekomme ich beim Compilieren immer einen Fehler und er öffnet mir die mysql_com.h Datei.

    Ich habe die libmysql.lib ins Verzeichnis zu den anderen Libaries von Borland kopiert und die libmysql.dll ins Windows\System32 Verzeichnis zu den anderen DLLs geworfen.

    Was fehlt mir denn jetzt noch? Oder funktioniert das nur mit Visual C++?! Das wäre dann nämlich sehr schade.



  • Meine Kristallkugel ist immernoch kaputt: wie lautet die Fehlermeldung?

    Ansonsten: welche BCB-Version benutzt du? Bei Professional und Enterprise gibt es Datenbankkomponenten die die Arbeit stark erleichtern, ausserdem exisiteren vergleichbare Komponenten von anderen Herstellern, z.T. auch als Freeware.

    Aber das hast du ja bestimmt den vorhandenen Beiträgen entnehmen können.



  • Hallo, nein habe ich nicht entnommen, aber vermutet. Dazu stand nämlich nicht alt zu viel.

    Also ich benutze die BCB 6.0 Professional. Zur Enterprise hat das Taschengeld nicht gereicht. Daher muß ich mir das auch so bauen.

    Die Fehlermeldungen lauten.

    [C++ Fehler] mysql_com.h(116): E2303 Typname erwartet
    [C++ Fehler] mysql_com.h(116): E2139 In Deklaration fehlt ;
    [C++ Fehler] mysql_com.h(180): E2147 Parameterdeklaration darf nicht mit 'SOCKET' beginnen

    Auszug aus mysql_com.h von Zeile 107 bis 124:

    struct st_vio;                  /* Only C */
    typedef struct st_vio Vio;
    
    #define MAX_CHAR_WIDTH      255 /* Max length for a CHAR colum */
    #define MAX_BLOB_WIDTH      8192    /* Default width for blob */
    
    typedef struct st_net {
      Vio* vio;
      unsigned char *buff,*buff_end,*write_pos,*read_pos;
      my_socket fd;                 /* For Perl DBI/dbd */  // Dies ist die Zeile 116
      unsigned long max_packet,max_packet_size;
      unsigned int last_errno,pkt_nr,compress_pkt_nr;
      unsigned int write_timeout, read_timeout, retry_count;
      int fcntl;
      char last_error[MYSQL_ERRMSG_SIZE];
      unsigned char error;
      my_bool return_errno,compress;
    

    Auszug aus mysql_com.h von Zeile 178 bis 188:

    /* The following function is not meant for normal usage */
    struct sockaddr;
    int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, // Dies ist die Zeile 180
               unsigned int timeout);
    
    struct rand_struct {
      unsigned long seed1,seed2,max_value;
      double max_value_dbl;
    };
    

    Ich habe jetzt ne Zeitlang nur PHP gemacht und dies macht sich jetzt auch sehr stark bemerkbar. Dennoch versuche ich mit diesem Problem fertig zu werden. Doch dazu benötige auch Eure Hilfe.

    [ Dieser Beitrag wurde am 17.04.2003 um 23:27 Uhr von Heinzelmännchen editiert. ]



  • Ich habe die Zeile 116 einfach auskommentiert (siehe Kommentar dieser Zeile), und damit hat es funktioniert. Der Fehler in Zeile 180 ist dann vielleicht ein Folgefehler. Versuch's doch mal!

    Rob'



  • Hi zusammen,

    ich habe diese Sachen mal auskommentiert und tatsächlich compiliert er. Jedoch tritt dann Linker Fehler auf.

    [Linker Fehler] Unresolved external 'mysql_init' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    [Linker Fehler] Unresolved external 'mysql_real_connect' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ
    [Linker Fehler] Unresolved external 'mysql_close' referenced from C:\PROGRAMME\BORLAND\CBUILDER6\PROJECTS\UNIT1.OBJ

    Ich kenne mich in C++ noch nicht so gut aus. Doch die *.OBJ, stellt doch die Objekte bereit wenn mich nicht alles täuscht. Doch das hat überhaupt nix mit mysql zutun, oder? 😕

    Ich habe noch nix im Form drin. Habe jediglich oben im Unit.cpp "#include <mysql.h>" hinzugefügt und in FormCreate() folgendes geschrieben.

    void __fastcall TForm1::FormCreate(TObject *Sender)
    {
      MYSQL *     mySQL;
      mySQL = mysql_init(0);
      mySQL = mysql_real_connect(mySQL,
            "localhost",
            "heinzelmaennchen",
            "testman",
            "test_heinzelmaennchen",
            0,
            0,
            0);
      if (mySQL == 0) {
        ShowMessage("Verbindung zur Datenbank konnte nicht hergestellt werden");
        return;
      }
      mysql_close(mySQL);
    }
    

    Wußte gar nicht wie schwer es ist eine Verbindung zu einer mySQL Datenbak hinzubekommen ist. 🙄
    Bei PHP geht das spielend. 🕶

    Ich hoffe mir kann einer ein Stück weiter helfen.



  • Hast du die mysql.lib (oder wie immer die heisst) zu deinem Projekt hinzugefügt?

    Und wenn du dich nicht auf die API versteifen würdest sondern die Datenbankkomponenten benutzen würdest, die es auch in der Professional Version gibt, dann würdest du feststellen, wieviel einfacher als in PHP das Ganze funktioniert. 😉



  • Hi,

    wenn ich die libmysql.lib dem Projekt hinzufüge, dann bekomme ich diesen Linker Fehler.

    [Linker Fehler] 'C:\PROGRAMME\BORLAND\CBUILDER6\LIB\LIBMYSQL.LIB' contains invalid OMF record, type 0x21 (possibly COFF)

    Ich möchte die API Funktion nutzen, da ich bei der anderen ja noch eine zusätzliche Komponente installieren muß, oder?



  • Siehe COFF2OMF in der Hilfe oder besorg dir gleich eine Borland-kompatible Lib.

    Und laut Borlands Feature Matrix gibt es die dbExpress-Komponenten für den direkten Zugriff auf MySQL auch in der Professional Version.



  • jo, geht auch, ab version 4 glaubich sind die in Professional... und vorher waren die bei Standard dabei 😃 .
    Beim ansprechen von mysql dbs hatte ich allerdings immer seltsame Exceptions bei denen hier im Forum auch keiner Rat wusste(Thread solltest du eigentlich gefunden haben) und bin da überhaupt nicht mit klar gekommen aber das wird in der Enterprise nicht besser sein.

    ich würd mir mal die hier anschauen: http://www.microolap.com/products/dac/mysqldac.htm

    Damit arbeite ich jetzt und bin da wirklich zufrieden mit. Die funzen genau wie die "echten" db kompos mit dem Unterschied das sie funktionieren 😃 .



  • Original erstellt von dreaddy:
    ab version 4 glaubich sind die in Professional

    Die dbExpress-Komponenten und -Treiber gibt's erst seit dem BCB6.


Anmelden zum Antworten