EVariantTypeCastError при преобразовании Variant

Неинициализированные переменные типа Variant имеют значение Unassigned.

Поля классов типа Variant остаются неинициализированными, в отличии от полей других типов:

type
  TSomeClass = class
    i : integer;
    v : variant;
  end;
...
var
  Obj : TSomeClass;
begin
  Obj := TSomeClass.Create;
  // Obj.i = 0
  // Obj.v = Unassigned
  ...

Значение Unassigned легко конвертируется в числа (результат - ноль), а значит и в boolean (false), и в дату (30/12/1899). Конвертация unassigned в строки тоже не вызывает у Delphi сложностей, результатом будет пустая строка.

Проблема может возникнуть только при передаче через Variant значений полей датасета. Когда значением поля оказывается null, его преобразование в Variant других типов зависит от значения переменной System.Variants.NullStrictConvert

System.Variants.NullStrictConvert := True; // Значение по умолчанию. Попытка преобразования null в 
                                           //   Variant численных или строковых типов 
                                           //   будет вызывать EVariantTypeCastError.
System.Variants.NullStrictConvert := False; // null будет конвертироваться почти как Unassigned.

Почти, потому что можно отдельно настроить, в какое строковое значение будет конвертироваться null. Это задаётся переменной  System.Variants.NullAsStringValue:

NullAsStringValue: string = '';