ODAC local filter raises EVariantTypeCastError
We have tried to use a newer ODAC version in production. The following issue is a showstopper for us. It seems that this issue exists since version 12.3.0.
Steps:
- compile and execute the following command line application
Expected: the output is PASS
Actual:
version 12.2.0:
PASS
version 12.3.0 till 13.3.0:
Exception EVariantTypeCastError in module VTNotFilterTest.exe at <address>.
Could not convert variant of type (String) into type (Boolean).
- program VTNotFilterTest;
{$APPTYPE CONSOLE}
uses
SysUtils, DB, VirtualTable;
function CreateStringField(ADataset: TDataSet; AFieldName: string): TStringField;
begin
Result := TStringField.Create(ADataset);
with Result do
begin
FieldName := AFieldName;
DataSet := ADataset;
end;
end;
procedure AddRecordValue(ADataset: TDataSet; AValue: string);
begin
ADataSet.Append;
ADataSet.FieldByName('FIELD').AsString := AValue;
ADataSet.Post;
end;
var
vt: TVirtualTable;
OkayCounter: Integer;
begin
OkayCounter := 0;
vt := TVirtualTable.Create(nil);
try
CreateStringField(vt, 'FIELD');
vt.Open;
AddRecordValue(vt, 'Meier');
AddRecordValue(vt, 'Miller');
if vt.RecordCount = 2 then
Inc(OkayCounter);
vt.Filter := 'not Field = ''Miller''';
vt.Filtered := True;
if vt.RecordCount = 1 then
Inc(OkayCounter);
finally
vt.Free;
end;
if OkayCounter = 2 then
WriteLn('PASS')
else
WriteLn('FAIL');
ReadLn;
end.