AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Query-Durchlauf funktioniert nicht richtgi
Thema durchsuchen
Ansicht
Themen-Optionen

Query-Durchlauf funktioniert nicht richtgi

Ein Thema von Barret · begonnen am 19. Aug 2009 · letzter Beitrag vom 19. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#1

Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 09:03
Datenbank: MySQL • Zugriff über: ADO
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;
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 09:18
Besser while not bAusgabe do Ich würde das aber anders lösen. Wie sieht die Datenbankstruktur aus?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#3

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 09:24
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.
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#4

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 09:34
OK!
Fehler ist halb gefunden!!!


so muss es sein:
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 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;
Jetz habe ich nur noch das Problem, dass der letzte Datensatz zweimal eingetragen wird...

Gibt es eine Möglichkeit vom Eof einen abzuzzihen?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 12:22
Hallo,

Delphi-Quellcode:
if Eof then
    begin
      if (dAusgabe = trunc(DTPBis.Date)) then
        bAusgabe := true;

        First; // wieso wieder First ?
        bDatumAusgabe := false;
        dAusgabe := dAusgabe + 1;
    end
    else
      Next;
Was soll das denn werden ?

Eof einen abziehen, um einen Fehler im Code zu beheben ? Nee !!!
Debugge doch mal den Code, das sieht ja ganz finster aus.


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Barret
Barret

Registriert seit: 27. Mai 2004
53 Beiträge
 
#6

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 13:02
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 14:51
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
Heiko
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 15:22
@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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 15:35
Hallo,

hm, so genau habe ich mir den Wirrwarr nicht angesehnn


Heiko
Heiko
  Mit Zitat antworten Zitat
khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.926 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Query-Durchlauf funktioniert nicht richtgi

  Alt 19. Aug 2009, 15:46
Zitat von hoika:
Hallo,

hm, so genau habe ich mir den Wirrwarr nicht angesehnn


Heiko
mh, ich kenne jetzt zwar die ado - komponente nicht, aber im Ursprungspost sehe ich kein sql-statement
bin ich blind, oder funktioniert ado anders ?
Karl-Heinz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz