AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Abfrage mit Daumswechsel
Thema durchsuchen
Ansicht
Themen-Optionen

Abfrage mit Daumswechsel

Ein Thema von celinaw · begonnen am 19. Mai 2004 · letzter Beitrag vom 21. Mai 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#1

Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 12:57
Hi

Habe bissher folgenden Code:

Delphi-Quellcode:
var
  anzahl : Integer;
begin
  dbMain.HostName:=Form2.Hostname.Text; //Server
  dbMain.User:=Form2.User.Text; //Benutzername
  dbMain.Password:=Form2.Password.Text; //Passwort
  dbMain.Database:=Form2.Datenbank.Text; //Name der Datenbank
  dbMain.Connected:=True; //Verbindung herstellen
  Screen.Cursor := crHourGlass;
  try
    with qrMain do
    begin
      Close;
      SQL.Text :=
       'SELECT COUNT(*) AS anzahl FROM table_ordertracking WHERE order_type=:order_type';
      ParamByName('order_type').AsString := 'FT';
      Open;
      anzahl := FieldByName ('anzahl').AsInteger;
      DFCount.Text:= IntToStr(anzahl);
      qrmain.Close;
  finally
    Screen.Cursor := crdefault;
  end;
end;
Hier wird jetzt die Anzahl der Datensätze ausgegeben bei denen in der Spalte "Order_type" FT steht.
In der Tabelle ist ein Date/Time Feld.
Jetzt möchte ich das ganze aber über einen Zeitraum von 19:00 Uhr bis 19:00 Uhr haben.
Z.B: 05.05.04 19:00Uhr - 06.05.04 19:00Uhr.
Also demnach dann ab 06.05.04 19:00:01 wieder 06.05.04 19:00 - 07.05.04 19:00 usw.
Das ganze soll so zusagen ein Counter werden, der alle Datensätze des Types FT von zb. 05.05.04 19:00Uhr - 06.05.04 19:00Uhr
hochzählt. Am 06.05.04 19:00:01 geht das denn wieder von vorne los.

Ist so etwas überhaup möglich


Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 13:10
Hallo,

etwa in der Art:

Code:
'SELECT
  COUNT(*) AS anzahl
FROM table_ordertracking
  WHERE order_type=:order_type AND datum BETWEEN (:von AND :bis)';
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 13:27
In diesem Fall wäre BETWEEN wohl nicht geeignet da es ja die "begrenzungswerte" mit einschließt (>= AND <=).

Somit würde bei
1.5.2004 19:00 bis 2.5.2004 19:00
2.5.2004 19:00 bis 3.5.2004 19:00

Der Zeitstempel 2.5.2004 19:00 in beiden Abfragen berücksichtigt werden.

Ich würde abfragen: (datum > 1.5.2004 19:00) AND (datum <= 2.5.2004 19:00). Dann müsste es eigentlich stimmen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  anzahl : Integer;
  von : TDateTime;
  bis : TDateTime;
begin
  von := EncodeDateTime(2004,5,1,19,00,00,00); //1. Mai 2004 19:00
  bis := EncodeDateTime(2004,5,2,19,00,00,00); //2. Mai 2004 19:00
  dbMain.HostName:=Form2.Hostname.Text; //Server
  dbMain.User:=Form2.User.Text; //Benutzername
  dbMain.Password:=Form2.Password.Text; //Passwort
  dbMain.Database:=Form2.Datenbank.Text; //Name der Datenbank
  dbMain.Connected:=True; //Verbindung herstellen
  Screen.Cursor := crHourGlass;
  try
    with qrMain do
    begin
      Close;
      SQL.Text :=
       'SELECT COUNT(*) AS anzahl '+#10+
       'FROM table_ordertracking '+#10+
       'WHERE (order_type=:order_type)'+#10+
       'AND (datum > :von) AND (datum <= :bis)';
      ParamByName('order_type').AsString := 'FT';
      ParamByName('von').AsDateTime := von;
      ParamByName('bis').AsDateTime := bis;
      Open;
      anzahl := FieldByName ('anzahl').AsInteger;
      DFCount.Text:= IntToStr(anzahl);
      qrmain.Close;
  finally
    Screen.Cursor := crdefault;
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von Gollum
Gollum

Registriert seit: 14. Jan 2003
Ort: Boxberg
456 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 14:19
Hallo,

@Sharky:

Wo ist das Problem?

von: 06.05.04 19:00:01
bis: 07.05.04 19:00:00

Siehe auch Posting von celinaw.
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 14:25
Zitat von Gollum:
...Wo ist das Problem?....
Zitat von celinaw:
Z.B: 05.05.04 19:00Uhr - 06.05.04 19:00Uhr.
Also demnach dann ab 06.05.04 19:00:01 wieder 06.05.04 19:00 - 07.05.04 19:00 usw.
Ihre erste Abfrage wäre das Problem. Sie müsste bei der ersten Abfrage ein andere Zeit nehmen. Das ist imho eine Quelle für mögliche Fehler. Ansonsten hast Du recht. Andereerseits muss man überlegen in welchen Intervallen Daten eingetragen werden. Wenn es kleiner als 1sek. ist könnten Infos verloren gehen.

Wenn z.B.: Ein Eintrag um 19:00:01:59 erfolgt gibt es ein Problem.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#6

Re: Abfrage mit Daumswechsel

  Alt 19. Mai 2004, 19:01
Hi

Also ich denke ganz so einfach wird es nicht sein.
Ich möchte hier kein festes Datum vorgeben.
Das Programm soll mit dem System Datum/Zeit arbeiten.
Also so:

Übrigens: Die Abfrage wird über einen Timer alle 2min aktualliesert.

Wenn der Timer am Datum/Zeit z.B 17.05.2004 20:30 Uhr startet, müsste die Abfrage folgenden Zeitraum abdecken:

von: 17.05.2004 19:00 Uhr bis: 18.05.2004 19:00 Uhr !! Der Haken an der Sache ist, dass wenn der Timer nach OO:00 Uhr und vor 19:00 Uhr startet, müsste die Abfrage bei oben genanntem Beispiel mit folgenden Parameter laufen:
von: 17.05.2004 19:00 Uhr bis: 18.05.2004 19:00 Uhr !!

Ich brauche also immer den Zeitraum 19:00 Uhr bis 19:00 Uhr. Und das ist ja davon abhängig wann die Abfrage ausgeführt wird.
Wird die Abfrage zwischen 19:00 Uhr und 00:00 Uhr ausgeführt, solten die Abfrage Parameter von 19:00 Uhr des Aktuellen Tages bis 19:00 Uhr des folgenden Tages sein. Nach 00:00 Uhr und vor 19:00 müssen die Parameter ja dann von 19:00 Uhr des vergangenen Tages bis 19:00 Uhr des Aktuellen Tages sein.

Ich hoffe da blickt noch einer durch

Ich denke das ist nicht so leicht zu machen

@ Sharky
Zitat:
EncodeDateTime
gibt bei mir immer den Fehler "Undefinierter Bezeichner"


Gruß Celina
  Mit Zitat antworten Zitat
MarkusB

Registriert seit: 3. Apr 2004
Ort: Hamburg
105 Beiträge
 
#7

Re: Abfrage mit Daumswechsel

  Alt 21. Mai 2004, 00:22
Hi Celina!

Wie ich sehe ist Dein Problem weitgehend gelöst. Was übrig bleibt, ist das richtige Setzen der Zeitgrenzen.
Ich hoffe, dass das folgende Stück Code Dir weiterhelfen wird:

Delphi-Quellcode:
VonDatumZeit := Date() + EncodeTime(19,00,00,00);
BisDatumZeit := VonDatumZeit;

DecodeTime(Now, Hour, Min, Sec, MSec);

if Hour >= 19
then BisDatumZeit := BisDatumZeit + 1
else VonDatumZeit := VonDatumZeit - 1;
Viele Grüße
Markus
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Abfrage mit Daumswechsel

  Alt 21. Mai 2004, 09:43
Hai Celinachen *gg*,

ich habe das ganze mal so gemacht. Ich weiss das man es auch noch vereinfachen kann. Aber ich denke so ist die "Logik" besser zu erkennen?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sod: TTime; // Start of day
  sop: TTime; // Start of production
  datum: TDate; // Datum des Servers
  zeit: TTime; // Zeit des Servers
  DayOffsetStart: Integer; // 0 = heute; -1 = Gestern
  DayOffsetEnde: Integer; // 0 = heute; 1 = Morgen
  VonDatumZeit: TDateTime; // Abfrage start
  BisDatumZeit: TDateTime; // Abfrage ende
begin
  sod := EncodeTime(0, 0, 0, 0); // 00:00:00 // Neuer Tag neues Glück
  sop := EncodeTime(19, 0, 0, 0); // 19:00:00 // Die Arbeit beginnt
  dbMain.HostName := Form2.Hostname.Text; //Server
  dbMain.User := Form2.User.Text; //Benutzername
  dbMain.Password := Form2.Password.Text; //Passwort
  dbMain.Database := Form2.Datenbank.Text; //Name der Datenbank
  dbMain.Connected := True; //Verbindung herstellen
  Screen.Cursor := crHourGlass;
  try
    with qrMain do // Ersteinmal Datum und Zeit vom Server holen.
    begin
      Close;
      SQL.Text := 'SELECT CURDATE() AS datum, CURTIME() as zeit';
      Open;
      datum := FieldByName('datum').AsDateTime;
      zeit := FieldByName('zeit').AsDateTime;
      Close;
    end;
    // Jetzt prüfen welche Zeiträume berücksichtigt werden müssen.
    if (zeit >= sod) and (zeit < sop) then // Es ist zwichen 00:00:00 und 19:00:00
    begin
      DayOffsetStart := -1; // Abfrage beginnt gestern
      DayOffsetEnde := 0; // Abfrage endet heute
    end
    else //Es ist zwichen 19:00:00 und 23:59:59
    begin
      DayOffsetStart := 0; // Abfrage beginnt Heute
      DayOffsetEnde := 1; // Abfrage endet Morgen
    end;
    // Start- und Endzeitpunkte berechnen
    VonDatumZeit := datum + sop + DayOffsetStart;
    BisDatumZeit := datum + sop + DayOffsetEnde;
    with qrMain do // Und los geht es
    begin
      Close;
      SQL.Text :=
       'SELECT COUNT(*) AS anzahl '+#10+
       'FROM table_ordertracking '+#10+
       'WHERE (order_type=:order_type)'+#10+
       'AND (datum > :von) AND (datum <= :bis)';
      ParamByName('order_type').AsString := 'FT';
      ParamByName('von').AsDateTime := VonDatumZeit;
      ParamByName('bis').AsDateTime := BisDatumZeit;
      Open;
      anzahl := FieldByName ('anzahl').AsInteger;
      DFCount.Text:= IntToStr(anzahl);
      qrmain.Close;
  finally
    Screen.Cursor := crdefault;
  end;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#9

Re: Abfrage mit Daumswechsel

  Alt 21. Mai 2004, 09:48
Hi Hai

Na das werde ich gleich mal testen

Erst mal Vielen Dank

Melde mich gleich wieder..

@MarkusB Dir danke ich natürlich auch

Gruß Celina
  Mit Zitat antworten Zitat
Benutzerbild von celinaw
celinaw

Registriert seit: 2. Apr 2004
162 Beiträge
 
#10

Re: Abfrage mit Daumswechsel

  Alt 21. Mai 2004, 10:04
Hi Hai

Wow... Respekt!!

Es funktioniert auf anhieb! Das hast du Spuper hin bekommen
Und ganz besonders toll finde ich es, das du den Code mit nützlichen Kommentaren versehen hast!
So kann jeder verstehen was du da gemacht hast, selbst ich Du hast dir ein DICKES Lob verdient!!

@MarkusB: Natürlich danke ich auch dir für deine Mühe.

Also, vielen vielen Dank!

Ein auf die DP

Liebe Grüße Celina
  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 17:38 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