MySQL Ausgabe bleibt leer



  • Hallo,
    ich programmiere gerade einen Hausaufgabenmanager mit MySQL.
    Ich möchte als erstes die Anzahl der Datensätze aus der Tabelle "hausaufgaben" auslesen. Es gibt auch keine Fehlermeldungen, allerdings kommt nach dem String, dass vor der Anzahl kommen soll nichts mehr.
    Wenn ich den String davor weglasse kommt:
    Segmentation fault (core dumped)
    Was habe ich falsch gemacht?

    Hier ist mein Code:

    #include <mysql.h>
    #include <stdio.h>
    
    int main() {
    
    	//Zeiger erstellen
    	MYSQL *connection;
    	MYSQL_RES *result;
    	MYSQL_ROW row;
    
    	//Querystring
    	char query[1000];
    
    	//Anzahl Zeilen
    	int coutRow;
    
    	//Schleifenvariable 
    	int i;
    
    	//Datenbankzugriffsvariablen
    
    	char host[50] = "localhost";
    	char username[50] = "root";
    	char dbname[50] = "manu";
    	char passwort[50] = "conanfriend";
    
    	//MySQL initalisieren
    	connection = mysql_init(NULL);
    
    	//Mysqlconnection herstellen
    	if(mysql_real_connect(connection, host, username, passwort, dbname, 0, NULL, 0) == NULL) {
    
    		fprintf(stderr, "Es konnte keine Verbindung zu Datenbank hergestellt werden!");
    		mysql_close(connection);
    
    	} else {
    
    		//Wenn die Verbindung hergestellt wurde Begrüßung anzeigen
    		printf("Herzlich Willkommen zu Ihrem persönlichen Hausaufgabenmanager! \n");
    
    		//Einträge der Tabelle "hausaufgaben" zählen und ausgeben	
    		sprintf(query, "SELECT * FROM hausaufgaben");
    		if(mysql_query(connection, query) != 0) {
    
    			fprintf(stderr, "Die Anzahl der Datensätze konnte nicht ausgelesen werden!");
    			mysql_close(connection);
    		}
    
    		result = mysql_store_result(connection); 
    
    		row = mysql_num_rows(result);
    
    		printf("Anzahl Hausaufgaben:", row);
    
    		//Ergebnisvariable leeren
    		mysql_free_result(result);
    
    		//Datenbankverbindung schließen
    		mysql_close(connection);
    	}
    	return 0;
    
    }
    

    Ich bin für jede Hilfe dankbar!
    Gruß



  • printf("Anzahl Hausaufgaben:", row);
    

    Was soll denn da auch kommen? Du gibst erstens ja nach dem festen Text nichts mehr aus. Dir fehlt quasi der Platzhalter für deine Variable.

    Und ich kenn jetzt zwar den Rückgabetyp von mysql_num_rows in C nicht, aber ich denke da komtm ein Integer zurück.

    Sollte das der Fall sein, könnte deine Ausgabe so aussehen:

    printf("Anzahl Hausaufgaben: %d", row);
    

    Wobei du den Typ der Variablen row noch in int ändern musst.



  • Ohje, das war ja ein blöder Fehler. 😞
    Jetzt hat es soweit funktioniert, vielen Dank!



  • So, ich wollte jetzt die Funktion zum Editieren schreiben, doch das Programm gibt mir beim kompilieren folgenden Fehler:

    main.c: In Funktion »main«:
    main.c:197: Fehler: expected expression before »}« token
    main.c:219: Fehler: expected expression before »}« token
    main.c:243: Fehler: expected expression before »}« token
    main.c:276:2: warning: no newline at end of file

    Das ist mein Code:
    http://www.nopaste.de/p/a4vxYnay2
    Ich habe gezählt, wenn ich mich nicht verzählt habe sind es ganau 21 { und 21 }, also kann ich mir diese Fehler nicht erklären.

    Was habe ich falsch gemacht?

    Vielen Dank schonmal!
    Gruß

    P.S. Wegen den Zeilen:

    #include <mysql.h>
    #include <stdio.h>
    
    //Mainfunktion
    int main() {
    
            //Zeiger erstellen
            MYSQL *connection;
            MYSQL_RES *result;
            MYSQL_ROW row;
    
            //Querystring
            char query[1000];
    
            //Anzahl Zeilen
            int coutRow;
    
            //Schleifenvariable 
            int i;
    
            //Datenbankzugriffsvariablen
            char host[50] = "localhost";
            char username[50] = "user";
            char dbname[50] = "db";
            char passwort[50] = "passwort";
    
            //Menüvariable
            int menue = -1;
            int edit;
    
            //Hausaufgabenvariablen
            char name[50];
            char fach[20];
            char datum[10];
            int ID;
    
            //Edit
            char newName[50];
            char newFach[20];
            char newDatum[10];
    
            //MySQL initalisieren
            connection = mysql_init(NULL);
    
            //Mysqlconnection herstellen
            if(mysql_real_connect(connection, host, username, passwort, dbname, 0, NULL, 0) == NULL) {
    
                    fprintf(stderr, "Es konnte keine Verbindung zur Datenbank hergestellt werden!");
                    mysql_close(connection);
    
            } else {
    
                    //Wenn die Verbindung hergestellt wurde Begrüßung anzeigen
                    printf("Herzlich Willkommen zu Ihrem persönlichen Hausaufgabenmanager! \n");
    
                    //Einträge der Tabelle "hausaufgaben" zählen und ausgeben        
                    sprintf(query, "SELECT * FROM hausaufgaben");
                    if(mysql_query(connection, query) != 0) {
    
                            fprintf(stderr, "Die Anzahl der Datensätze konnte nicht ausgelesen werden!");
                            mysql_close(connection);
                    }
    
                    result = mysql_store_result(connection); 
    
                    coutRow = mysql_num_rows(result);
    
                    if(coutRow < 1) {
    
                            printf("Sie müssen keine Hausaufgaben mehr erledigen!\n");
    
                    } else { 
    
                    printf("Anzahl Hausaufgaben, die noch erledigt werden müssen: %d", coutRow);
    
                    }
    
                    //Ergebnisvariable leeren
                    mysql_free_result(result);
    
                    //Schleife für Menüausgabe
                    while(menue != 0) {
    
                            //Menü ausgeben
                            printf("\nMenü:\n");
                            printf("Hausaufgaben ausgeben (1)\n");
                            printf("Neue Hausaufgabe hinzufügen (2)\n");
                            printf("Hausaufgabe löschen (3)\n");
                            printf("Hausaufgabe editieren (4)\n");
                            printf("Programm beenden (5)\n");
                            printf("Bitte geben Sie ihre Wahl ein\n"); 
                            scanf("%i", &menue);
    
                            switch(menue) {
    
                                    case 1:
                                            printf("Hausaufgaben ausgeben\n");
                                            printf("Ihre Hausaufgaben:\n");
    
                                            //Hausaufgaben auslesen
                                            sprintf(query, "SELECT * FROM hausaufgaben");
    
                                            if(mysql_query(connection, query) != 0) {
    
                                                    fprintf(stderr, "Die Hausaufgaben konnten nicht ausgelesen werden");
                                                    mysql_close(connection);
                                            }
    
                                            result = mysql_store_result(connection); 
    
                                            coutRow = mysql_num_fields(result);
    
                                            while(row = mysql_fetch_row(result)) {
    
                                                    for(i = 0; i < coutRow; i++) {
    
                                                            printf("%s ", row[i]);
                                                            }
                                                    printf("\n");
                                            }
    
                                            mysql_free_result(result);
                                    break;
    
                                    case 2:
                                            //Daten einlesen        
                                            printf("Neue Hausaufgaben hinzufügen\n");
                                            printf("Bitte geben Sie den Namen der Aufgabe ein\n");
                                            scanf("%s", name);
                                            printf("Bitte geben Sie das Fach an\n");
                                            scanf("%s", fach);
                                            printf("Bitte geben Sie das Datum an, bis wann Sie die Hausaufgabe benötigen (Im Format: TT.MM.JJJJ)\n");
                                            scanf("%s", datum);
    
                                            //Daten hinzufügen
                                            sprintf(query, "INSERT INTO hausaufgaben (name, fach, datum) VALUES ('%s', '%s', '%s')", name, fach, datum);
    
                                            if(mysql_query(connection, query) != 0) {
    
                                                    fprintf(stderr, "Die Hausaufgabe konnte nicht hinzugefügt werden");
                                                    mysql_close(connection);
    
                                            } else {
    
                                                    printf("Die Hausaufgabe konnte erfolgreich hinzugefügt werden");
                                            }                        
                                    break;
    
                                    case 3:
                                            //Name einlesen
                                            printf("Hausaufgaben löschen\n");
                                            printf("Bitte beachten Sie, dass die Hausaufgabe komplett gelöscht wird!\n");
                                            printf("Bitte geben Sie die die ID der Hausaufgabe ein. Diesen können Sie sich auch im Menü ausgeben lassen\n");
                                            scanf("%i", &ID);
    
                                            //Daten löschen
                                            sprintf(query, "DELETE FROM hausaufgaben WHERE ID='%d'", ID);
    
                                            if(mysql_query(connection, query) != 0) {
    
                                                    fprintf(stderr, "Die Hausaufgabe konnte nicht erfolgreich gelöscht werden");
                                                    mysql_close(connection);
    
                                            } else {
    
                                                    printf("Die Hausaufgabe konnte erfolgreich gelöscht werden");
                                            }        
                                    break;
    
                                    case 4:
                                            printf("Hausaufgaben editieren\n");
                                            printf("Bitte wählen Sie aus, welchen Teil der Hausaufgabe Sie ändern wollen\n");
                                            printf("Name ändern (1)\n");
                                            printf("Fach ändern (2)\n");
                                            printf("Datum ändern (3)\n");
                                            printf("Programm beenden (4)\n");
                                            scanf("%i", &edit);
    
                                            switch(edit) {
    
                                                    case 1:
                                                            /* Namen ändern
                                                               Daten einlesen */
                                                            printf("Bitte geben Sie die ID der Hausaufgabe ein, die Sie ändern wollen");
                                                            scanf("%i", &ID);
                                                            printf("Bitte geben Sie den neuen Namen ein");
                                                            scanf("%s", &newName);
    
                                                            //Namen ändern
                                                            sprintf(query, "UPDATE hausaufgaben WHERE name='%s'", newName);
    
                                                            if(mysql_query(connection, query) != 0) {
    
                                                                    fprintf(stderr, "Der Name konnte nicht erfolgreich geändert werden");
                                                                    mysql_close(connection),
    
                                                            } else {
    
                                                                    printf("Der Name konnte erfolgreich geändert werden");
                                                            }
                                                    break;
    
                                                    case 2:
                                                            /* Fach ändern 
                                                               Daten einlesen */
                                                            printf("Bitte geben Sie die ID der Hausaufgabe ein, die Sie ändern wollen");
                                                            scanf("%i", &ID);
                                                            printf("Bitte geben Sie das neue Fach ein");
                                                            scanf("%s", &newFach);
    
                                                            //Fach ändern
                                                            sprintf(query, "UPDATE hausaufgaben WHERE fach='%s'", newFach);
    
                                                            if(mysql_query(connection, query) != 0) {
    
                                                                    fprintf(stderr, "Das Fach konnte nicht erfolgreich geändert werden");
                                                                    mysql_close(connection),
    
                                                            } else {
    
                                                                    printf("Das Fach konnte erfolgreich geändert werden");
                                                            }
                                                    break;
    
                                                    case 3:
                                                            /* Datum ändern
                                                               Daten einlesen */
                                                               printf("Bitte geben Sie die ID der Hausaufgabe ein, die Sie ändern wollen");
                                                            scanf("%i", &ID);
                                                            printf("Bitte geben Sie das neue Datum ein");
                                                            scanf("%s", &newDatum);
    
                                                            //Datum ändern
                                                            sprintf(query, "UPDATE hausaufgaben WHERE fach='%s'", newDatum);
    
                                                            if(mysql_query(connection, query) != 0) {
    
                                                                    fprintf(stderr, "Das Datum konnte nicht erfolgreich geändert werden");
                                                                    mysql_close(connection),
    
                                                            } else {
    
                                                                    printf("Das Datum konnte erfolgreich geändert werden");
                                                            }
                                                    break;
    
                                                    case 4:
                                                            return 0;
                                                    break;
                                            }
                                    break;
    
                                    case 5:
                                            return 0;
                                    break;
                            }
    
                    //Auf Zeichen warten
                    fflush(stdin);
                    getchar();
    
                    }
            }
    
            //Programm beenden
            return 0;
    
    }
    


  • In etwa ab Zeile 180 :

    ...
     fprintf(stderr, "Der Name konnte nicht erfolgreich geändert werden"); 
     mysql_close(connection), // <- Semikolon statt Komma !!!
    ...
     fprintf(stderr, "Das Fach konnte nicht erfolgreich geändert werden");
     mysql_close(connection),
    ...
     fprintf(stderr, "Das Datum konnte nicht erfolgreich geändert werden");
     mysql_close(connection),
    ...
    

    🙂



  • Ok, vielen Dank!
    Aber jetzt gibt er mir immer meine Fehlermeldung aus, dass der Datensatz nicht geändert werden konnte. Was habe ich falsch gemacht? Kann irgendwie nicht erkennen, was falsch sein soll, da es ja auch vom Compiler keine Fehlermeldungen gibt.


Anmelden zum Antworten