Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schleife zum aktivieren von Queries (https://www.delphipraxis.net/135419-schleife-zum-aktivieren-von-queries.html)

f4k3 10. Jun 2009 14:44

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS

Schleife zum aktivieren von Queries
 
Moin Moin liebe DPler ;)

hab folgendes Problem und versteh die Logik momentan grad nicht :P

Also ich hab eine Routine geschrieben die mir meine Komponenten vom Typ TZQuery (ZEOS) aktiviert.
Da ich zwei Queries habe die ich von der Aktivierung auschliessen möchte, überprüfe ich den
Namen der Komponenten ... ich post euch mal meinen Code ...

Delphi-Quellcode:
...
for I := 0 to frmMain.ComponentCount - 1 do
begin
  // Überprüfen ob Komponente vom Typ "TZQuery"
  if frmMain.Components[I] is TZQuery then
  begin
    // >>>>>>>>>>>>>>>> Hier passiert die Überprüfung <<<<<<<<<<<<<<<<<
    if ((frmMain.Components[I] as TZQuery).Name <> 'qryB') OR
       ((frmMain.Components[I] as TZQuery).Name <> 'qryK') then
    begin
       // Log: Versuch Query zu aktivieren
       frmDbProgress.mLog.Lines.Append('Query "' + (frmMain.Components[I] as TZQuery).Name +
                                       '" wird versucht zu aktivieren ...');

       // Query aktivieren
       try
         (frmMain.Components[I] as TZQuery).Active := True;
         frmDbProgress.mLog.Lines.Append('Query "' + (frmMain.Components[I] as TZQuery).Name +
                                         '" wurde erfolgreich aktiviert ...');
         frmDbProgress.prgDb.StepIt;
         except on E: Exception do
           begin
             Cursor := crDefault;
             // Fehlermeldung ausgeben
             frmDbProgress.mLog.Lines.Append('Query "' + (frmMain.Components[I] as TZQuery).Name +
                                            '" konnte nicht aktiviert werden ...');
             // Errors um 1 erhöhen
             Inc(Errors);
         end;
       end;
    end;
  end;
end;
...
Die besagten Queries sind "qryB" und "qryK" ...

// >>>>>>>>>>>>>>>> Hier passiert die Überprüfung <<<<<<<<<<<<<<<<< ...
kennzeichnet den Teil in dem die Überprüfung stattfindet :P

Der teil dieses Codes wird im AfterConnect Event der Connection ausgeführt ... nur so als info am rande ;)

DeddyH 10. Jun 2009 15:51

Re: Schleife zum aktivieren von Queries
 
Zitat:

Delphi-Quellcode:
if ((frmMain.Components[I] as TZQuery).Name <> 'qryB') OR
       ((frmMain.Components[I] as TZQuery).Name <> 'qryK') then

Der nachfolgende Code wird immer ausgeführt, hab ich recht?

himitsu 10. Jun 2009 16:27

Re: Schleife zum aktivieren von Queries
 
Delphi-Quellcode:
if (Name <> 'qryB') OR (Name <> 'qryK') then
Name ist niemals mit beiden Strings gleich ... es kann ja immer nur einen Wert gleichzeitig annehmen :angel:

eventuell wolltest du AND verwenden?

DeddyH 10. Jun 2009 16:33

Re: Schleife zum aktivieren von Queries
 
Spielverderber :stupid:, ich wollte mal sehen, ob er selbst drauf kommt.

mirage228 10. Jun 2009 16:36

Re: Schleife zum aktivieren von Queries
 
Um das ganze flexibler zu gestalten, könntest Du ja einfach eine bestimmte Zahl als Delphi-Referenz durchsuchenTag an die Komponente zuweisen. Damit sparst Du die lästigen String-Vergleiche (und Probleme wenn du den Namen änderst).

Viele Grüße

himitsu 10. Jun 2009 16:38

Re: Schleife zum aktivieren von Queries
 
es muß ja nichtmal das AND sein ... immerhin kann man auch was mit den <> machen :nerd:

f4k3 11. Jun 2009 14:03

Re: Schleife zum aktivieren von Queries
 
Zitat:

Zitat von DeddyH
Der nachfolgende Code wird immer ausgeführt, hab ich recht?

Damit hast du recht ja ...

nur ich versteh es irgendwo nicht ... step by step ...

Delphi-Quellcode:
if frmMain.Components[I] is TZQuery then
Ich überprüfe ob die aktuelle Componente vom Typ TZQuery ist ...

Delphi-Quellcode:
if ((frmMain.Components[I] as TZQuery).Name <> 'qryB') or
   ((frmMain.Components[I] as TZQuery).Name <> 'qryK') then
Dann überprüfe ich ob der Name der Komponente ungleich "qryB" oder ungleich "qryK" ist ...
da immer nur das eine oder dass andere zutreffen kann müsst dass doch funktionieren ...

Angenommen "qryB" ist momentan in "frmMain.Components[I]" ...
die erste Bedingung ergiebt natürlich ein "TRUE" ... dann gehts an die zweite ...
ist der Name ungleich "qryB" = FALSE ... ist der Name ungleich "qryK" = TRUE

ow ... xD ... ja okay ... somit wird die schleife immer ausgeführt ...

jetzt versteh ich auch warum es funktioniert hat ... als ich nur auf "qryB" überprüft habe ...

Naja ... kurz vorm Feiertag :P xD ... okay ... danke für die schnelle hilfe jungs

Euer f4k3 :zwinker:


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