MySQL Einbindung in C/C++



  • erster ansatz
    http://www.pronix.de/pronix-636.html
    und natürlich mysql selber



  • recht herzlichen dank!
    das werde ich mir gleich mal zu Gemüte führen 😉



  • Hab ein Problem ...
    und zwar hab sagt mir der linker dass er die mysql.obj nich öffnen kann!

    Linker-Vorgang läuft...
    LINK : fatal error LNK1104: Datei "C:\Programme\MySQL\MySQL.obj" kann nicht geoeffnet werden
    Fehler beim Ausführen von link.exe.
    

    Die C:\Programme\MySQL\MySQL.obj gibts net!
    Ich weis nicht wo der den pfad her hat!!
    Und eine mysql.obj gibts auf meimem rechner nicht 😞
    Ich habe z.b. die libmysql.lib (beim linker) so eingebunden: C:\Programme\MySQL\MySQL Server 5.0\lib\opt\libmysql.lib

    und dei mysql header datei so eingebunden:
    #include "C:\Programme\MySQL\MySQL Server 5.0\include\mysql.h"

    UNd hier mein Code:

    /* mysql1.c */
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <windows.h>
    
    #include "C:\Programme\MySQL\MySQL Server 5.0\include\mysql.h"
    
    int main (int argc, char **argv) {
       MYSQL  *my;
       /* Handle initialisieren */
       my = mysql_init(NULL);
       if(my == NULL) {
          fprintf(stderr, " Initialisierung fehlgeschlagen\n");
          return EXIT_SUCCESS;
       }
       /* Mit dem Server verbinden */
       if( mysql_real_connect (
            my,   /* Zeiger auf MYSQL-Handler*/
            NULL, /* Host-Name*/
            NULL, /* User-Name*/
            NULL, /* Passwort für user_name */
            NULL,  /* Name der Datenbank*/
            0,     /* Port (default=0) */
            NULL,  /* Socket (default=NULL)*/
            0      /* keine Flags */  )  == NULL) {
          fprintf (stderr, "Fehler mysql_real_connect():"
            "%u (%s)\n",mysql_errno (my), mysql_error (my));
       }
       else
          printf("Erfolgreich mit dem MySQL-Server verbunden\n");
    
       /* Hier befindet sich der Code für die Arbeit mit MySQL */
    
       /* Verbindung trennen */
       mysql_close (my);
       return EXIT_SUCCESS;
    }
    

    (quasi nur kopiert aber ich wollte erstmal checken obs geht^^)

    nun gut aber was mache ich falsch ...

    helf mir mal bitte weiter! 😉



  • die library linkt man anders, je nach compiler.

    du mit wahrscheinlich ?? visual studio.. unter einstellungen und dann linker und dann dazu schreiben. (und dafür sorgen, dass sie in einem auffindbaren ordner liegt 🙂 )

    so long



  • ja ich benutze visual c++

    ja das habe ich gemacht sonst wären noch 100 mehr fehler gekommen 😉

    Projekt -> einstellungen -> linker - da hab ich die lib verlinkt!

    aber es kommt trz die meldung dass er die MySQL.obj nicht findet!



  • Ich habe ez alles nochmal gemacht ez bekomm ich andere Fehler 😞

    hab mysql in ein tolleres verzeichniss installiert C:\mysql
    dann hab ich ein neues projekt aufgemacht habe im Projekt - einstellungen - linker die libmysql.lib hinzugefügt

    hier nochmal der code:

    /* mysql1.c */
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <windows.h>
    
    #include "C:\MySQL\include\mysql.h"
    
    int main (int argc, char **argv) {
       MYSQL  *my;
       /* Handle initialisieren */
       my = mysql_init(NULL);
       if(my == NULL) {
          fprintf(stderr, " Initialisierung fehlgeschlagen\n");
          return EXIT_SUCCESS;
       }
       /* Mit dem Server verbinden */
       if( mysql_real_connect (
            my,   /* Zeiger auf MYSQL-Handler*/
            NULL, /* Host-Name*/
            NULL, /* User-Name*/
            NULL, /* Passwort für user_name */
            NULL,  /* Name der Datenbank*/
            0,     /* Port (default=0) */
            NULL,  /* Socket (default=NULL)*/
            0      /* keine Flags */  )  == NULL) {
          fprintf (stderr, "Fehler mysql_real_connect():"
            "%u (%s)\n",mysql_errno (my), mysql_error (my));
       }
       else
          printf("Erfolgreich mit dem MySQL-Server verbunden\n");
    
       /* Hier befindet sich der Code für die Arbeit mit MySQL */
    
       /* Verbindung trennen */
       mysql_close (my);
       return EXIT_SUCCESS;
    }
    

    ez kommt

    Linker-Vorgang läuft...
    LIBCD.lib(wincrt0.obj) : error LNK2001: Nichtaufgeloestes externes Symbol _WinMain@16
    Debug/sql.exe : fatal error LNK1120: 1 unaufgeloeste externe Verweise
    Fehler beim Ausführen von link.exe.
    


  • mach eine konsolenanwendung!!



  • okay guter tipp 😉

    nun mit der Konsolen anwendung bringt der Linker keinen Fehler ABER
    wenn ich das "programm" ausführe kommt eine fehlermeldung und zwar : "Anwedung konnte nich gestartet werden ... Libmysql.dll nicht gefunden"

    so wo sage ich ihm, wo die libmysql.dll ist ... und noch ne frage : wenn ich ez ein programm so schreibe brauch ich dann wenn ichs auf nem anderen rechner ausführe auch die mysql dateien? (die db liegt natürlich im internet!)



  • okay has rausgefunden die dll muss im system 32 liegen!

    aber ich muss dann auf allen rechnern auf denen ich das programm benutze die dll im system 32 haben .... brauche ich die anderen dateien auch auf anderen rechnern? oder nur die dll?



  • man kann die mysql-lib auch statisch linken. dann brauchste keine dll.



  • okay super! 😉
    nur wie geht das? (bin doch ein anfänger 😉 )



  • und noch was 😉 ich glaube ich geh euch langsam auf die nerven^^

    so nun versuche ich was in eine Tabelle zu schreiben (insert)

    ich bekomme die Fehlermeldung Mysql server has gone away ...
    hab auf mysql.com geschaut aber da steteht nur dass das kommt wenn keine verbindung da ist oder die verbindung geschlossen wurde ... was ich aber nicht gemacht habe!!

    was mache ich falsch?

    #include <stdio.h> 
    #include <stdlib.h> 
    
    #include <windows.h>
    
    #include "C:\MySQL\include\mysql.h" 
    
    MYSQL  *my;
    void check_error(void)  {
       if (mysql_errno(my) != 0) {
          fprintf(stderr, "Fehler: %s\n", mysql_error(my));
          exit(EXIT_FAILURE);
       }
    }
    
    int main () {  
      // Handle
       my = mysql_init(NULL); 
       if(my == NULL) { 
          fprintf(stderr, " Initialisierung fehlgeschlagen\n"); 
          return EXIT_SUCCESS; 
       } 
       // verbindung mit server 
       if( mysql_real_connect(my, "localhost", "root", "root", NULL, 0, NULL, 0))  
       { 
          printf("Fehler"); 
       } else {
          printf("Erfolgreich mit dem MySQL-Server verbunden\n"); 
       }
       // mysql code
    
       char *argument;
    	argument = "INSERT INTO `test` `id`='1'";
    	mysql_real_query(my, argument, strlen(argument));
    	check_error();
    
       // verbindung trennen
       mysql_close (my); 
       return EXIT_SUCCESS; 
    }
    

Anmelden zum Antworten