mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-09 08:30:54 +02:00
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:
parent
b70e64dc67
commit
ebf70342c5
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -548,7 +548,7 @@ begin
|
||||
|
||||
append;
|
||||
FieldByName('id').AsInteger := 1;
|
||||
CheckEquals(0,RecNo);
|
||||
CheckEquals(0,RecNo,'RecNo after 3rd Append');
|
||||
CheckEquals(1,RecordCount);
|
||||
|
||||
Close;
|
||||
|
Loading…
Reference in New Issue
Block a user