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 fileDas 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.