Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query lookup will nich wie ich...? (https://www.delphipraxis.net/11648-query-lookup-will-nich-wie-ich.html)

barnti 11. Nov 2003 10:19


Query lookup will nich wie ich...?
 
Hi,

habe ein Problem mit dem Finden eines Datensatzes durch den Aufruf von query.Lookup.
Dazu folgendes:
Delphi-Quellcode:

Function1(nummer: String):string;
begin

while PartieNummerExistiert(IntToStr(Nummer)) do
        begin
          Nummer:= Nummer +1;
        end;
      result:= IntToStr(nummer);
end;
Funktion1 soll eine Nummer zurückgeben, wenn diese nicht existiert. Andernfalls wird die nummer inkrementiert, bis diese nicht gefunden wird.

Delphi-Quellcode:

Function PartieNummerExistiert(Nummer: String):boolean;
var V: Variant;
begin
  Query_Partie_ID.Open;     //Spalte                //Wert   //Rückgabewert
  V := Query_Partie_ID.Lookup('Partie_ID', VarArrayOf([nummer]), 'Partie_ID');
  result:= not(VarType(V) in [varNull]);
  Query_Partie_ID.Close;
end;
Die Funktion gibt zurück, ob die übergebene Nummer in der Tabelle vorkommt.

Mein Problem:

In der Tabelle sind 4 Einträge wobei die Partienummer von 5 bis 8 vorhanden ist. Wird Funktion1 mit dem Wert "5" aufgerufen, wird dieser gefunden und "nummer" inkrementiert. Wird die Funktion "PartieNummerExistiert" mit dem Wert "6" aufgerufen, so wird dierser nicht gefunden, was aber der Fall sein sollte...!?

Wo ist der Fehler? Liegt es irgentwie an dem Open, Close in "PartieNummerExistiert" ? Kann mir jemand einen Tip geben?

Danke & Gruß,

Barnti

barnti 11. Nov 2003 11:18

Re: Query lookup will nich wie ich...?
 
Hallo noch einmal,

was weiterhin verwundert ist, dass ich die Funktion "PartieNummerExistiert" in einem anderen Zusammenhang aufrufe, dort aber alles reibungslos funktioniert?!

Danke für Antwort,

Gruß,

Barnti

barnti 12. Nov 2003 07:04

Re: Query lookup will nich wie ich...?
 
Hallo,

ich habe mal eine Funktion, die das lookup nachempfindet selber gecoded. Wenn ich diese Funktion benutze besteht das Problem nicht mehr...

Hat jemand einen Tip warum die von Delphi zur Verfügung gestellte Funktion "lookup" nicht funktioniert?

Gruß,

Barnti

APP 12. Nov 2003 07:20

Re: Query lookup will nich wie ich...?
 
Hallo Barnti,

das ist zwar nur ein Schuss ins Blaue von mir, aber bist Du sicher dass
Zitat:

Zitat von barnti
Delphi-Quellcode:
Function1(nummer: String):string;
begin

while PartieNummerExistiert(IntToStr(Nummer)) do
        begin
          Nummer:= Nummer +1;
        end;
      result:= IntToStr(nummer);
end;

funktioniert?
Delphi-Quellcode:
nummer:String -- Nummer:= Nummer+1
(Du versuchst einen String zu inkrementien)

barnti 12. Nov 2003 07:33

Re: Query lookup will nich wie ich...?
 
Sorry, mein Fehler! Danke für den Hinweis!

Die Funktion lautet natürlich:

Delphi-Quellcode:

function FindePartieID(Nummer: Integer): String;
begin
  try
    DMPartie.poolQuery.First;
    result:= poolQuery.FieldByName('Partie_Pool_ID').AsString;
    PoolQuery.Delete;
  except // sonst wird die nächst größere Nummer in der Partietabelle gesucht
          // und als neue Partie_ID vergeben, wenn diese nicht gefunden wird.
    begin
      while PartieNRExistiert(IntToStr(Nummer)) do
        begin
          Nummer:= Nummer +1;
        end;
      result:= IntToStr(nummer);
    end;
  end;
end;
So siehts aus! Trotzdem das selbe Problem!

Vielleicht noch eine Idee?

APP 12. Nov 2003 11:54

Re: Query lookup will nich wie ich...?
 
Hallo barnti,
ich verstehe Dein Konstrukt noch nicht ganz,
aber ein TRY/Except-Block ist ein Resourcen-Schutz Block, dass heisst, nur wenn
innerhalb von Try-Except ein Fehler auftritt, werden die Anweisungen nach dem Except
ausgeführt.

Try/Except-Blöcke sollten nicht statt Abfrage-Operationen benutzt werden,
sondern nur Ausnahmen/Fehler behandeln.

Delphi-Quellcode:
...
    DMPartie.poolQuery.First;
    result:= poolQuery.FieldByName('Partie_Pool_ID').AsString;
...
Hier bekommst Du als Resultat *immer* nur den ersten Satz von
'Partie_Pool_ID' zurück, möchtest Du das?


P.S.
Ich bin mir nicht sicher, ob ich alles verstanden habe, vielleicht zeigst Du noch mehr von Deinem Code.

barnti 12. Nov 2003 13:18

Re: Query lookup will nich wie ich...?
 
hallo APP,

Zitat:


ich verstehe Dein Konstrukt noch nicht ganz,
aber ein TRY/Except-Block ist ein Resourcen-Schutz Block, dass heisst, nur wenn
innerhalb von Try-Except ein Fehler auftritt, werden die Anweisungen nach dem Except
ausgeführt.

Genau, das soll auch passieren: Wenn es in Partie_Pool einen Eintrag gibt, wird dieser als Ergebnis zurückgeliefert und der Eintrag anschließend gelöscht. Ist die Tabelle leer wird durch das "delete" ein Fehler ausgelöst. Dann wird die Partienummer im "except" ermittelt.


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