![]() |
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 |
Re: Wiedervorlageliste
Und was genau ist die Frage :?:
manuel |
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
Dieses Thema wurde von "sakura" von "Programmieren allgemein" nach "Datenbanken" verschoben.
Das gehört aber woanders hin ;-) |
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; |
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:
//edit: mist zu langsam
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; Gruß Ken |
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. |
Re: Wiedervorlageliste
Zitat:
Richtig ist Filtern. Gefiltert wird mit SQL:
SQL-Code:
Status=0 bedeutet: die Datensätze sind noch aktiv.
SELECT * FROM Worklist
WHERE Status=0 AND WorkDate=:WorkDate (Status=1 wäre "abgeschlossen", weitere Statuswerte sind denkbar) Zitat:
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; |
Re: Wiedervorlageliste
Zitat:
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 |
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 14:21 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