![]() |
Datenbank: MySQL • Version: 4.x • Zugriff über: Zeos
Abfrage nach Datum
Hallo Leute,
man merkt wohl, dass ich wieder hart am Arbeiten bin :wink: Die Frage wurde schon einige Male gestellt, habe die verschiedenen Varianten auch ausprobiert - geht aber immer noch nicht. Also folgende Abfrage:
Delphi-Quellcode:
geht nicht.
DecodeDate(DTPvon.date, Jahr, Monat, Tag);
sdatumvon:= inttostr(Jahr) + '-' + inttostr(Monat) + '-' + inttostr(Tag); query.SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE datum > ' + sdatumvon; Ebenso auch das hier:
Delphi-Quellcode:
Das Datum wird dabei überhaupt nicht berücksichtigt.
DecodeDate(DTPvon.date, Jahr, Monat, Tag);
sdatumvon:= inttostr(Jahr) + '-' + inttostr(Monat) + '-' + inttostr(Tag); DecodeDate(DTPbis.date, Jahr, Monat, Tag); sdatumbis:= inttostr(Jahr) + '-' + inttostr(Monat) + '-' + inttostr(Tag); query.SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE datum BETWEEN ' + sdatumvon + ' AND ' + sdatumbis; Mit
Delphi-Quellcode:
wird mir z.B. "15.05.2006" angezeigt. Sollte hier nicht eigentlich das Format YYYY-MM-DD verwendet werden? Und wenn ich das datum nicht umkodiere, sondern direkt "DTPvon.date" nehme, bekomme ich auch eine Fehlermeldung, diesmal, dass die SQL-Syntax nicht korrekt ist..
showmessage(query.Fieldbyname('datum').AsString);
Jetzt hab ich mal zum Test
Delphi-Quellcode:
eingegeben und nun werden mir alle Datensätze angezeigt, in denen das Datum leer ist..
query.SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE datum < ' + sdatumvon;
Irgendwie weiss ich nicht mehr weiter.. MfG davar |
Re: Abfrage nach Datum
Guten Morgen.
Wenn du mit Parametern arbeitest, dann vergisst du nicht deine Datum-Strings in Hochkommata einzupacken:
Delphi-Quellcode:
Grüße vom marabu
QuotedStr(sDatumVon)
|
Re: Abfrage nach Datum
Zitat:
|
Re: Abfrage nach Datum
Zitat:
Du solltest trotzdem lieber mit Parametern arbeiten. Das hat riesen Vorteile. |
Re: Abfrage nach Datum
Zitat:
Was für Vorteile bringen denn Parameter? Bis jetzt habe ich keinen Unterschied festgestellt und so wie ich es jetzt mache war es eigentlich bequemer für mich.. |
Re: Abfrage nach Datum
Zitat:
Mit Parametern sähe das einfach so aus:
Delphi-Quellcode:
begin
with Query do begin Close; SQL.Text := 'SELECT * FROM arbeitszeit WHERE datum BETWEEN :datumvon AND :datumbis'; ParamCheck := True; ParamByName('datumvon').AsDate := DTPvon.date; ParamByName('datumbis').AsDate := DTPbis.date; Open; end; end; |
Re: Abfrage nach Datum
Genau so
Delphi-Quellcode:
hab ich es jetzt gemacht, aber nun kommt die Meldung "Parameter 'kundennummer' nicht gefunden.' " Und genauso mit "datumvon", wenn ich "kundennummer" weglasse. Kann es sein, dass TZMySQLQuery anders mit Parametern umgeht als TQuery?
with query do
begin Close; SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE kundennummer = ' + querykunden.Fieldbyname('kundennummer').AsString + ' AND datum BETWEEN :datumvon AND :datumbis' ; ParamCheck:= true; ParamByName('datumvon').AsDate := DTPvon.date; ParamByName('datumbis').AsDate := DTPbis.date; Open; end; |
Re: Abfrage nach Datum
Hmmm ich arbeite ja auch mit den Zeos-Komponenten für den Zugriff auf mySQL. Ich würde es mal so versucben:
Delphi-Quellcode:
Aber noch eine andere Frage: Warum speicherst Du die Kundennummer in der Arbeitszeittabelle? Besser wäre doch die ID (PrimaryKey) als Referenz zu verwenden.
with query do
begin Close; SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE (kundennummer = :kundennummer) AND (datum BETWEEN :datumvon AND :datumbis)'; ParamCheck:= true; ParamByName('kundennummer').AsString := querykunden.Fieldbyname('kundennummer').AsString; ParamByName('datumvon').AsDate := DTPvon.date; ParamByName('datumbis').AsDate := DTPbis.date; Open; end; Ach ja, ist die "Kundennummer" ein String oder nur eine Zahl? Wenn eine Zahl könntest Du natürlich auch .AsInteger als Übergabeformat benutzen. |
Re: Abfrage nach Datum
Zitat:
Zitat:
Zitat:
|
Re: Abfrage nach Datum
Zitat:
|
Re: Abfrage nach Datum
Zitat:
@davar: Mach mal eine Update auf eine aktuelle Version von Zeos. Zitat:
@davar: Wird zum Kunden mehr als die Kundennummer gespeichert? Dann würde ich, wie Sharky schon geschrieben hat, die Daten normalisieren (alle Daten zu Kunden in eigene Tabelle) Oder ist die Kundennummer ein Fremdschlüsssel auf die Kundentabelle? Dann solltest du dir überlegen, der Kundentabelle einen künstlichen Primärschlüssel in Form einer ID( Integer) zu verpassen. (So das man die Kundennummer ändern könnte). Zitat:
|
Re: Abfrage nach Datum
Zitat:
Da es sich bei der Tabelle ARBEITSZEITEN um einen sogenannten Beziehungs-Datentyp (associative entity) handelt, sollten da wirklich nur Fremdschlüssel verwendet werden. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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 by Thomas Breitkreuz