Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Wiedervorlageliste (https://www.delphipraxis.net/18121-wiedervorlageliste.html)

LogoPie 15. Mär 2004 09:21


Wiedervorlageliste
 
Moin zusammen

Ich möchte beim Programm start also bei Form Create eine Datenbank abfrage machen.
Vielleicht gehört dieser eintrag ja auch zu den Datenbanken.
Nun denn, ich möchte eine Tabelle nach dem heutigen Datum durchsuchen.
Wenn Datensätze gefunden werden soll ein neues Form mit eben diesen Datensatz(sätze)
angezeit werden.
Auf dem Form befindet sich ein TDBCtrlGrid in dem die Daten angezeigt werden sollen.
Ich use eine ADS Datenbank.
MfG Pierre

manuel 15. Mär 2004 09:22

Re: Wiedervorlageliste
 
Und was genau ist die Frage :?:

manuel

LogoPie 15. Mär 2004 09:28

Re: Wiedervorlageliste
 
Nochmal, sobald ein Datensatz(sätze) das heutige Datum besizt soll
mein Form mit der TDBCrtlGrid angezeigt werden.
Wie mache ich das?

DP-Maintenance 15. Mär 2004 09:34

DP-Maintenance
 
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Das gehört aber woanders hin ;-)

Robert_G 15. Mär 2004 09:43

Re: Wiedervorlageliste
 
Der Code müsste mit einer ADOQuery laufen. Wieviel sich da bei beim ADS-Zeugs ändert weiß ich nicht.
Delphi-Quellcode:
With Query Do
Begin
  SQL.Text :=
    'SELECT Count(*)' + #10 +
    'FROM  X' + #10 +
    'WHERE Y = :i_DtNow';
  // Parse Statement um Variablen zu erkennen
  Prepared := True;
  // Parameterzuweisung
  With Parameters Do
    ParamByName('i_DtNow').DataType := ftDate;
    ParamByName('i_DtNow').Value := now();
  End;
  // Ausführen
  Open;

  If Not EOF and (Fields[0].asInteger > 0) Then
    [Mach dein Form auf];
End;

CenBells 15. Mär 2004 09:46

Re: Wiedervorlageliste
 
hallo,

für dein Vorhaben benötigst du nicht viel ;)

Schreibe eine Methode, die folgendermaßen arbeitet (beachte, du benötigst ein Query)

Delphi-Quellcode:
procedure testUndAnzeige;
begin
  deinQuery.Sql.text :=
    'SELECT Count(*)'#13#10 +
    ' FROM Tabelle'#13#10 +
    ' WHERE DeineSpalte = ' + QuotedStr(DateToStr(Now));
  deinQuery.Open;
  if (deinQuery.Fields[0].AsInteger > 0) then
    zeigeFormAn;
end;
//edit: mist zu langsam

Gruß
Ken

Robert_G 15. Mär 2004 10:50

Re: Wiedervorlageliste
 
komplett OT, muss aber mal gesagt werden: :roll:
Wie oft soll ich denn noch predigen, dass Datumsangaben nicht in den String des Statements gebastelt werden sollten!!!
Wenn deine DB einen String nach einem anderen Format umwandelt als das lokale Windows des Client, gibt es einen Fehler oder viel schlimmer: Es könnten Tag & Monat vertauscht werden.
Mit diesen Stringbasteleien macht man auch so geniale Erfindungen wie Cursor- & Statement- Cache vollkommen witzlos, da ja jedesmal der SQL Code geändert wird und nicht nur der Wert eines Parameters.
Diese beiden Features machen aber mitunter den enormen Geschwindigskeitszuwachs bei den großen & teuren DBs aus.
Das soll nicht heißen das kleine DBs damit nicht klarkommen, auch bei denen läuft es schneller, da bei mehrmaligem Aufrufen das Parsing des Statements entfällt.

shmia 15. Mär 2004 10:52

Re: Wiedervorlageliste
 
Zitat:

Zitat von LogoPie
Ich möchte beim Programm start also bei Form Create eine Datenbank abfrage machen.
Vielleicht gehört dieser eintrag ja auch zu den Datenbanken.
Nun denn, ich möchte eine Tabelle nach dem heutigen Datum durchsuchen.

Durchsuchen ist die falsche Technik.
Richtig ist Filtern.

Gefiltert wird mit SQL:
SQL-Code:
SELECT * FROM Worklist
WHERE Status=0 AND WorkDate=:WorkDate
Status=0 bedeutet: die Datensätze sind noch aktiv.
(Status=1 wäre "abgeschlossen", weitere Statuswerte sind denkbar)

Zitat:

Zitat von LogoPie
Wenn Datensätze gefunden werden soll ein neues Form mit eben diesen Datensatz(sätze)
angezeit werden.

Man muss nicht die Anzahl der Datensätze mit Count(*) abfragen,
sondern wir stellen die SQL-Anfrage und schauen, ob die Ergebnismenge
leer ist (.IsEmpty) oder nicht.
Delphi-Quellcode:
QryWorklist.Open;
if not QryWorklist.IsEmpty then
begin
   // zeige das Wiedervorlageformular an.
   FormWiedervorlage.ShowModal;
end;

CenBells 15. Mär 2004 10:56

Re: Wiedervorlageliste
 
Zitat:

Zitat von Robert_G
komplett OT, muss aber mal gesagt werden: :roll:
Wie oft soll ich denn noch predigen, dass Datumsangaben nicht in den String des Statements gebastelt werden sollten!!!
Wenn deine DB einen String nach einem anderen Format umwandelt als das lokale Windows des Client, gibt es einen Fehler oder viel schlimmer: Es könnten Tag & Monat vertauscht werden.
Mit diesen Stringbasteleien macht man auch so geniale Erfindungen wie Cursor- & Statement- Cache vollkommen witzlos, da ja jedesmal der SQL Code geändert wird und nicht nur der Wert eines Parameters.
Diese beiden Features machen aber mitunter den enormen Geschwindigskeitszuwachs bei den großen & teuren DBs aus.
Das soll nicht heißen das kleine DBs damit nicht klarkommen, auch bei denen läuft es schneller, da bei mehrmaligem Aufrufen das Parsing des Statements entfällt.

Hallo,
Hmm, wusste ich gar nicht. Ist das echt so?
Dann muss ich ja mal rangehen und alle statements in meinem Projekt dahingehend überarbeiten.

Gruß
Ken

Robert_G 15. Mär 2004 10:57

Re: Wiedervorlageliste
 
@Shmia
Eine Abfrage mit Count(*) wird vom Optimizer einer vernünftigen DB anders interpretiert als eine Abfrage, die die Daten der Tabelle(-n) darstellt.
Dein Open führt immer noch die komplette Abfrage aus, auch wenn du nicht durch die Ergebnismenge läufst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:33 Uhr.
Seite 1 von 2  1 2      

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