Description |
The Variant data type provides a flexible general purpose data type.
It can hold anything but structured data and pointers.
But use with care - there are penalties in performance, potentials for run time errors and poor code clarity when using Variants.
Use VarType in conjunction with VarTypeMask to determine the curent data types a Variant is set to.
Variants are useful in very specific circumstances, where data types and their content are determined at run time rather than at compile time.
|
|
Notes |
Variant strings cannot be indexed.
|
|
Related commands |
Null |
|
A variable that has no value |
PVariant |
|
Pointer to a Variant value |
|
|
|
Example code : Illustrating a few Variant assignments and the resulting data types |
var
myVar : Variant;
begin // Assign various values to a Variant // and then show the resulting Variant type
WriteLn('Variant value = not yet set');
ShowBasicVariantType(myVar);
// Simple value
myVar := 123;
WriteLn('Variant value = 123');
ShowBasicVariantType(myVar);
// Calculated value using a Variant and a constant
myVar := myVar + 456;
WriteLn('Variant value = 123 + 456');
ShowBasicVariantType(myVar);
myVar := 'String '+IntToStr(myVar);
WriteLn('Variant value = String 579');
ShowBasicVariantType(myVar);
end;
// Show the type of a variant
procedure TForm1.ShowBasicVariantType(varVar: Variant);
var
typeString : string;
basicType : Integer;
begin // Get the Variant basic type : // this means excluding array or indirection modifiers
basicType := VarType(varVar) and VarTypeMask;
// Set a string to match the type
case basicType of
varEmpty : typeString := 'varEmpty';
varNull : typeString := 'varNull';
varSmallInt : typeString := 'varSmallInt';
varInteger : typeString := 'varInteger';
varSingle : typeString := 'varSingle';
varDouble : typeString := 'varDouble';
varCurrency : typeString := 'varCurrency';
varDate : typeString := 'varDate';
varOleStr : typeString := 'varOleStr';
varDispatch : typeString := 'varDispatch';
varError : typeString := 'varError';
varBoolean : typeString := 'varBoolean';
varVariant : typeString := 'varVariant';
varUnknown : typeString := 'varUnknown';
varByte : typeString := 'varByte';
varWord : typeString := 'varWord';
varLongWord : typeString := 'varLongWord';
varInt64 : typeString := 'varInt64';
varStrArg : typeString := 'varStrArg';
varString : typeString := 'varString';
varAny : typeString := 'varAny';
varTypeMask : typeString := 'varTypeMask';
end;
// Show the Variant type
WriteLn('Variant type = '+typeString);
end;
|
Show full unit code |
Variant value = not yet set
Variant type = varEmpty
Variant value = 123
Variant type = varByte
Variant value = 123 + 456
Variant type = varInt64
Variant value = String 579
Variant type = varString
|
|