Zitat von
Guido Eisenbeis:
Hallo alzaimar, ich verstehe dein Problem nicht wirklich.
Ich bin davon ausgegangen, das ein Variant 'unassigned', 'Null' oder einen echten Wert haben kann. Ich kann diese Zustände jedenfalls setzen und ausgeben bzw. anzeigen. Wenn nun eine Variable einen Wert X annehmen kann, muss ich auch auf gleichheit prüfen können. Und wenn zwei Variablen unterschiedliche Werte haben, dann muss eine Prüfung auf Gleichheit misslingen. Das ist rein mathematisch notwendig, weil man sonst keine Ordnung und Eindeutigkeit hat.
Delphi-Quellcode:
Var
vZero, vOne : Variant;
Begin
vZero := 0; vOne := 1;
if vZero = Unassigned Then Showmessage('0 = Unassigned');
if vOne = Unassigned Then Showmessage('1 = Unassigned');
End;
Wenn 'Unassigned' einen nicht zugewiesenen Variant bezeichnet, dann ist dieser Variant doch per definitionem nicht identisch mit einem zugewiesenen Variant (nämlich 0). Das ist aber hier der Fall. Der Vergleich der Variants wurde halt schlampig bzw. ungenau programmiert, so einfach ist das.
Zitat von
Guido Eisenbeis:
Was ist denn deine Absicht? Willst du prüfen, ob die Variant v leer ist (sprich kein Wert zugewiesen wurde)...Was würde man denn da auch prüfen? Leer = Leer? Nicht leer = Leer? Sein oder nicht sein??
Hö hö, Witsischkeit kennt keine Grentsen...
Nein, nicht leer, sondern 'nicht zugewiesen'. Laut Variant-Definition gibt es da einen Unterschied. In
SQL initialisiere ich einen Wert mit NULL, bei Variants mit UnAssigned, denn NULL ist etwas anderes. Also, ich prüfe einmal auf 'jemals etwas zugewiesen'
Eigentlich habe ich diesen Code;
Delphi-Quellcode:
If MyVariant = Null Then
Writeln('Die Variante ist NULL')
Else if MyVariant = Unassigned Then
Writeln('Der Variante wurde nie etwas zugewiesen')
else
Writeln('Die Variante hat einen nicht leeren Inhalt');
Was ich erwarten würde:
"Unassigned = X", wenn X=Unassigned und "Unassigned <> X" für alle anderen X. Das trifft aber nicht zu.
Nach der von Dir zitierten
OH (wo ich ruhig mal hätte nachschauen können), scheint ein Vergleich mit UnAssigned nicht zulässig. Das ist aber BS, denn wenn ich etwas zuweisen und ausgeben kann, muss ich auch darauf prüfen können. Wenn das nicht geht, stimmt etwas nicht.