Angus131 Geschrieben 25. März 2009 Geschrieben 25. März 2009 hey ich bins schonwieder =) ... und auch wieder mit nem problem ^^ also in meiner MySQL datenbank wird das datum im format YYYY-MM-DD gespeichert und ich möchte das er jeden Monat der angegeben wurde nur einmal ausgibt bsp: Datensätze: 2009-01-21 2009-01-21 2009-01-21 2009-02-21 2009-03-21 2009-04-21 Ausgabe soll sein: Januar Februar März April einen ansatz habe ich schon... und zwar SELECT MONTHNAME('2008-02-03'); bei der funktion übersetzt er immerhin die zahl in den Monatsnamen =) ... aber auch nur von dem datum was ich angegeben habe .. gibt es da irgendwie ne möglichkeit das zu machen?! ^^ Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 Hat eigentlich nichts mit C++ zu tun. Versuch's mal so: SELECT DISTINCT MONTHNAME(NAME_DES_FELDES) Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 ahh mit SELECT DISTINCT MONTHNAME(NAME_DES_FELDES) from TABELLE; gehts >< .. cool danke =) Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 und schon kommt das nächste problem O.o string query= "SELECT DISTINCT MONTHNAME(Datum) from verwaltung;"; mysql_query(connectionDB, query.c_str()); result=mysql_store_result(connectionDB); int daten = mysql_num_rows(result); for(int i=0; i < daten; i++){ recordset_row=mysql_fetch_row(result); static const char* items[] = { recordset_row[0] , 0 }; test->insertStrList( items ); } so hab ich das jetzt in QT3 geschrieben..die Monate sollen in einer ComboBox eingefügt werden was ich eigentlich damit mache: static const char* items[] = { recordset_row[0] , 0 }; test->insertStrList( items ); und dadurch das ich auch "recordset_row=mysql_fetch_row(result);" in einer for schleife habe sollte er auch in die nächste zeile in der Datenbank springen .. aber er gibt mir nur 12 mal den selben monat aus... wenn ich aber vorher ein nur recordset_row[0] in der konsole ausgeben lasse funktioniert es ... also denk ich mal es liegt am einfügen in die ComboBox .. wie kann ich das vernünftig realisieren das es klappt? Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 Ist dir klar, dass eine static-Variable nur einmal initialisiert wird? Warum überhaupt static? Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 omg >< ... naja hab static genommen weil es irgendwo stand ;p aber vielen dank ^^ Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 ich versteh es einfach nicht -.- habe ja soweit alles hinbekommen doch wenn ich das ausgewählte datum aus der combobox an einen mysql string übergeben will dann sagt er mir "Segmentation Fault" QString ausgabejahr; ausgabejahr = jahr1->currentText(); QString ausgabemonat; ausgabemonat = monat1->currentText(); string query= "SELECT * FROM verwaltung WHERE YEAR(Datum)="+ausgabejahr+" AND MONTH(Datum)="+ausgabemonat+";"; mysql_query(connectionDB, query.c_str()); result=mysql_store_result(connectionDB); int daten = mysql_num_rows(result); viewdata->clear(); for(int i=0; i < daten; i++){ recordset_row=mysql_fetch_row(result); new QListViewItem( viewdata, recordset_row[1], recordset_row[2], recordset_row[3], recordset_row[4], recordset_row[5], recordset_row[6], recordset_row[7], recordset_row[8] ); } aber da ist doch eigentlich alles richtig oder? hatte schon einiges auskommentiert um zu schauen wo der fehler liegt ... und der muss irgendwo im diesem bereich sein: string query= "SELECT * FROM verwaltung WHERE YEAR(Datum)="+ausgabejahr+" AND MONTH(Datum)="+ausgabemonat+";"; mysql_query(connectionDB, query.c_str()); result=mysql_store_result(connectionDB); int daten = mysql_num_rows(result); Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 (bearbeitet) ja ...hier nochmal alles was ich für die DB deklariert habe: MYSQL *connectionDB; MYSQL addDB; MYSQL_RES *result; MYSQL_ROW recordset_row; mysql_init(&addDB); connectionDB=mysql_real_connect(&addDB, "HOST", "Benutzer", "PW", "Datenbank", 0,0,0); //edit: also dieser Segmentation Fault kommt erst wenn ich diesen slot im programm aufrufe Bearbeitet 25. März 2009 von Angus131 Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 Ich meinte schon den konkreten Wert von connectionDB an dieser Stelle. Wirf den Debugger an. Fehlerbehandlung im Code scheinst du ja grundsätzlich nicht zu machen Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 (bearbeitet) also Debugger hab ich leider keinen >< ... aber ConnectionDB sollte eigentlich richtig sein... da es bei anderen funktionen ja geht .. habe gerade auch nochmal versucht "+ausgabemonat+" und "+ausgabejahr+" einfach mal durch zahlen zu ersetzten... dann gehts Bearbeitet 25. März 2009 von Angus131 Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 also Debugger hab ich leider keinen >< ...Wieso das? aber ConnectionDB sollte eigentlich richtig sein... da es bei anderen funktionen ja gehtNö, das könnte eine ganz andere Variable sein, die einfach nur denselben Namen hat. Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 hab kein Debugger weil ich noch nie ein gebraucht hab =) .. und kenne auch auf anhieb keinen für QT >< hab jetzt ConnectionDB auch nochmal umbenannt gibt aber immernoch den selben fehler Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 hab kein Debugger weil ich noch nie ein gebraucht hab =) .. und kenne auch auf anhieb keinen für QT ><Das hat mit QT nichts zu tun. Du brauchst einen passenden Debugger für deinen Compiler. hab jetzt ConnectionDB auch nochmal umbenannt gibt aber immernoch den selben fehler Ist das denn eine globale Variable, oder was? Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 ich hab ConnectionDB bis jetzt in jeder funktion neu deklariert >< .. muss ich aber noch ändern das es global ist ...aber mir ist mal was aufgefallen .. ich hatte das ja schonmal alles gemacht nur war das etwas umständlicher ^^ .. und da hab ich diese 2 strings verwendet: QString jahrstring; QString monatstring; jahrstring = jahr1 -> text(); monatstring = monat1 -> text(); und jetzt mach ich das so: QString ausgabejahr; ausgabejahr = jahr1->currentText(); QString ausgabemonat; ausgabemonat = monat1->currentText(); kann es vllt am "->text();" liegen? und wenn ja wie kann ich das machen? Zitieren
Klotzkopp Geschrieben 25. März 2009 Geschrieben 25. März 2009 ich hab ConnectionDB bis jetzt in jeder funktion neu deklariert >< ..D.h. du machst in jeder Funktion eine neue Verbindung auf? Oder wie initialisierst du ConnectionDB? Lass dir doch nicht alles aus der Nase ziehen. muss ich aber noch ändern das es global ist ...Das ist eher schlechter Stil. kann es vllt am "->text();" liegen? und wenn ja wie kann ich das machen?Aus deinen kleinen Codeschnipseln kann man das kaum ablesen. Es wäre wirklich gut, wenn du einen Debugger benutzen würdest. Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 ja ich mach in jeder funktion ne neue verbindung auf ... aber warum ist es schlecht die verbindung global ist? und was für ein Debugger soll ich benutzen?! >< ... hab hier ubuntu drauf und das einzigste was ich installiert hab für QT ist der QT3 Assistant QT3 Designer und QT3 Linguist compilieren mach ich mit den 3 befehlen: qmake -project qmake make (falls das hilft) wobei ich aber den Designer und Linguist nicht benutze Zitieren
Angus131 Geschrieben 25. März 2009 Autor Geschrieben 25. März 2009 ich hab den fehler gefunden... und zwar bei der Monatsabfrage... und zwar fragt er nach dem namen und nicht nach der zahl ... kann man den befehl SELECT DISTINCT MONTHNAME(Datum) from verwaltung; denn noch umdrehen? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.