Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Variant - Rückgabewert überprüfen aber wie? (https://www.delphipraxis.net/126065-variant-rueckgabewert-ueberpruefen-aber-wie.html)

Piro 17. Dez 2008 10:08


Variant - Rückgabewert überprüfen aber wie?
 
Ich habe folgenden Code, der mir eine Wert des Types Variant zurückgibt. Ich möchte überprüfen, ob er leer ist oder etwas drin steht.

Delphi-Quellcode:
...
var
 varTemp : Variant;
 strTemp : String;
begin
...
 varTemp := vOut.DefaultIPGateway;
 if varTemp <> NULL then
   strTemp := VarToStr(vOut.DefaultIPGateway[0])
 else
   strTemp := '';
...
Folgende Rückgabewerte für varTemp erhalte ich.
  • Null
  • Variant Array of Variant

Wenn der Rückgabewert Null ist, funktioniert meine Abfrage. Wenn der Rückgabewert aber Variant Array of Variant ist, kommt die Fehlermeldung "Ungültige Variantenoperation". Wie könnte bzw. muss man die Abfrage verändern damit es klappt?

Vielen Dank im Voraus. Sven

Piro 17. Dez 2008 10:27

Re: Variant - Rückgabewert überprüfen aber wie?
 
So, ich habe jetzt eine Lösung:

Delphi-Quellcode:
{ 1    = Null                }
{ 8    = Einfacher Wert      }
{ 8204 = Mehrere Werte (Array)}
varTemp := vartype(vOut.DefaultIPGateway);
Case varTemp of
  1 : ANetwork[Counter].gw := '';
else
  ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0]);
end;

fragile 17. Dez 2008 10:34

Re: Variant - Rückgabewert überprüfen aber wie?
 
Vielleicht wäre es auch mit dem "is" Operator gegangen ?

nicodex 17. Dez 2008 10:38

Re: Variant - Rückgabewert überprüfen aber wie?
 
Zitat:

Zitat von daywalker299
So, ich habe jetzt eine Lösung:

Delphi-Quellcode:
{ 1    = Null                }
{ 8    = Einfacher Wert      }
{ 8204 = Mehrere Werte (Array)}
varTemp := vartype(vOut.DefaultIPGateway);
Case varTemp of
  1 : ANetwork[Counter].gw := '';
else
  ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0]);
end;

1 -> (System.)varNull
Delphi-Quellcode:
if VarIsNull(vOut.DefaultIPGateway) then
  ANetwork[Counter].gw := ''
else
  ANetwork[Counter].gw := VarToStr(vOut.DefaultIPGateway[0]);
Erscheint mir lesbarer/verständlicher.

edit: bevor man auf das erste Element des Variants als Array zu greift, sollte man "vielleicht" prüfen, ob es a) ein Array ist und b) es ein Element 0 gibt (VarArrayDimCount, VarArrayHighBound).

Piro 17. Dez 2008 15:15

Re: Variant - Rückgabewert überprüfen aber wie?
 
Danke für den Tipp. Deine Methode ist übersichtlicher.

Gruß, Sven


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