memdstoolsunit.pas 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. unit MemDSToolsUnit;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, toolsunit,
  6. db,
  7. MemDS;
  8. type
  9. { TMemDSConnector }
  10. TMemDSDBConnector = class(TDBConnector)
  11. protected
  12. procedure CreateNDatasets; override;
  13. procedure CreateFieldDataset; override;
  14. procedure DropNDatasets; override;
  15. procedure DropFieldDataset; override;
  16. Function InternalGetNDataset(n : integer) : TDataset; override;
  17. Function InternalGetFieldDataset : TDataSet; override;
  18. end;
  19. implementation
  20. uses
  21. StrUtils, FmtBCD;
  22. { TMemDSDBConnector }
  23. procedure TMemDSDBConnector.CreateNDatasets;
  24. begin
  25. // All datasets only exist in memory, so nothing has to be done
  26. end;
  27. procedure TMemDSDBConnector.CreateFieldDataset;
  28. begin
  29. // All datasets only exist in memory, so nothing has to be done
  30. end;
  31. procedure TMemDSDBConnector.DropNDatasets;
  32. begin
  33. // All datasets only exist in memory, so nothing has to be done
  34. end;
  35. procedure TMemDSDBConnector.DropFieldDataset;
  36. begin
  37. // All datasets only exist in memory, so nothing has to be done
  38. end;
  39. function TMemDSDBConnector.InternalGetNDataset(n: integer): TDataset;
  40. var MemDS : TMemDataset;
  41. i : integer;
  42. begin
  43. MemDs := TMemDataset.Create(nil);
  44. MemDS.Name := 'NDataset';
  45. MemDS.FieldDefs.Add('ID',ftInteger);
  46. MemDS.FieldDefs.Add('NAME',ftString,50);
  47. MemDS.CreateTable;
  48. MemDS.Open;
  49. for i := 1 to n do
  50. begin
  51. memds.Append;
  52. memds.FieldByName('ID').AsInteger := i;
  53. memds.FieldByName('NAME').AsString := 'TestName' + inttostr(i);
  54. MemDS.Post;
  55. end;
  56. MemDS.Close;
  57. Result := MemDS;
  58. end;
  59. function TMemDSDBConnector.InternalGetFieldDataset : TDataSet;
  60. var MemDS : TMemDataset;
  61. i : integer;
  62. begin
  63. // Values >= 24:00:00.000 can't be handled by StrToTime function
  64. testTimeValues[2] := '23:59:59.000';
  65. testTimeValues[3] := '23:59:59.003';
  66. MemDS := TMemDataset.Create(nil);
  67. with MemDS do
  68. begin
  69. Name := 'FieldDataset';
  70. FieldDefs.Add('ID',ftInteger);
  71. FieldDefs.Add('FSTRING',ftString,10);
  72. FieldDefs.Add('FSMALLINT',ftSmallint);
  73. FieldDefs.Add('FINTEGER',ftInteger);
  74. FieldDefs.Add('FWORD',ftWord);
  75. FieldDefs.Add('FBOOLEAN',ftBoolean);
  76. FieldDefs.Add('FFLOAT',ftFloat);
  77. FieldDefs.Add('FCURRENCY',ftCurrency);
  78. FieldDefs.Add('FBCD',ftBCD);
  79. FieldDefs.Add('FDATE',ftDate);
  80. FieldDefs.Add('FTIME',ftTime);
  81. FieldDefs.Add('FDATETIME',ftDateTime);
  82. FieldDefs.Add('FFIXEDCHAR',ftFixedChar,10);
  83. FieldDefs.Add('FLARGEINT',ftLargeint);
  84. FieldDefs.Add('FFMTBCD',ftFmtBCD);
  85. FieldDefs.Add('FBLOB',ftBlob);
  86. FieldDefs.Add('FMEMO',ftMemo);
  87. FieldDefs.Add('FWIDESTRING',ftWideString);
  88. FieldDefs.Add('FFIXEDWIDECHAR',ftFixedWideChar);
  89. FieldDefs.Add('FWIDEMEMO',ftWideMemo);
  90. CreateTable;
  91. Open;
  92. for i := 0 to testValuesCount-1 do
  93. begin
  94. Append;
  95. FieldByName('ID').AsInteger := i;
  96. FieldByName('FSTRING').AsString := testStringValues[i];
  97. FieldByName('FSMALLINT').AsInteger := testSmallIntValues[i];
  98. FieldByName('FINTEGER').AsInteger := testIntValues[i];
  99. FieldByName('FWORD').AsInteger := testWordValues[i];
  100. FieldByName('FBOOLEAN').AsBoolean := testBooleanValues[i];
  101. FieldByName('FFLOAT').AsFloat := testFloatValues[i];
  102. FieldByName('FCURRENCY').AsCurrency := testCurrencyValues[i];
  103. FieldByName('FBCD').AsCurrency := testCurrencyValues[i];
  104. FieldByName('FDATE').AsDateTime := StrToDateTime(testDateValues[i], Self.FormatSettings);
  105. FieldByName('FTIME').AsDateTime := StrToTime(testTimeValues[i], Self.FormatSettings);
  106. FieldByName('FDATETIME').AsDateTime := StrToDateTime(testValues[ftDateTime,i], Self.FormatSettings);
  107. FieldByName('FFIXEDCHAR').AsString := PadRight(testStringValues[i], 10);
  108. FieldByName('FLARGEINT').AsLargeInt := testLargeIntValues[i];
  109. FieldByName('FFMTBCD').AsBCD := StrToBCD(testFmtBCDValues[i], Self.FormatSettings);
  110. FieldByName('FBLOB').AsString := testValues[ftBlob, i];
  111. FieldByName('FMEMO').AsString := testValues[ftMemo, i];
  112. FieldByName('FWIDESTRING').AsWideString := testValues[ftWideString, i];
  113. FieldByName('FFIXEDWIDECHAR').AsWideString := testValues[ftFixedWideChar, i];
  114. FieldByName('FWIDEMEMO').AsWideString := testValues[ftWideMemo, i];
  115. Post;
  116. end;
  117. Close;
  118. end;
  119. Result := MemDS;
  120. end;
  121. initialization
  122. RegisterClass(TMemDSDBConnector);
  123. end.