AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere Tage
Thema durchsuchen
Ansicht
Themen-Optionen

SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere Tage

Ein Thema von nachtstreuner · begonnen am 15. Apr 2006 · letzter Beitrag vom 15. Apr 2006
Antwort Antwort
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#1

SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere Tage

  Alt 15. Apr 2006, 17:44
Datenbank: Absolute Database • Version: 5.04 • Zugriff über: ABS.Query Komponente
Hallo !

Ich möchte mit einer SQL-Abfrage alle Datensätze haben, die zwischen vonDatum vonZeit und bisDatum bisZeit liegen.

Im Formular gibt es 6 Eingabemöglichkeiten:

vonDatum : DateTimePicker
bisDatum : dateTimePicker

vonDatumVonZeit : maskEdit liefert einen String
vonDatumBisZeit : maskEdit ....

bisDatumVonZeit : maskEdit ....
bisDatumBisZeit : maskEdit ....

in der Datenbank habe ich ein Feld Datum Typ Date und ein Feld ZEIT typ String.

Wie müsste der SQL Befehl aussehen, damit ich alle Datensätze erhalte, die zwischen dem

03.03.2006 / 02:00:00 Uhr und dem
04.03.2006 / 03:00:00 Uhr liegen ?

Ich habe es folgendermassen probiert :
Delphi-Quellcode:
SQL_TEXT := SQL_TEXT +
       ' Where (DATUM >= :voDatum and Zeit >=:vonZeit) '+
       'and (DATUM <= :biDatum and ZEIT <=:bisZEIT)';
       cxMemo.Lines.Add(SQL_TEXT);
       ABSQuery.SQL.Add(SQL_TEXT);
       with ABSQuery.Params do begin
            ParamValues['voDatum'] :=DateToStr(vonDatum.Date);
            ParamValues['vonZeit'] :=edVonDatvonZeit.Text;
            //ParamValues['vonLeer'] :='23:59:59';
            ParamValues['biDatum'] :=DateToStr(bisDatum.Date);
            //ParamValues['bisLeer'] :='00:00:00';
            ParamValues['bisZEIT'] :=edbisDatbisZeit.Text;
       end;
Hier erhalte ich aber nur Datensätze, die vom 03.04.2006 ab 02:00:00 bis 03:00:00 liegen.
Was stimmt hier nicht ?
Alles wird gut -
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 18:24
Also es bei deiner Konstellation nicht so einfach möglich, das erwünscht Egebnis zu erzielen. Wäre Datum und Unrzeit in einem datetime-Fels würde eine einfache between-Bedingung ausreichen:
...Where (DATUM between :voDatum and :bisDatum ) So mußt du aber deine Abfrage in 3 Schritten ausführen:
1.) Termine am Starttag von StartZeit bis 24:00
2.) Termine zwischen vondatum +1 bis bisDatum -1
2.) Termine am Endtag von 0:00 - EndZeit.

SQL-Code:
...Where ( DATUM = :vonDatum AND ZEIT >= :vonZeit) union ...
  (DATUM between :voDatum2 and :bisDatum2 ) union ...
  ( DATUM = :bisDatum AND ZEIT <= :bisZeit)
Markus Kinzler
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#3

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 18:52
Vielen Dank für die rasche Antwort, leider habe ich von SQL noch nicht allzu viel am Hut.
Deswegen meine Frage was genau bewirkt union ?
Alles wird gut -
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 18:55
Hi!

Vielleicht hilft dir dann das hier weiter:
http://www.aspheute.com/artikel/20011015.htm


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 18:55
union vereinigt mehrere Abfragen zu einer Ergebnismenge:

z.B.

Tabelle1
Name Vorname
Müller Hans
Maier Peter

Tabelle2
Name Vorname
Schmitt Susi

Select name, vorname from tabelle1 union select name, vorname from tabelle2; Ergebnis:
Name Vorname
Müller Hans
Maier Peter
Schmitt Susi
Markus Kinzler
  Mit Zitat antworten Zitat
marabu

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

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 19:31
Hallo.

Auf Intervallbildung und Mengenvereinigung kann vielleicht verzichtet werden, wenn man ein etwas komplexeres SQL-Statement in Kauf nimmt. Immerhin kennt ABS laut Handbuch die Funktionen TODATE(), TOSTRING() und CAST(). Aber um die ursprüngliche Frage nochmal aufzugreifen:

Zitat von nachtstreuner:
Was stimmt hier nicht ?
Der Feldtyp für die Zeitangabe ist einfach falsch gewählt - ich hätte wahrscheinlich DATETIME genommen.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#7

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 20:12
Vielen Dank mKinzler und fKerber,

Habe es nun mit union versucht, hier der Code :

Delphi-Quellcode:
SQL_TEXT := SQL_TEXT +
       ' Where (DATUM = :voDatum and Zeit >= :vonZeit) union'+
       ' (DATUM between :voDATUM2 and :biDATUM2) union '+
       'and (DATUM = :biDatum and ZEIT <= :bisZEIT)';
       cxMemo.Lines.Add(SQL_TEXT);
       ABSQuery.SQL.Add(SQL_TEXT);
       with ABSQuery.Params do begin
            ParamValues['voDatum'] :=DateToStr(vonDatum.Date);
            ParamValues['vonZeit'] :=edVonDatvonZeit.Text;
            ParamValues['voDatum2'] :=DateToStr(vonDatum.Date +1);
            ParamValues['biDatum'] :=DateToStr(bisDatum.Date);
            ParamValues['biDatum2'] :=DateToStr(bisDatum.Date -1);
            ParamValues['bisZEIT'] :=edbisDatbisZeit.Text;
       end;
Hier erhalte ich allerdings folgende Fehlermeldung ?

Im Projekt .... ist eine Exception der Klasse EABSException aufgetreten.
Meldung : "Token 'Select' expected , but 'Datum' at line 1, column 79 - Native Error 30194 !

Hängt das etwa mit dem WOrt Datum zusammen, vielleicht ein reserviertes Wort ?
Alles wird gut -
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 20:19
Das UNION vereinigt meherere SQL-Statements deshalb mußt du nach dem Union das 'Select ...where ' wiederholen.( siehe auch allg. Bsp von mir oben)
Markus Kinzler
  Mit Zitat antworten Zitat
nachtstreuner

Registriert seit: 21. Aug 2005
Ort: ESA
104 Beiträge
 
Delphi XE2 Professional
 
#9

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 20:44
Hallo zusammen und besten Dank an alle hier, es hat geklappt !!

Nach dem letzten Hinweis von mKinzler
Zitat:
Das UNION vereinigt meherere SQL-Statements deshalb mußt du nach dem Union das 'Select ...where ' wiederholen.( siehe auch allg. Bsp von mir oben)
hat es nun funktioniert.

Hier das Ergebnis des geänderten Codesnippet für alle die sowas ähnliches suchen
Delphi-Quellcode:
SQL_TEXT :=
       'SELECT * from nLeerscan ' +
       ' Where (DATUM = :voDatum and Zeit >= :vonZeit) union'+
       ' (Select * from nLeerscan where DATUM between :voDATUM2 and :biDATUM2) union '+
       ' (Select * from nLeerscan where DATUM = :biDatum and '+
       'ZEIT <= :bisZEIT) order by Datum , Zeit';
       cxMemo.Lines.Add(SQL_TEXT);
       ABSQuery.SQL.Add(SQL_TEXT);
       showmessage(absQuery.sql.text);
       with ABSQuery.Params do begin
            ParamValues['voDatum'] :=DateToStr(vonDatum.Date);
            ParamValues['vonZeit'] :=edVonDatvonZeit.Text;
            ParamValues['voDatum2'] :=DateToStr(vonDatum.Date +1);
            ParamValues['biDatum'] :=DateToStr(bisDatum.Date);
            ParamValues['biDatum2'] :=DateToStr(bisDatum.Date -1);
            ParamValues['bisZEIT'] :=edbisDatbisZeit.Text;
       end;
Mein Problem ist hiermit gelöst, habt nochmals Dank! PS: Als Neuling vielleicht noch eine Frage, muß ich den Thread hier nun schließen ? Oder was muß ich jetzt tun, damit dieser thread geschlossen wird ?
Alles wird gut -
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#10

Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere

  Alt 15. Apr 2006, 21:20
Hi!

[quote="nachtstreuner"]Mein Problem ist hiermit gelöst, habt nochmals Dank! PS: Als Neuling vielleicht noch eine Frage, muß ich den Thread hier nun schließen ? Oder was muß ich jetzt tun, damit dieser thread geschlossen wird ? quote]

Es bleibt einfach alles so wie es ist. So können auch andere, die noch ne Frage dazu haben, etwas hier in den Thread posten.
Nur, wenn du eine Frage als "offen" markiert hast, dann solltest du diese Markierung nach Beantwortung der Frage entfernen.

Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:29 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