fcl-db: memds:

- add support for ftWord, ftFmtBCD field types
- fix memds for failed tests TestRequired (add call to inherited InternalPost), TestRecNo
- fix testing environment for memds

git-svn-id: trunk@25846 -
This commit is contained in:
lacak 2013-10-25 12:46:00 +00:00
parent b70e64dc67
commit ebf70342c5
3 changed files with 32 additions and 9 deletions

View File

@ -176,6 +176,9 @@ type
implementation
uses
FmtBCD;
ResourceString
SErrFieldTypeNotSupported = 'Fieldtype of Field "%s" not supported.';
SErrBookMarkNotFound = 'Bookmark %d not found.';
@ -317,10 +320,12 @@ begin
ftBCD: result:=SizeOf(currency);
ftLargeInt: result:=SizeOf(int64);
ftSmallInt: result:=SizeOf(SmallInt);
ftWord,
ftInteger: result:=SizeOf(longint);
ftDateTime,
ftTime,
ftDate: result:=SizeOf(TDateTime);
ftFmtBCD: result:=SizeOf(TBCD);
else
RaiseError(SErrFieldTypeNotSupported,[FieldDefs.Items[FieldNo-1].Name]);
end;
@ -650,8 +655,9 @@ end;
procedure TMemDataset.InternalPost;
begin
CheckActive;
if ((State<>dsEdit) and (State<>dsInsert)) then
if not (State in [dsEdit, dsInsert]) then
Exit;
inherited InternalPost;
if (State=dsEdit) then
MDSWriteRecord(ActiveBuffer, FCurrRecNo)
else
@ -913,8 +919,8 @@ Function TMemDataset.GetRecNo: Longint;
begin
UpdateCursorPos;
if (FCurrRecNo<0) then
Result:=1
if (FCurrRecNo<0) or (FRecCount=0) or (State=dsInsert) then
Result:=0
else
Result:=FCurrRecNo+1;
end;

View File

@ -23,6 +23,9 @@ type
implementation
uses
StrUtils, FmtBCD;
{ TMemDSDBConnector }
procedure TMemDSDBConnector.CreateNDatasets;
@ -51,6 +54,7 @@ var MemDS : TMemDataset;
begin
MemDs := TMemDataset.Create(nil);
MemDS.Name := 'NDataset';
MemDS.FieldDefs.Add('ID',ftInteger);
MemDS.FieldDefs.Add('NAME',ftString,50);
MemDS.CreateTable;
@ -73,22 +77,29 @@ var MemDS : TMemDataset;
i : integer;
begin
// Values >= 24:00:00.000 can't be handled by StrToTime function
testTimeValues[2] := '23:59:59.000';
testTimeValues[3] := '23:59:59.003';
MemDs := TMemDataset.Create(nil);
with MemDS do
begin
Name := 'FieldDataset';
FieldDefs.Add('ID',ftInteger);
FieldDefs.Add('FSTRING',ftString,10);
FieldDefs.Add('FSMALLINT',ftSmallint);
FieldDefs.Add('FINTEGER',ftInteger);
// FieldDefs.Add('FWORD',ftWord);
FieldDefs.Add('FWORD',ftWord);
FieldDefs.Add('FBOOLEAN',ftBoolean);
FieldDefs.Add('FFLOAT',ftFloat);
// FieldDefs.Add('FCURRENCY',ftCurrency);
// FieldDefs.Add('FBCD',ftBCD);
FieldDefs.Add('FCURRENCY',ftCurrency);
FieldDefs.Add('FBCD',ftBCD);
FieldDefs.Add('FDATE',ftDate);
FieldDefs.Add('FTIME',ftTime);
FieldDefs.Add('FDATETIME',ftDateTime);
FieldDefs.Add('FFIXEDCHAR',ftFixedChar,10);
FieldDefs.Add('FLARGEINT',ftLargeint);
FieldDefs.Add('FFMTBCD',ftFmtBCD);
CreateTable;
Open;
for i := 0 to testValuesCount-1 do
@ -98,11 +109,17 @@ begin
FieldByName('FSTRING').AsString := testStringValues[i];
FieldByName('FSMALLINT').AsInteger := testSmallIntValues[i];
FieldByName('FINTEGER').AsInteger := testIntValues[i];
FieldByName('FWORD').AsInteger := testWordValues[i];
FieldByName('FBOOLEAN').AsBoolean := testBooleanValues[i];
FieldByName('FFLOAT').AsFloat := testFloatValues[i];
ShortDateFormat := 'yyyy-mm-dd';
FieldByName('FDATE').AsDateTime := StrToDate(testDateValues[i]);
FieldByName('FCURRENCY').AsCurrency := testCurrencyValues[i];
FieldByName('FBCD').AsCurrency := testCurrencyValues[i];
FieldByName('FDATE').AsDateTime := StrToDateTime(testDateValues[i], Self.FormatSettings);
FieldByName('FTIME').AsDateTime := StrToTime(testTimeValues[i], Self.FormatSettings);
FieldByName('FDATETIME').AsDateTime := StrToDateTime(testValues[ftDateTime,i], Self.FormatSettings);
FieldByName('FFIXEDCHAR').AsString := PadRight(testStringValues[i], 10);
FieldByName('FLARGEINT').AsLargeInt := testLargeIntValues[i];
FieldByName('FFMTBCD').AsBCD := StrToBCD(testFmtBCDValues[i], Self.FormatSettings);
Post;
end;
Close;

View File

@ -548,7 +548,7 @@ begin
append;
FieldByName('id').AsInteger := 1;
CheckEquals(0,RecNo);
CheckEquals(0,RecNo,'RecNo after 3rd Append');
CheckEquals(1,RecordCount);
Close;