AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auslesen von Daten / Rechnung mit Datum

Ein Thema von ironman139 · begonnen am 9. Mär 2020 · letzter Beitrag vom 14. Mär 2020
Antwort Antwort
Seite 1 von 3  1 23      
ironman139

Registriert seit: 1. Nov 2013
24 Beiträge
 
#1

Auslesen von Daten / Rechnung mit Datum

  Alt 9. Mär 2020, 22:25
Abend zusammen,

Ich programmier schon länger an einer Auftragsverwaltungssoftware für unseren Betrieb.
Funktioniert eigentlich recht gut.
In einer SQL Datenbank werden diverse Infos zu jedem Auftrag gespeichert (AuftragsID, Auftraggeber, Fall, Datum, Status etc...)

Ich hätte jetzt gerne eine Funktion bzw Button der mir in meiner Listview anzeigt 'Heutiges Datum + 5 Tage'. Also alle Fälle die einen Termin in 5 oder weniger Tagen haben.
Beim Auftragseingang wird das Datum in die SQL gespeichert.
Mach ich das ganze schon bevor ich es in die Listbox lade? Also das Datum mit StrToDate ins Datumsformat bringen und vom aktuellen Datum abziehen?

Hat mir evt jemand einen Tipp der mich in die richtige Richtung leitet?
Soweit sieht mein Code jetzt aus:

Code:
procedure TForm7.Button_Datum(Sender: TObject);
var
  ID,a,p,e,s,v,pan :string;
  datumop, datumheute :TDate;
begin

  datumheute := date;


  ListView1.Items.Clear;
    SQLTransaction1.commit;
       SQLQuery1.Close;
       SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE Fertig = :Fertig';

     SQLQuery1.Params.ParamByName('Fertig').AsString := ?????????;
     SQLQuery1.Open;

    while not SQLQuery1.Eof do
             begin
     ID:=((SQLQuery1.Fields[0].AsString));
     a :=((SQLQuery1.Fields[2].AsString));
     p:=((SQLQuery1.Fields[3].AsString));
     e:=((SQLQuery1.Fields[9].AsString));
     s:=((SQLQuery1.Fields[15].AsString));
     v:=((SQLQuery1.Fields[11].AsString));
     pan:=((SQLQuery1.Fields[19].AsString));
     with ListView1.Items.Add do begin
      Caption:=ID;
      SubItems.Add(a);
      SubItems.Add(p);
      SubItems.Add(e);
      SubItems.Add(s);
      SubItems.Add(v);
      SubItems.Add(pan);
   end;
        SQLQuery1.Next;





end;

  Label7.Caption := IntToStr(ListView1.Items.Count);

end;

Gruß Tim
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
672 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 07:04
Je nach verwendeter Datenbank
Code:
SELECT * FROM [table1]
  WHERE [datumsfeld] BETWEEN CURDATE() AND CURDATE()+5
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
hoika

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

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 07:08
Hallo,
einfach das Datum einschränken.

Select * From Rechnung
Where (Datum>=:Heute) And (Datum<=HeutePlus5)

ParamByName('Heute').AsDateTime:= Date;
ParamByName('HeutePlus5').AsDateTime:= Date+5.0;
Heiko
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#4

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 07:14
Beim Auftragseingang wird das Datum in die SQL gespeichert.
Wo denn da genau? Welches Feld?

Zitat:
Mach ich das ganze schon bevor ich es in die Listbox lade? Also das Datum mit StrToDate ins Datumsformat bringen und vom aktuellen Datum abziehen?
Wieso StrToDate? Ist das Datum als String in der DB gespeichert?

Zitat:
Delphi-Quellcode:
     ID:=((SQLQuery1.Fields[0].AsString));
     a :=((SQLQuery1.Fields[2].AsString));
     p:=((SQLQuery1.Fields[3].AsString));
     e:=((SQLQuery1.Fields[9].AsString));
     s:=((SQLQuery1.Fields[15].AsString));
     v:=((SQLQuery1.Fields[11].AsString));
     pan:=((SQLQuery1.Fields[19].AsString));
Nebenbei: hier würde ich besser mit FieldByName anstatt Fields[] arbeiten.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 07:20
Du kannst beides machen. Hängt von der Benutzerführung + den Datenmengen ab. Wenn du rasch zwischen "innerhalb 5 Tagen", "innerhalb 3 Tagen" etc umschalten willst, ist es vielleicht besser, alle Datensätze zu laden und am Client zu filtern. Wenn das eine fixe Ansicht ist, ist es besser wie unten beschrieben, das am Server zu machen.

DATUM - HEUTE < 5 liefert dir auch die überfälligen.

Achtung auf NULL Werte, Off-by-one und Zeitanteile beim Datum.
  Mit Zitat antworten Zitat
ironman139

Registriert seit: 1. Nov 2013
24 Beiträge
 
#6

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 08:18
Leider hab ich noch ein kleines Verständnisproblem.

Das Datum wird in dem Feld Fertig gespeichert in meiner SQL Datenbank.


Code:
var
  ID,a,p,e,s,v,pan :string;
  datumop, datumheute :TDate;
begin

  datumheute := date;

  ListView1.Items.Clear;
    SQLTransaction1.commit;
       SQLQuery1.Close;
       SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE [Fertig] BETWEEN CURDATE() AND CURDATE()+5';

   SQLQuery1.Params.ParamByName('Fertig').AsString := datetostr(datumheute);
   SQLQuery1.Open;

    while not SQLQuery1.Eof do
             begin
     ID:=((SQLQuery1.Fields[0].AsString));
     a :=((SQLQuery1.Fields[2].AsString));
     p:=((SQLQuery1.Fields[3].AsString));
     e:=((SQLQuery1.Fields[9].AsString));
     s:=((SQLQuery1.Fields[15].AsString));
     v:=((SQLQuery1.Fields[11].AsString));
     pan:=((SQLQuery1.Fields[19].AsString));
     with ListView1.Items.Add do begin
      Caption:=ID;
      SubItems.Add(a);
      SubItems.Add(p);
      SubItems.Add(e);
      SubItems.Add(s);
      SubItems.Add(v);
      SubItems.Add(pan);
   end;
        SQLQuery1.Next;

end;

  Label7.Caption := IntToStr(ListView1.Items.Count);

end;
  Mit Zitat antworten Zitat
bcvs

Registriert seit: 16. Jun 2011
668 Beiträge
 
Delphi 12 Athens
 
#7

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 10:14
SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE [Fertig] BETWEEN CURDATE() AND CURDATE()+5';

SQLQuery1.Params.ParamByName('Fertig').AsString := datetostr(datumheute);
Wieso AsString? Ich hoffe, das Datum ist auch ein Datumsfeld in der DB.
Code:
SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE Fertig BETWEEN :Date1 AND :Date2';
SQLQuery1.Params.ParamByName('Date1').AsDateTime := date;
SQLQuery1.Params.ParamByName('Date2').AsDateTime := date + 5;
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 10:26
Die Kombination aus "Select *.." und indiziertem Feldzugriff sollte auf jeden Fall vermieden werden, sonst ist die Funktion ein Roulette Spiel.
Gruß, Jo
  Mit Zitat antworten Zitat
ironman139

Registriert seit: 1. Nov 2013
24 Beiträge
 
#9

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 10:27
SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE [Fertig] BETWEEN CURDATE() AND CURDATE()+5';

SQLQuery1.Params.ParamByName('Fertig').AsString := datetostr(datumheute);
Wieso AsString? Ich hoffe, das Datum ist auch ein Datumsfeld in der DB.
Code:
SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE Fertig BETWEEN :Date1 AND :Date2';
SQLQuery1.Params.ParamByName('Date1').AsDateTime := date;
SQLQuery1.Params.ParamByName('Date2').AsDateTime := date + 5;


Leider nein. Und nachträglich ändern wird warscheinlich schwer
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#10

AW: Auslesen von Daten / Rechnung mit Datum

  Alt 10. Mär 2020, 11:01

Leider nein. Und nachträglich ändern wird warscheinlich schwer
Gut, Du musst Dir überlegen, ob Du zukünftig bei jedem Datumszugriff aufwändige Klimmzüge machen möchtest oder lieber sauber und zuverlässig mit Datumstypen arbeiten willst.

Du kannst den Extraaufwand der nächsten Jahre gegen die Schmerzen einer sofortigen Umstellung berechnen.
Besonders wenn das System "jung" und "klein" ist, würde ich allerdings nicht lange nachdenken, sondern diese Umstellung auf Datumstypen für alle Tabellen planen und durchführen.
Gruß, Jo
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:07 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