LIBMYSQL.dll Probleme



  • Hi Leute,

    ich habe ein Problem mit meinem Datenbank Programm in Visual C++.
    Das Programm tut soweit das ich die SQL Befehle INSERT INTO , ALTER , DROP , CREATE usw benutzen kann. aber wenn ich nun mir die Daten mittel Select * from ... ausgeben will öffnet VC++ 6.0 wohl das Konsolen Fenster stürzt dann aber ab und öffnet dann den Debugger, achja ich benutze Windows XP. Der Debugger sagt dann :"

    Unbehandelte Ausnahme in c1.exe (LIBMYSQL.dll):0xC0000005: Access Violatuin."

    Könnt ihr mir da weiter helfen?
    Ich sage mal im vor raus Danke.
    hier der Code :

    #include <stdio.h>
    #if defined __WIN32__ || _MSC_VER
        #include <windows.h>
    #endif
    #include "C:\Programme\MySQL\include/mysql.h"
    #include <time.h> 
    #include <stdio.h> 
    #include <windows.h> 
    #include <iostream.h>
    
    void main ()  { 
    
        MYSQL_RES *mTabelle; 
        MYSQL_ROW row; 
    	MYSQL_RES  *mysql_res;
    
        MYSQL *mConnection, mDB; 
        int mError,i; 
        mysql_init(&mDB); 
    
    mConnection = mysql_real_connect(&mDB,"localhost","root","****,"test",0,0,0); 
     if (mConnection == NULL)  { 
       printf("Es konnte keine Verbindung zur Datenbank hergestellt werden: %s\n",mysql_error(&mDB));     
        } 
    
    else { 
     printf("Es wurde erfolgreich eine Verbindung hergestellt!\n\n");
    
     int results = mysql_query(&mDB,"SELECT * FROM spammail ");
       while ((row = mysql_fetch_row (mysql_res)) != NULL) {
               cout <<row[0];
       }
    	}
        mysql_close(mConnection); 
        	}
    


  • Eine Exception in der LIBMYSQL.DLL deutet darauf hin, das deine Query falsch ist.

    evtl. mag er nicht, das du deine Query nicht mit nem Semikolon beendest. Oder du hast dich in irgend einer weise mit der Schreibweise bei 'spammail' vertippt...
    Zur Not einfach mal die Query 1 zu 1 in die Datenbank-Console kopieren. da wird dann auf deinen Fehler näher eingegangen.



  • int results = mysql_query(&mDB," SELECT * FROM 'spammail'; ");

    habe es 1:1 kopiert ... und er macht immer noch den Fehler .
    Wenn ich nen SQL Tag falsch eingebe z.B bei insert into oder Drop, dann meckert er nicht rum sondern schreibt nur, Verbindung hergestellt und das wars.



  • Kann ja nicht funktionieren, schau mal, was in
    deinem "*mysql_res" drinnen steht 🙂
    (wird nirgends initialisiert)

    versuchs mal so:

    // Anfrage senden
    int errorNumber = mysql_query(dbHandle, QueryStr);
    
    	if (errorNumber != 0)
    	{/* hier evtl. Fehlerbehandlung */}
    
    // Handle auf's Ergebnis
    MYSQL_RES * result = mysql_store_result(dbHandle);
    //MYSQL_RES * result = mysql_use_result(dbHandle);
    
    	if (errorNumber != 0)
    	{/* hier evtl. Fehlerbehandlung */}
    
    // Anzahl der Spalten im Ergebnis
    int numCols = mysql_num_fields(result); 
    
    	while (MYSQL_ROW row = mysql_fetch_row(result))
    	{
    	// Anzahl der Datenlängen
    	unsigned long * lengths = mysql_fetch_lengths(this->_result);
    
    		for (int c = 0; c < numCols; c++)
    		{
    		// Anzahl der gültigen Bytes im Ergebnis
    		unsigned long dataLength = lengths[i];
    
    		// Zeiger auf den aktuellen Zelleninhalt
    		char * data = row[i];
    
    		// oder einfacher: (wenn man vorraussetzt, dass die Abfrageergebnisse NULL-Terminiert sind)
    		cout<<row[i]<<endl;
    		}
    	}
    


  • Oh, stimmt... da hatte ich auch Tomaten auf den Augen 😉

    Eine Anmerkung noch:

    mysql_query() cannot be used for queries that contain binary data; you should use mysql_real_query() instead. (Binary data may contain the '\0' character, which mysql_query() interprets as the end of the query string.

    Und noch ein Problem das in der while-schleife auftauchen kann, sollte ein Empty-Set zurückgegeben werde:

    MYSQL_ROW row;
    while (result!=NULL && (row = mysql_fetch_row(result))!=NULL)
    {
    //...
    }
    

    sonst gibts wieder ne Exception in der mysq_fetch_result, sollte das Result empty sein...

    Was macht eigendlich die Fehlerbehandlung nach dem store_result? Der Fehlercode wurde doch gar nicht neu gesetzt?!?!

    mfg



  • -=]xXx[=- schrieb:

    Was macht eigendlich die Fehlerbehandlung nach dem store_result? Der Fehlercode wurde doch gar nicht neu gesetzt?!?!

    hm, hab ich jetzt auch übersehen.
    Den muss man natürlich vorher noch mit

    mysql_errno(dbHandle)
    

    auslesen

    najo, und ein

    mysql_free_result(result);
    

    wäre zum Schluss auch noch ganz hübsch...



  • #include <stdio.h> 
    #if defined __WIN32__ || _MSC_VER
        #include <windows.h>
    #endif
    #include "C:\Programme\MySQL\include/mysql.h"
    #include <time.h> 
    #include <stdio.h> 
    #include <windows.h> 
    #include <iostream.h> 
    
    int main ()  { 
    
        MYSQL_ROW row; 
        MYSQL *mConnection, mDB;
        mysql_init(&mDB); 
    	int i=0;
        mConnection = mysql_real_connect(&mDB,"localhost","root","xxxx","test",0,0,0); 
    
        if (mConnection == NULL)  { 
            printf("Es konnte keine Verbindung zur Datenbank hergestellt werden: %s",mysql_error(&mDB)); 
            return 1; 
        } else { 
     printf("Es wurde erfolgreich eine Verbindung hergestellt!"); 
    
     int errorNumber = mysql_query(&mDB, "SELECT * FROM `test2`; "); 
    
        if (errorNumber != 0) 
    		{
    
    		} 
    
    	MYSQL_RES * result = mysql_store_result(&mDB);
    
        if (errorNumber != 0) 
    		{
    
    		} 
    
        while (result!=NULL && (row = mysql_fetch_row(result))!=NULL) 
    		{ 
    			cout<<row[i]<<endl; 
    		} 
    
        } 
    
        mysql_close(mConnection); 
        return 0; 
    }
    

    wollte nur mal DANKE sagen es fuunktioniert, habe erstmal alles das raus genommen was ich erstmal nicht brauche. 🙄

    Naja habe vorher nur mit php gearbeitet, da ist es mit C++ schon viel schwieriger aber ich sag nochmal DANKE 😃 😃 ^^



  • achja eine frage noch, wie kann ich die lib datei dauerhaft in das Projekt als Linker einbinden ?



  • 2fast4you schrieb:

    achja eine frage noch, wie kann ich die lib datei dauerhaft in das Projekt als Linker einbinden ?

    Man kann zwar aus der dll eine Importlib generieren,
    ob man da aber dann auch was komplett statisches draus machen kann...

    Hab mir da noch nie Gedanken drüber gemacht.
    (schaut ja gleich nach viel mehr her, wenn neben der reinen exe-Datei auch noch
    eine schöne dll mit im Verzeichnis liegt 🙂

    Was ist eigentlich mit den ganzen libs, die im selben Verzeichnis wie die
    libmysql.dll liegen?



  • wie ?



  • http://dev.mysql.com/doc/refman/4.0/de/windows-client-compiling.html:

    "Sie können Ihren Code entweder mit der dynamischen libmysql.lib-Bibliothek linken, die nur ein Wrapper zum Laden der libmysql.dll bei Bedarf ist, oder mit der statischen mysqlclient.lib-Bibliothek."


Anmelden zum Antworten