AGB  ·  Datenschutz  ·  Impressum  







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

Abfrage nach Datum

Ein Thema von davar · begonnen am 27. Mai 2006 · letzter Beitrag vom 27. Mai 2006
Antwort Antwort
Seite 1 von 2  1 2      
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#1

Abfrage nach Datum

  Alt 27. Mai 2006, 08:18
Datenbank: MySQL • Version: 4.x • Zugriff über: Zeos
Hallo Leute,

man merkt wohl, dass ich wieder hart am Arbeiten bin

Die Frage wurde schon einige Male gestellt, habe die verschiedenen Varianten auch ausprobiert - geht aber immer noch nicht.

Also folgende Abfrage:

Delphi-Quellcode:
DecodeDate(DTPvon.date, Jahr, Monat, Tag);
sdatumvon:= inttostr(Jahr) + '-' + inttostr(Monat) + '-' + inttostr(Tag);

query.SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE datum > ' + sdatumvon;
geht nicht.

Ebenso auch das hier:

Delphi-Quellcode:
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;
Das Datum wird dabei überhaupt nicht berücksichtigt.

Mit
showmessage(query.Fieldbyname('datum').AsString); 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..


Jetzt hab ich mal zum Test
query.SQL.text:= 'SELECT * FROM `arbeitszeit` WHERE datum < ' + sdatumvon; eingegeben und nun werden mir alle Datensätze angezeigt, in denen das Datum leer ist..

Irgendwie weiss ich nicht mehr weiter..

MfG

davar
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 08:27
Guten Morgen.

Wenn du mit Parametern arbeitest, dann vergisst du nicht deine Datum-Strings in Hochkommata einzupacken:

QuotedStr(sDatumVon) Grüße vom marabu
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 08:47
Zitat von marabu:
Guten Morgen.

Wenn du mit Parametern arbeitest, dann vergisst du nicht deine Datum-Strings in Hochkommata einzupacken:

QuotedStr(sDatumVon) Grüße vom marabu
Das ist es gewesen. Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 08:50
Zitat von davar:
... Das ist es gewesen. Danke!
Hai davar,

Du solltest trotzdem lieber mit Parametern arbeiten. Das hat riesen Vorteile.
Stephan B.
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 09:01
Zitat von Sharky:
Du solltest trotzdem lieber mit Parametern arbeiten. Das hat riesen Vorteile.
Hab ich vorhin versucht, hab aber eine Fehlermeldung bekommen. Bin dann davon ausgegangen, dass Zeos nicht so mit Parametern umgeht wie die normale TQuery-Komponente.

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..
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 09:11
Zitat von davar:
... Was für Vorteile bringen denn Parameter? ...
Einer der Vorteile ist das Du dich nicht darum kümmern musst das die Daten im richtigen Format zum Server kommen. Gerade bei DateTime-Feldern musst Du ja, wenn Du es als String übergibst, immer wissen wie die Datenbank das Datum haben möchte.
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;
Stephan B.
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 09:27
Genau so
Delphi-Quellcode:
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;
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?
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 09:34
Hmmm ich arbeite ja auch mit den Zeos-Komponenten für den Zugriff auf mySQL. Ich würde es mal so versucben:

Delphi-Quellcode:
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;
Aber noch eine andere Frage: Warum speicherst Du die Kundennummer in der Arbeitszeittabelle? Besser wäre doch die ID (PrimaryKey) als Referenz zu verwenden.
Ach ja, ist die "Kundennummer" ein String oder nur eine Zahl? Wenn eine Zahl könntest Du natürlich auch .AsInteger als Übergabeformat benutzen.
Stephan B.
  Mit Zitat antworten Zitat
davar

Registriert seit: 4. Feb 2005
311 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 09:56
Zitat von Sharky:
Hmmm ich arbeite ja auch mit den Zeos-Komponenten für den Zugriff auf mySQL. Ich würde es mal so versucben:

Delphi-Quellcode:
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;
Nein, auch so hilft es nicht. Bin schon kurz davor, das Arbeiten mit Parametern aufzugeben. Immer noch die gleiche Fehlermeldung.

Zitat von Sharky:

Aber noch eine andere Frage: Warum speicherst Du die Kundennummer in der Arbeitszeittabelle? Besser wäre doch die ID (PrimaryKey) als Referenz zu verwenden.
Es werden die Arbeitszeiten von mehreren Kunden erfasst und es gibt eine Spalte für die Mitarbeiternummer, damit man mit den selben Daten die Arbeitszeit der Mitarbeiter ermitteln kann.

Zitat von Sharky:
Ach ja, ist die "Kundennummer" ein String oder nur eine Zahl? Wenn eine Zahl könntest Du natürlich auch .AsInteger als Übergabeformat benutzen.
Hab ich auch als Integer versucht, aber daran liegt es auch nicht..
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

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

Re: Abfrage nach Datum

  Alt 27. Mai 2006, 10:03
Zitat von davar:
... Kann es sein, dass TZMySQLQuery anders mit Parametern umgeht als TQuery?
Mit welcher Zeos-Version arbeitest Du denn? Bei mir heisst die Zeos-Query-Klasse: TZQuery.
Stephan B.
  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 19:51 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