Delphi-PRAXiS

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 10: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 10:22

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

manuel

LogoPie 15. Mär 2004 10: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 10: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 10: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 10: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 11: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 11: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 11: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 11: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.

shmia 15. Mär 2004 17:08

Re: Wiedervorlageliste
 
Zitat:

Zitat von Robert_G
@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.

I know. :wink:
Ich wollte damit sagen: "wozu prüfen, wieviele Datensätze vorhanden sind,
wenn ich diese Datensätze ohnehin in einem Grid darbieten möchte."
Dann ruft man doch gleich die gewünschte Datenmenge ab;
sollte diese leer sein ist nichts (*) verschwendet, sollten Datensätze
vorhanden sein, werden diese gleich angezeigt.

*) Statt einem Feld mit einem Datensatz würden mehrere Felder
mit keinem Datensatz übertragen. Ein geringer Overhead,
den man leicht in Kauf nehmen kann, zumal man eine Query einsparen kann.

Robert_G 15. Mär 2004 17:23

Re: Wiedervorlageliste
 
:wall:
Da hast du natürlich recht. Ich sollte mir angewöhnen, die Fragen genauer durchzulesen...

Union 18. Mär 2004 07:06

Re: Wiedervorlageliste
 
Wenn Du nur schnell prüfen willst, ob etwas in der Table mit dem entsprechenden Datum vorhanden ist, dann benutze doch eher eine TAdsTable.

Delphi-Quellcode:
tblWorkList.IndexName := 'Datum';
// Findkey ist 30% scheller als Locate
if tblWorkList.FindKey([now]) then
begin
   frmEdit.Show;
end;
bye

LogoPie 18. Mär 2004 14:55

Re: Wiedervorlageliste
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Leute

Hab mal den obigen Vorschlag ausprobiert, aber scheint nich wirklich
zu klappen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
     PageControl1.ActivePageIndex := 0; // zeigt Statusanzeige nach dem Programm start

     DM.TWiedervorlage.IndexName := 'VorlageDatum';
     if DM.TWiedervorlage.FindKey([now]) then
     begin
          Form4.showModal;
     end;
end;
Es erscheint diese Fehlermeldung.
Was mache ich falsch.

Union 18. Mär 2004 23:59

Re: Wiedervorlageliste
 
Hallo,

wo steht denn der Debugger, also in welcher Sourcezeile tritt der Fehler auf ? Mit der Adresse des fehler kann man ohne Mapfile nicht viel anfangen... Btw. hast Du einen Index der 'VorlageDatum' heisst ?

bye


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