![]() |
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:
Funktion1 soll eine Nummer zurückgeben, wenn diese nicht existiert. Andernfalls wird die nummer inkrementiert, bis diese nicht gefunden wird.Function1(nummer: String):string; begin while PartieNummerExistiert(IntToStr(Nummer)) do begin Nummer:= Nummer +1; end; result:= IntToStr(nummer); end;
Delphi-Quellcode:
Die Funktion gibt zurück, ob die übergebene Nummer in der Tabelle vorkommt.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; 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 |
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 |
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 |
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:
Delphi-Quellcode:
(Du versuchst einen String zu inkrementien)
nummer:String -- Nummer:= Nummer+1
|
Re: Query lookup will nich wie ich...?
Sorry, mein Fehler! Danke für den Hinweis!
Die Funktion lautet natürlich:
Delphi-Quellcode:
So siehts aus! Trotzdem das selbe Problem!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; Vielleicht noch eine Idee? |
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:
Hier bekommst Du als Resultat *immer* nur den ersten Satz von
...
DMPartie.poolQuery.First; result:= poolQuery.FieldByName('Partie_Pool_ID').AsString; ... '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. |
Re: Query lookup will nich wie ich...?
hallo APP,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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-2025 by Thomas Breitkreuz