![]() |
Datenbank: MySQL • Zugriff über: ADO
Query-Durchlauf funktioniert nicht richtgi
Morgen!
ich habe da ein kleines Problem. Ich habe eine Datenbank mit veranstaltungen. Jetz möchte ich Auswerten (in eine Datei schreiben). Soweit funktioniert auch alles super (Datei schreiben, die richtigen Einträge filtern, etc.). Problem is nur, dass meine Query nicht richtig durchlaufen wird. Ich habe einen Start-Tag. Von diesem diesem wird dan immer jeweils alle Veranstaltungen die an einem Tag sind aufgezählt und dan ist der kommende Tag drann. Aussehen soll das so: Freitag, 14. Aug Ort: Name, ... Freitag, 15. Aug Ort: Name, ... Ort: Name, ... Freitag, 18. Aug Ort: Name, ... Ort: Name, ... Die Stings die unter den jeweiligen Tagen kommen baue ich auch richtig zusammen. Mein Problem is nur, wenn ich Veranstaltungen habe die über mehrere Tage gehen sollen diese auch in ALLEN Tagen der Zeitspanne stehen. Wenn ich nur ein Result in der Query habe funktioniert es auch. Bei mehreren Ergebnissen zeigt er mir immer nur den ersten Tag der Veranstaltung an. Das Verwirrt mich ein wenig. (oben steht noch with query do und first)
Delphi-Quellcode:
bAusgabe := false; //bestimmen ob das Enddatum erreicht ist (Abbruch der Schleife)
bDatumAusgabe := false; //Bestimmen ob Datum schon als Tagesüberschrift angezeigt wird dAusgabe := FieldByName('datum_von').AsDateTime; while bAusgabe = false do begin if ((dAusgabe >= FieldByName('datum_von').AsDateTime) AND (dAusgabe <= FieldByName('datum_bis').AsDateTime)) then begin if (bDatumAusgabe = false) then begin bDatumAusgabe := true; ShortDateFormat := 'dddd, dd. mmm'; LBText.Items.Add(''); LBText.Items.Add(DateToStr(dAusgabe)); ShortDateFormat := 'yyyy-mm-dd'; end; //String zusammenbauen und ausgeben .... end; if Eof then begin if (dAusgabe = trunc(DTPBis.Date)) then bAusgabe := true; First; bDatumAusgabe := false; dAusgabe := dAusgabe + 1; end; Next; end; |
Re: Query-Durchlauf funktioniert nicht richtgi
Besser
Delphi-Quellcode:
Ich würde das aber anders lösen. Wie sieht die Datenbankstruktur aus?
while not bAusgabe do
|
Re: Query-Durchlauf funktioniert nicht richtgi
Tabelle Veranstaltungen:
- id - name - beschreibung - ... Tabelle Veranstaltung Widerholung: - id - veranstaltung_id - datum_von - datum_bis - zeit_von - zeit_bis - ... Also is es so, dass eine Veranstaltung mehrere Zeitspannen haben kann. Dazu kommen dan noch Tabellen mit Personen als Ansprechpartner und Kategorien der Veranstaltung. Oder soll ich die ganze Struktur posten. |
Re: Query-Durchlauf funktioniert nicht richtgi
OK!
Fehler ist halb gefunden!!! so muss es sein:
Delphi-Quellcode:
Jetz habe ich nur noch das Problem, dass der letzte Datensatz zweimal eingetragen wird...
bAusgabe := false; //bestimmen ob das Enddatum erreicht ist (Abbruch der Schleife)
bDatumAusgabe := false; //Bestimmen ob Datum schon als Tagesüberschrift angezeigt wird dAusgabe := FieldByName('datum_von').AsDateTime; while not bAusgabe do begin if ((dAusgabe >= FieldByName('datum_von').AsDateTime) AND (dAusgabe <= FieldByName('datum_bis').AsDateTime)) then begin if (bDatumAusgabe = false) then begin bDatumAusgabe := true; ShortDateFormat := 'dddd, dd. mmm'; LBText.Items.Add(''); LBText.Items.Add(DateToStr(dAusgabe)); ShortDateFormat := 'yyyy-mm-dd'; end; //String zusammenbauen und ausgeben .... end; if Eof then begin if (dAusgabe = trunc(DTPBis.Date)) then bAusgabe := true; First; bDatumAusgabe := false; dAusgabe := dAusgabe + 1; end else Next; end; Gibt es eine Möglichkeit vom Eof einen abzuzzihen? |
Re: Query-Durchlauf funktioniert nicht richtgi
Hallo,
Delphi-Quellcode:
Was soll das denn werden ?
if Eof then
begin if (dAusgabe = trunc(DTPBis.Date)) then bAusgabe := true; First; // wieso wieder First ? bDatumAusgabe := false; dAusgabe := dAusgabe + 1; end else Next; Eof einen abziehen, um einen Fehler im Code zu beheben ? Nee !!! Debugge doch mal den Code, das sieht ja ganz finster aus. Heiko |
Re: Query-Durchlauf funktioniert nicht richtgi
Danke für die Bemühungen. Geht jetz alles wie es soll.
@hoika: Das first setzen brauch ich schon an der stelle. sonnst bekomm ich nicht alle Daten so ausgegeben wie ich Sie brauche für den Kalender. Ich lass immer tageweise auslesen und dadurch muss ich die query für jeden Tag einmal durchgehen. Hängt aber mit den jeweiligen Zeiträumen zusammen die die Veranstaltungen haben. das Problem war, dass ich erst Eof geprüft habe und dan Next ... muss genau anders rum. |
Re: Query-Durchlauf funktioniert nicht richtgi
Hallo,
Einspruch :) Ich sehe ja jetzt nicht den ganzen Code, aber wenn du wirklich für jeden Tag eine Abfrage machst, wirst du irgendwann Performance-Probleme haben. 1 Tag, 1 Abfrage 1 Jahr, 365/366 Abfragen 2 Jahre, 365*2 Ich würde die Daten des Zeitraumes in genau einer Query (sortiert nach Startdatum) holen und dann per Code (wie ja jetzt auch) auf die einzelnen Tage aufteilen. Ansatz:
Delphi-Quellcode:
Query.SQL.Add('select * From Tab1');
Query.SQL.Add('where (StartDatum>=:StartDate) and (EndDatum<=:EndDate)'); Query.ParamByName('StartDate').AsDateTime := tdtStartDate Query.ParamByName('EndDate').AsDateTime := tdtStartDate Heiko |
Re: Query-Durchlauf funktioniert nicht richtgi
@Heiko
Macht er doch. Deshalb das First. Zugegebenermaßen auch nicht wirklich performant. Er scheint für jeden Tag des Abfragezeitraums einmal durch die gesamte Ergebnismenge der gleichen Query zu laufen. Ergo: 2 Jahre = 1 query, 365*2 Schleifendurchläufe |
Re: Query-Durchlauf funktioniert nicht richtgi
Hallo,
hm, so genau habe ich mir den Wirrwarr nicht angesehnn ;) Heiko |
Re: Query-Durchlauf funktioniert nicht richtgi
Zitat:
bin ich blind, oder funktioniert ado anders ? |
Re: Query-Durchlauf funktioniert nicht richtgi
@khh
Das Statement ist auch nicht dabei. Passiert weiter oben in seinem Source-Code. Kann man daran erkennen, dass man in einem with-Block sein muss, da sonst die FieldByName Aufrufe ins leere gehen würden. Das ist also einfach von uns interpretiert, weil anders geht es halt nich :D |
Re: Query-Durchlauf funktioniert nicht richtgi
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz