AGB  ·  Datenschutz  ·  Impressum  







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

DateTimePicker

Ein Thema von Luca Haas · begonnen am 25. Sep 2017 · letzter Beitrag vom 26. Sep 2017
Antwort Antwort
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#1

DateTimePicker

  Alt 25. Sep 2017, 08:54
Hallo Leute,

und zwar habe ich folgendes Problem:

ich habe eine Tabelle in einem DBGrid und möchte mithilfe von zwei DateTimePickern (einer für den ersten Tag und einer für den Letzten) in meinem DBGrid filtern, dass nurnoch die Daten angezeigt werden, die im DBGrid so vorkommen. Ich versuche das ganze über ein OnChange Ereignis zu machen, weiß aber nicht so richtig, wie ich auf die Spalte Datum aus meinem Grid zugreifen kann.

Also beispielsweise sollen wenn die DateTimePicker auf 01.01.2017 und 31.01.2017 stehen sollen alle Ergebnisse aus dem Januar angezeigt werden

Geändert von Luca Haas (25. Sep 2017 um 11:04 Uhr)
  Mit Zitat antworten Zitat
hhcm

Registriert seit: 12. Feb 2006
Ort: Wegberg
309 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DateTimePicker

  Alt 25. Sep 2017, 10:04
Hallo,

du musst das dazugehörige Query. bzw. Table nutzen um die Daten zu filtern, nicht das DBGrid selbst.
Chris
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: DateTimePicker

  Alt 25. Sep 2017, 11:02
Moin,

was für eine Datenbank setzt Du denn ein?

Der Ablauf könnte so aussehen

1. DB schließen
2. neues SQL Statement mit den neuen Tages-Grenzen
3. DB wieder öffnen

und das ganz z. B. wenn der zweite DataTimePicker geändert wurde.
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: DateTimePicker

  Alt 25. Sep 2017, 11:03
Okay ich versuche das ganze jetzt so:
Delphi-Quellcode:
procedure TForm1.DateTimePicker3Change(Sender: TObject);
begin
  if CheckBox1.Checked = True then
    KST_LagerbewertungQuery.SQL := ('SELECT * FROM KST_Lagerbewertung' +
      'WHERE ''SollGeliefert'' BETWEEN DateTimePicker3 AND DateTimePicker4')
  else
    KST_LagerbewertungQuery.SQL := ('SELECT * FROM KST_Lagerbewertung' +
      'WHERE ''IstGeliefert'' BETWEEN DateTimePicker3 AND DateTimePicker4')
end;

procedure TForm1.DateTimePicker4Change(Sender: TObject);
begin
  if CheckBox1.Checked = True then
    KST_LagerbewertungQuery.SQL := ('SELECT * FROM KST_Lagerbewertung' +
      'WHERE ''SollGeliefert'' BETWEEN DateTimePicker3 AND DateTimePicker4')
  else
    KST_LagerbewertungQuery.SQL := ('SELECT * FROM KST_Lagerbewertung' +
      'WHERE ''IstGeliefert'' BETWEEN DateTimePicker3 AND DateTimePicker4')
end;
aber ich bekomme die Fehlermeldung
Code:
[dcc32 Fehler] Unit1.pas(161): E2010 Inkompatible Typen: 'TStrings' und 'string'
in den Zeilen mit else und end;

Geändert von Luca Haas (25. Sep 2017 um 11:12 Uhr)
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#5

AW: DateTimePicker

  Alt 25. Sep 2017, 11:06
@rokli ich benutze MS SQL

oh ich habe ganz vergessen zu schreiben, dass ich eine Checkbox habe, die je nachdem was ausgewählt eine Spalte in der Tabelle sucht also "IstGeliefert" und "SollGeliefert", welche ebenfalls beide DateTimePicker sind

Geändert von Luca Haas (25. Sep 2017 um 11:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: DateTimePicker

  Alt 25. Sep 2017, 11:19
Zwei Dinge:
  1. Benutze Parameter
  2. Übergebe nicht den Namen der DateTimePicker sondern den Wert der Komponente (z.B. Date)

Ich habe jetzt nicht die Syntax des MS SQL Servers im Kopf, also ohne Gewähr der Vollständigkeit:
Delphi-Quellcode:
KST_LagerbewertungQuery.SQL := 'SELECT * FROM KST_Lagerbewertung' +
       'WHERE ''SollGeliefert'' BETWEEN :Picker3 AND :Picker4';
KST_LagerbewertungQuery.ParamByName('Picker3').AsDateTime := DateTimePicker3.Date;
KST_LagerbewertungQuery.ParamByName('Picker4).AsDateTime := DateTimePicker4Date;
Möglicherweise musst du vor der Nutzung der Parameter noch den Typ festlegen.

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  Mit Zitat antworten Zitat
Luca Haas

Registriert seit: 23. Aug 2017
Ort: Bad Breisig
139 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: DateTimePicker

  Alt 25. Sep 2017, 11:29
Danke Mikhal,

ich musste noch, wie du dachtest, die Typen der Parameter festlegen und dann klappte es.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: DateTimePicker

  Alt 25. Sep 2017, 11:39
sehr hübsch, dass das jetzt klappt
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
galex9

Registriert seit: 3. Nov 2006
17 Beiträge
 
#9

AW: DateTimePicker

  Alt 25. Sep 2017, 17:15
Hallo,
ist es nicht einfacher Filter zu nutzen?

Code:
KST_LagerbewertungQuery.Filter:= 'SollGeliefert <= '
  + QuotedStr(DateToStr(DateTimePicker3.Date))
  + ' and SollGeliefert <= ' + QuotedStr(DateToStr(DateTimePicker4.Date));
KST_LagerbewertungQuery.Filtered := True;
Dann musst du die Daten nicht noch mal von DB holen.

Gruß
Galex
  Mit Zitat antworten Zitat
Benutzerbild von mikhal
mikhal

Registriert seit: 11. Sep 2003
Ort: Linz am Rhein
796 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: DateTimePicker

  Alt 26. Sep 2017, 08:31
Du musst zwar nicht die Daten erneut von der Datenbank abrufen, aber es gibt da wieder andere Probleme:
  • Filtern funktioniert nur, wenn eine vollständige Datenmenge im Vorfeld abgerufen wurde, weil es sich um eine lokale Filterung handelt. Aber wer ruft im Extremfall schon Tausende, wenn nicht Millionen Datensätze ab?
  • Die Darstellung des Datums ist von Datenbank zu Datenbank verschieden, beim SQL Server, wenn ich mich irre, mm/dd/yyyy. In deinem Beispiel klappt das schon nicht mehr!

Grüße
Mikhal
Michael Kraemer
Computer erleichtern die Arbeit...
...und die Erde ist eine Scheibe!
  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 14:16 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