Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Fehler mit der Funktion "Lookup" (https://www.delphipraxis.net/12081-fehler-mit-der-funktion-lookup.html)

barnti 20. Nov 2003 11:21


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:
Select *
from Unterpartie
In der Funktion "UPartienummerExistiert" habe ich mal eine Whileschleife eingebaut, die mir alle vorhandenen Werte in "Ergebnis" anzeigt.

Im Moment sind zwei Werte in der Tabelle vorhanden:
1,
2

Diese werden auch korrekt in "Ergebnis" angezeigt.

Delphi-Quellcode:
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;
Das Problem: Die Funktion liefert für den Wert "1" false zurück, obwohl der Wert bereits in der Tabelle vorhanden ist.

Was mache ich falsch?

Gruß,

Barnti

oki 20. Nov 2003 12:01

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

oki 20. Nov 2003 12:04

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

barnti 20. Nov 2003 12:09

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

barnti 20. Nov 2003 13:00

Re: Fehler mit der Funktion "Lookup"
 
Hallo,

Gefahr erkannt, Gefahr gebannt:

Habe mir einen Fehler eingebaut - Klammern vergessen:
Delphi-Quellcode:
...
result:= not VarType(V) in [varNull];
...
muss heißen:

Delphi-Quellcode:
...
result:= not (VarType(V) in [varNull]);
...
Ansonsten steht im result immer false! Tja, wen das interessiert...!

Trotzdem Danke!

Gruß,

Barnti

P.S.: Kann hier jemand mal die Erklärung posten, wie der Ausdruck falsch ausgewertet wird, sprich ohne die Klammern?

oki 20. Nov 2003 13:46

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

barnti 20. Nov 2003 13:57

Re: Fehler mit der Funktion "Lookup"
 
Hi oki,

danke für Dein Interesse.

Gruß,

Barnti


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