Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi wie kann ich 2 datumpicker in eine sql abfrage einbauen ??? (https://www.delphipraxis.net/9420-wie-kann-ich-2-datumpicker-eine-sql-abfrage-einbauen.html)

schniede 26. Sep 2003 00:48


wie kann ich 2 datumpicker in eine sql abfrage einbauen ???
 
So in der art:

liste alle daten von datum.picker1 bis datum.picker2 auf.

So klapt es mit einem Picker,warum frag ich mich selber :-)).Kann mit Like nichts anfangen habe es aus einem Buch.

var

date1,date2: string;
begin
date1:=datetostr(vonpicker.date);

query1.sql.Clear;
query1.sql.add(format('select * from langzeittabelle where Datum like "%s"',[date1]));
query1.open;


mfg schniede

Leuselator 26. Sep 2003 00:55

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Also sag doch mal:
1. welche Datenbank
2. Welchen Typ haben Deine Datumswerte in der Datenbank? (sollte unbedingt ein Datumsformat sein!)

wenn Feld Datum vom Typ dateTime oder date ist sollte es so gehen:
Delphi-Quellcode:
begin
  query1.sql.clear;
  whith query1.sql do begin
    add('select *              ');
    add(' from langzeittabelle');
    add(' where datum >='+QuotedStr(DateToStr(trunc(vonpicker.datetime)))); // Parameter "hart" in die Query geschrieben
    add('  and datum <='QuotedStr(DateToStr(trunc(bispicker.datetime))));
  end;
  query1.open;
end;
oder:

Delphi-Quellcode:
begin
  query1.sql.clear;
  whith query1.sql do begin
    add('select *              ');
    add(' from langzeittabelle');
    add(' where datum >=:Von  '); // Parameter1 "Von" erzeugt
    add('  and datum <=:Bis  '); // Parameter1 "Bis" erzeugt
  end;
  query1.prepare;
  query1.ParamByName('Von').AsDateTime := trunc(vonpicker.datetime);
  query1.ParamByName('Bis').AsDateTime := trunc(bispicker.datetime);
  query1.open;
end;
Unterschied der 2. Variante: Du kannst den Querytext statisch zur Entwurfszeit in der TQuery-Komponente im Objektinspektor formulieren
und die Parameter dynamisch zur Laufzeit ersetzen.
Welche Variante Du benutzt hängt von Deinen Zielen ab...
Grüße

schniede 26. Sep 2003 10:02

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Danke für die schnelle Antwort.

1. Paradox Tabelle
2.Feldtyp in der Tabelle ist date.

Ist mein erster Versuch mit query ,deshalb alles ein bischen bömische dörfer :-).

Werd es mal mit der 1. Variante probieren.

Noch mal zum Sinn:möchte mir daten von bestimmten zeiträumen anzeigen lassen(wähle ich vorher aus per radiogroup [tag , von - bis ,oder monat]) , und mit diesen daten bestimmte Berechnungen durchführen.

vieleicht kannst du mir noch mal schreiben wie ich es anstelle daten von Monat xyz zeigen zu lassen welchen ich vorher mit einer combobox
auswähle und per index den monat anzeigen lasse.

also index:=0 entspricht januar;

Danke !!!

Sharky 26. Sep 2003 10:22

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Hai schniede,

für das Auswählen in einem Datumsbereich bietet sich die SQL Funktion BETWEEN an.

SQL-Code:
SELECT * FROM tabelle WHERE datum BETWEEN datum1 AND datum2
Bei dir dann:

Delphi-Quellcode:
begin
  whith query1.sql do
   begin
    clear;
    add('SELECT * FROM tabelle WHERE datum BETWEEN');
    add(QuotedStr(DateToStr(trunc(vonpicker.datetime))));
    add('AND 'QuotedStr(DateToStr(trunc(bispicker.datetime))));
  end;
  query1.open;
end;

Für das Filtern nach Monat gibt es die SQL-Funktion DATEPART

SQL-Code:
SELECT * FROM tabelle WHERE DATEPART (mm,datum) = monat
Delphi-Quellcode:
begin
  whith query1.sql do
   begin
    clear;
    add('SELECT * FROM tabelle WHERE DATEPART (mm,datum) = ');
    add (IntToStr (combobox1.itemindex + 1));
  end;
  query1.open;
end;
Hier solltest Du aber auch das Jahr berücksichtigen!!

Tonic1024 26. Sep 2003 11:28

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Moin...


Mit dem Between währe ich vorsichtig. Kommt ganz darauf an ob der wert in "datum1" und "datum2" auch mit erfasst werden soll... Ich glaube nämlich die sind dann nicht dabei...Ich würde "< and >" nehmen.

Frei nach dem Motto: Nenne mir einen Integer-Wert zwischen 12 und 13... :shock: da wird die Wahl auch schon eng... :-D

bis denne...

Sharky 26. Sep 2003 11:46

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Zitat:

Zitat von Tonic1024
...
Mit dem Between währe ich vorsichtig. Kommt ganz darauf an ob der wert in "datum1" und "datum2" auch mit erfasst werden soll... Ich glaube nämlich die sind dann nicht dabei...Ich würde "< and >" nehmen.
....


Zitat:

Zitat von MS-SQL Hilfe
...
BETWEEN liefert TRUE zurück, wenn der Wert von test_expression größer oder gleich dem Wert von begin_expression und kleiner oder gleich dem Wert von end_expression ist.
....


Tonic1024 26. Sep 2003 11:54

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Moin...

Okay... dann war das woanders... :) Aber es gibt dieses Phänomen :warn:

Danke für die Korrektur. :love:

bis denne...

Sharky 26. Sep 2003 12:00

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Zitat:

Zitat von Tonic1024
...Danke für die Korrektur. :love:
...

Hai Tonic,

sollte ja keine Korrektur sein sondern ein Hinweiss. Es ist aber richtig das Du darauf hingewiesen hast.
Es kann ja auch sein das PARADOX oder andere DB-Systeme es anders machen (obwohl das nicht sein sollte).

schniede 26. Sep 2003 14:05

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Hy

Ich danke euch allen,auch wenn ich nicht alles versteh was ihr so schreibt.
sag euch auf alle Fälle bescheid,werd es schon irgendwie gebacken kriegen.

:roll: Danke ,Danke, Danke !!!


P.S. ist das mit dem beetwin nun ok oder nicht???grübel.

mfg schniede

schniede 26. Sep 2003 20:35

Re: wie kann ich 2 datumpicker in eine sql abfrage einbauen
 
Hallo sharky!!



Sieht gut aus nur funzt es leider nicht.


with query1.sql do
begin
clear;
add('SELECT * FROM langzeittabelle WHERE DATEPART (mm,datum) = ');
add (IntToStr (monatsbox.itemindex + 1));
end;
query1.open;


Ein bde exeption meldet mir "Merkmal nicht verfügbar",was auch immer das heißen soll??
Kannst du vieleicht noch mal schauen was da falsch sein könnte und das Jahr auch noch
mit implementieren.


das von -bis problem hab ich in den griff bekommen.

So funzt es.

with query1.sql do
begin
clear;
add('SELECT * FROM langzeittabelle WHERE DATEPART (mm,datum) = ');
add (IntToStr (monatsbox.itemindex + 1));
end;
query1.open;


mfg schniede ,Ihr habt mir echt schon toll geholfen!!!!! :lol: :lol: :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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