Zum Inhalt springen

MySQL Datumsabfrage


Angus131

Empfohlene Beiträge

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?! ^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Angus131
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Angus131
Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...