PROCEDURE TShelves.TAdd.ColumnRow(RowData : ARRAY OF CONST; LocalType:BYTE); // No errorchecking. Only adds according to type. Also increase the size of the type's array.
VAR
ix : INTEGER ; xx : EXTENDED; asx : ^AnsiString;
wsx : ^WideString;
OldRowPointer : INTEGER;
BEGIN
{
AllVTypes : ARRAY[0..18] OF AnsiString =('vtInteger','vtBoolean' ,'vtChar' ,'vtExtended' ,'vtString' ,'vtPointer' ,'vtPChar',
'vtObject' ,'vtClass' ,'vtWideChar' ,'vtPWideChar','vtAnsiString','vtCurrency',
'vtVariant','vtInterface','vtWideString','vtInt64' ,'vtQWord' ,'vtUniCodeString'); }
WITH pTheColumn^ DO BEGIN
OldRowPointer := RowCount;
CASE RowData[0].VType OF
0: BEGIN
ix := RowData[0].VInteger;
AddWholeNumbersToColumn(ix,LocalType);
IF ErrorMessage = '' THEN INC(RowCount);
END;
1: { 1 } BEGIN SetLength(IfBoolean , RowCount+1); IfBoolean [RowCount] := RowData[0].VBoolean; INC(RowCount); END;// vtBoolean ... Boolean
3: BEGIN
xx := RowData[0].VExtended^; // Probably not needed, but shorter to write in below lines!
CASE LocalType OF // vtExtended ... Double, TDate, TTime, Real, Extended
9 : BEGIN SetLength(IfDouble , RowCount+1); IfDouble [RowCount] := xx; INC(RowCount); END;// Double
10 : BEGIN SetLength(IfExtended , RowCount+1); IfExtended [RowCount] := xx; INC(RowCount); END;// Extended
12 : BEGIN SetLength(IfTime , RowCount+1); IfTime [RowCount] := xx; INC(RowCount); END;// TTime
13 : BEGIN SetLength(IfDate , RowCount+1); IfDate [RowCount] := xx; INC(RowCount); END;// TDate
14 : BEGIN SetLength(IfDateTime , RowCount+1); IfDateTime [RowCount] := xx; INC(RowCount); END;// TDateTime
END;
END;
4: { 15 } BEGIN SetLength(IfShortString, RowCount+1); IfShortString[RowCount] := RowData[0].VString^; INC(RowCount); END;// vtString ... ShortString
11: { 16 } BEGIN
asx := @RowData[0].VAnsiString;
AddAnsiStringToColumn(asx^,LocalType);
IF ErrorMessage = '' THEN INC(RowCount);
END;
12: { 11 } BEGIN SetLength(IfCurrency , RowCount+1); IfCurrency [RowCount] := RowData[0].VCurrency^; INC(RowCount); END;// vtCurrency;
15: { 17 } BEGIN
wsx := @RowData[0].VWideString;
SetLength(IfWideString , RowCount+1); IfWideString [RowCount] := wsx^; INC(RowCount); // vtWideString
END;
16: { 8 } BEGIN SetLength(IfInt64 , RowCount+1); IfInt64 [RowCount] := RowData[0].VInt64^; INC(RowCount); END;// vtInt64
17: { 5 } BEGIN SetLength(IfQWord , RowCount+1); IfQWord [RowCount] := RowData[0].VQWord^; INC(RowCount); END;// QWord
END;
IF RowCount = OldRowPointer THEN ErrorMessage :='Error! Column-Data was not added.'
END;
END;