![]() |
AW: Auslesen von Daten / Rechnung mit Datum
Da das ja eine starre Abfrage zu sein scheint (immer 5 Tage Vorschau) dann würde ich da nicht mit Parametern arbeiten sondern mit einem reinen SQL-Statement, das wenn nötig zusätzlich das Datum von einem String in ein Datum umwandelt, also:
SQL-Code:
"ConvertiereInDatum" steht für eine entsprechende Funktion deiner Datenbank, konnte jetzt nicht finden, was ihr einsetzt. Könnte z.B. "Convert" in MS SQL sein, TO_DATE in Oracle, usw.SELECT * FROM Print_Auftrag WHERE ConvertiereInDatum(Fertig) BETWEEN CURDATE() AND CURDATE()+5 Dann würde ich mir das ganze geraffel mit den Variablen schenken, da die eh nur aus einem Buchstaben bestehen, der nix erklärt hat das keinen Mehrwert. Wenn man das "With" mal drin läßt, fände ich sowas lesbarer:
Delphi-Quellcode:
Und last but not least würde ich für so eine "abgeschlossene" Funktion nicht eine Query verwenden, die ich eh gerade auf dem Form rumliegen habe und so wieder verwende sondern ich würde mir innerhalb der Prozedur eine Query erzeugen, SQL zuweisen, ausführen, Query wieder freigeben.
with ListView1.Items.Add do begin
Caption:=SQLQuery1.FieldByName('ID').AsString; SubItems.Add(SQLQuery1.FieldByName('Irgendwas').AsString); //usw. |
AW: Auslesen von Daten / Rechnung mit Datum
Ok dann werde ich mich mal damit befassen wie ich das umstellen kann.
So sieht jetzt mein Code sehr unschön aus, das müsste ich jetzt noch 4 mal wiederholen für -4, -3,...
Code:
begin
datumheute := date; datumheute := IncDay(datumheute, -5); ListView1.Items.Clear; SQLTransaction1.commit; SQLQuery1.Close; SQLQuery1.SQL.Text := 'SELECT * FROM Print_Auftrag WHERE Ferig LIKE :Fertig'; SQLQuery1.Params.ParamByName('Fertig').AsString := DateToStr(datumheute); SQLQuery1.Open; while not SQLQuery1.Eof do begin with ListView1.Items.Add do begin Caption:=(SQLQuery1.Fields[0].AsString); SubItems.Add(SQLQuery1.Fields[2].AsString); SubItems.Add(SQLQuery1.Fields[3].AsString); SubItems.Add(SQLQuery1.Fields[9].AsString); SubItems.Add(SQLQuery1.Fields[15].AsString); SubItems.Add(SQLQuery1.Fields[11].AsString); SubItems.Add(SQLQuery1.Fields[19].AsString); end; SQLQuery1.Next; end; |
AW: Auslesen von Daten / Rechnung mit Datum
Zitat:
Zitat:
Die 5-malige Wiederholung von Code ist natürlich möglich, aber eine denkbar schlechte Variante. Jumpy hat 2 weiter oben erklärt wie es ohne Parameter geht. |
AW: Auslesen von Daten / Rechnung mit Datum
Zitat:
OK. die Variablen sind schon draußen. Ich verwende eine MariaDB 10 Für die MariaDB ist die Konvertierung TO_DATE oder STR_TO_DATE. In den ganzen Beispielen ist das Str Datum aber anderst getrennt (05-03-2020) bei mir ist es aber durch Punkte getrennt. Ich glaube es führt kein weg vorbei das Format auf Date zu stellen. Dazu in phpMyAdmin einfach das Format für die Spalte ändern? Und meinen Code anpassen ? Momentan setze ich mit einem DateTimePicker das Datum in ein Edit Feld und schreib dieses dann in die Datenbank. Das System selber programmier ich bereits seit 2 Jahren. Die Datenbank enthält 6000 Aufträge. Daher sollte es halbwegs reibungslos funktionieren. |
AW: Auslesen von Daten / Rechnung mit Datum
Bei str_to_date solltest du als 2. Parameter angeben, in welchem Format dein Datum in dem String vorliegt. Hier mal mein erster Google Treffer dazu:
![]() also str_to_date(Fertig, "%d.%m.%Y") |
AW: Auslesen von Daten / Rechnung mit Datum
Zitat:
Wenn schon ein Datum als Text dann wenigstens das ISO-Format (2020-02-02 = 20.Februr 2020!) Gruß K-H |
AW: Auslesen von Daten / Rechnung mit Datum
Zitat:
ISO: YYY-MM-TT |
AW: Auslesen von Daten / Rechnung mit Datum
Zitat:
|
AW: Auslesen von Daten / Rechnung mit Datum
:oops: die Batterie war leer...:P
|
AW: Auslesen von Daten / Rechnung mit Datum
Im übrigen kannst du folgendes machen
Code:
Kontrollieren ob die Datumsfelder richtig sind
// Neues Feld anlegen
ALTER TABLE Print_Auftrag ADD COLUMN Fertig_neu DATETIME NULL DEFAULT NULL; // Daten von Fertig in Fertig_Neu konvertieren UPDATE Print_Auftrag SET Fertig_Neu = STR_TO_DATE(Fertig, "%d.%m.%Y");
Code:
Jetzt musst nur "nur" noch deinen Code anpassen. .AsString geht immer noch, sieht nur anders aus.
// Altes Feld löschen
ALTER TABLE Print_Auftrag DROP COLUMN Fertig; // Neues Feld in alten Feldnamen umbenennen ALTER TABLE Print_Auftrag CHANGE COLUMN Fertig_neu Fertig DATETIME NULL DEFAULT NULL; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:31 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