Probleme bei Online MySQL Datenbank in Verbindung mit DOS-Programm



  • Hallo,

    ich habe für das Studium ein Adressbuch programmiert. Bei diesem nutze ich als Datenbank MySQL. Diese ist auf einem Server. Nun habe ich das Problem, dass bei manchen Abfragen irgendwie die Verbindung nicht mehr da ist oder irgendwie so was. Die Abfrage ist korrekt, aber es entsteht bspw. kein neuer Eintrag.

    Die Verbindung zur MySQL DB baue ich wie folgt auf:

    void connect(){
    	mysql=mysql_init(mysql);
    	if(mysql == NULL){
    		print_error("mysql_init() failed (probably out of memory)", true);
    	}
    	if(mysql_real_connect(mysql, "Adresse", "User", "Password", NULL, 0, NULL, 0)==NULL){
    		mysql_close(mysql);
    		print_error("mysql_real_connect() failed", true);
    	}
    	mysql_select_db(mysql,"Datenbank");
    }
    

    Abfragen tätige ich bisher so:

    /*m_query (string) in temp(const char*) konvertieren*/
    	const char* temp;
    	temp = m_query.c_str();	
    
    	/*INSERT-Befehl an die Datenbank senden*/
    	mysql_query(mysql,temp);
    

    Das Problem ist halt wie schon erwähnt, dass nicht alle Anfragen auch wirklich die Datenbank erreichen.

    Meine erste Idee ist nun, eine Anfrage so oft auszuführen, bis sie die Datenbank wirklich erreicht hat. Gibt mysql_query() vielleicht irgendeinen Wert zurück, den ich dazu verwenden kann?

    Hat jemand vielleicht Erfahrung mit dem Thema und ist einen anderen Weg gegangen?



  • Ich hab so meine Zweifel, dass dir das wiederholte senden eines SQLs hier helfen wird. Sind es denn vielleicht spezielle SQLs die nicht funktionieren. Du könntest ja mal einen hier posten.

    Normalerweise hängt sowas an
    - nicht vorhandener Verbindung zur DB (sollte ja aber nicht sein, wenn einige SQLs funktionieren)
    - Fehler im SQL selbst.
    - fehlende Zugriffsrechte zur Ausführung des SQLs.

    Prüf doch mal, ob du diese 3 Punkte definitiv ausschließen kannst.



  • lomtas schrieb:

    Hallo,

    ich habe für das Studium ein Adressbuch programmiert. Bei diesem nutze ich als Datenbank MySQL. Diese ist auf einem Server. Nun habe ich das Problem, dass bei manchen Abfragen irgendwie die Verbindung nicht mehr da ist oder irgendwie so was. Die Abfrage ist korrekt, aber es entsteht bspw. kein neuer Eintrag.

    Die Verbindung zur MySQL DB baue ich wie folgt auf:

    void connect(){
    	mysql=mysql_init(mysql);
    	if(mysql == NULL){
    		print_error("mysql_init() failed (probably out of memory)", true);
    	}
    	if(mysql_real_connect(mysql, "Adresse", "User", "Password", NULL, 0, NULL, 0)==NULL){
    		mysql_close(mysql);
    		print_error("mysql_real_connect() failed", true);
    	}
    	mysql_select_db(mysql,"Datenbank");
    }
    

    Abfragen tätige ich bisher so:

    /*m_query (string) in temp(const char*) konvertieren*/
    	const char* temp;
    	temp = m_query.c_str();	
    	
    	/*INSERT-Befehl an die Datenbank senden*/
    	mysql_query(mysql,temp);
    

    Das Problem ist halt wie schon erwähnt, dass nicht alle Anfragen auch wirklich die Datenbank erreichen.

    Meine erste Idee ist nun, eine Anfrage so oft auszuführen, bis sie die Datenbank wirklich erreicht hat. Gibt mysql_query() vielleicht irgendeinen Wert zurück, den ich dazu verwenden kann?

    Hat jemand vielleicht Erfahrung mit dem Thema und ist einen anderen Weg gegangen?

    int mysql_query(MYSQL *my, const char *anfrage)
    0 = Erfolg
    CR__COMMANDS_OUT_OF_SYNC Befehle wurden nicht in der korrekten Reihenfolge ausgeführt
    CR_SERVER_GONE_ERROR Der MySQL--Server ist weg
    CR_SERVER_LOST Die Verbindung ging während der Abfrage verloren
    CR_UNKOWN_ERROR Ein unbekannter Fehler trat auf

    Kann es sein, dass deine Anfrage Binärdaten enthält?
    Dann int mysql_real_query(MYSQL *my, const char *anfrage, int laenge)
    benutzen. int laenge ist die Länge der Anfrage.

    int mysql_select_db(MYSQL *my, const char *db)
    frag doch mal den Rückgabewert ab.

    Meist schlägt die Abfrage fehl, wenn man kein Zugriffsrecht auf die Datenbank hat.

    Rückgabewerte:
    0 = Erfolg
    CR__COMMANDS_OUT_OF_SYNC Befehle wurden nicht in der korrekten Reihenfolge ausgeführt
    CR_SERVER_GONE_ERROR Der MySQL--Server ist weg
    CR_SERVER_LOST Die Verbindung ging während der Abfrage verloren
    CR_UNKOWN_ERROR Ein unbekannter Fehler trat auf

    Du kannst aber auch die Datenbank direkt bei mysql_real_connect() angeben. Ist der vierte Parameter.

    Thomas



  • mortino schrieb:

    Normalerweise hängt sowas an
    - nicht vorhandener Verbindung zur DB (sollte ja aber nicht sein, wenn einige SQLs funktionieren)
    - Fehler im SQL selbst.
    - fehlende Zugriffsrechte zur Ausführung des SQLs.

    Prüf doch mal, ob du diese 3 Punkte definitiv ausschließen kannst.

    Ich kann alle drei Punkte definitiv ausschließen. Die SQL Abfragen lassen sich mit anderen Tools wie z.B. PHPMyAdmin ausführen. Eine Beobachtung: Sobald ein "-" in der abfrage vorkommt gehts nicht mehr über das Programm. Beispiel:

    INSERT INTO person(name) VALUES('-')
    

Anmelden zum Antworten