![]() |
Fehler mit der Funktion "Lookup"
Hallo Alle,
ich habe wieder einmal ein Problem mit der Funktion "Lookup". Ich möchte ermittelt, ob ein Wert schon in der Tabelle Unterpartie vorhanden ist. Die QueryUnterpartie_ID setzt das folgende Statement ab:
SQL-Code:
In der Funktion "UPartienummerExistiert" habe ich mal eine Whileschleife eingebaut, die mir alle vorhandenen Werte in "Ergebnis" anzeigt.
Select *
from Unterpartie Im Moment sind zwei Werte in der Tabelle vorhanden: 1, 2 Diese werden auch korrekt in "Ergebnis" angezeigt.
Delphi-Quellcode:
Das Problem: Die Funktion liefert für den Wert "1" false zurück, obwohl der Wert bereits in der Tabelle vorhanden ist.
function TDMUnterpartie.UPartieNummerExistiert(nummer: String): boolean;
var V: Variant; Ergebnis: String; begin QueryUnterpartie_ID.Open; while not QueryUnterpartie_ID.Eof do begin Ergebnis:= Ergebnis + char(13)+ QueryUnterpartie_ID. FieldByName('Unterpartie_ID').AsString; QueryUnterpartie_ID.Next; end; showmessage(Ergebnis); //Spalte //Wert //Rückgabewert V := QueryUnterpartie_ID.Lookup('Unterpartie_ID', nummer, 'Unterpartie_ID'); result:= not(VarType(V) in [varNull]); QueryUnterpartie_ID.Close; end; Was mache ich falsch? Gruß, Barnti |
Re: Fehler mit der Funktion "Lookup"
Hi,
vorab noch Fragen: 1. Welche Klasse verbirgt sich hinter QueryUnterpartie_ID? 2. Sind die Datenfelder Unterpartie_ID mit genau der gleichen Anzahl Zeichen gefüllt wie deine Variable Nummer (Leerzeiche?) Sonnst kenne ich keine Probleme mit Lookup. Gruß oki |
Re: Fehler mit der Funktion "Lookup"
Hi, ich sehe in meinem Browser schon wieder mal den Edit-Button nicht. :wall:
Eigentlich verwende ich immer Locate. Da hatte ich nie ein Problem. Gruß oki |
Re: Fehler mit der Funktion "Lookup"
Hi oki,
QueryUnterpartie ist vom Typ TQuery. Die Werte stimmen überein: In Nummer wird ein String mit '1' übergeben. Die Datenfelder dder Tabelle enthalten ebenfalls diesen Wert...?! Ich bin absolut ratlos! Gruß, Barnti |
Re: Fehler mit der Funktion "Lookup"
Hallo,
Gefahr erkannt, Gefahr gebannt: Habe mir einen Fehler eingebaut - Klammern vergessen:
Delphi-Quellcode:
muss heißen:
...
result:= not VarType(V) in [varNull]; ...
Delphi-Quellcode:
Ansonsten steht im result immer false! Tja, wen das interessiert...!
...
result:= not (VarType(V) in [varNull]); ... Trotzdem Danke! Gruß, Barnti P.S.: Kann hier jemand mal die Erklärung posten, wie der Ausdruck falsch ausgewertet wird, sprich ohne die Klammern? |
Re: Fehler mit der Funktion "Lookup"
Hi,
ja, so simpel ist es manchmal. Die Erklärung für dein Result und Klammern ist folgende: bei ersterem wird auf auf VarType(V) die Negation durchgeführt und dann erst geprüft ob dieses Resultat in VarNull enthalten ist. bei der zweiten Variante wird erst geprüft ob VarType(V) in VarNull ist und dann negiert. Gru0 oki |
Re: Fehler mit der Funktion "Lookup"
Hi oki,
danke für Dein Interesse. Gruß, Barnti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 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