sdfdstoolsunit.pas 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. unit SdfDSToolsUnit;
  2. {$mode objfpc}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, toolsunit,
  6. db,
  7. SdfData;
  8. type
  9. { TSdfDSDBConnector }
  10. TSdfDSDBConnector = class(TDBConnector)
  11. procedure SetNDatasetSchema(Schema : TStringList);
  12. procedure SetFieldDatasetSchema(Schema : TStringList);
  13. protected
  14. procedure CreateNDatasets; override;
  15. procedure CreateFieldDataset; override;
  16. procedure DropNDatasets; override;
  17. procedure DropFieldDataset; override;
  18. Function InternalGetNDataset(n : integer) : TDataset; override;
  19. Function InternalGetFieldDataset : TDataSet; override;
  20. end;
  21. implementation
  22. { TSdfDSDBConnector }
  23. procedure TSdfDSDBConnector.SetNDatasetSchema(Schema: TStringList);
  24. begin
  25. Schema.Clear;
  26. Schema.Add('ID=5');
  27. Schema.Add('NAME=50');
  28. end;
  29. procedure TSdfDSDBConnector.SetFieldDatasetSchema(Schema: TStringList);
  30. begin
  31. Schema.Clear;
  32. Schema.Add('ID=5');
  33. Schema.Add('FSTRING=10');
  34. end;
  35. procedure TSdfDSDBConnector.CreateNDatasets;
  36. var countID,n : integer;
  37. begin
  38. for n := 0 to MaxDataSet do
  39. begin
  40. with TSdfDataSet.Create(nil) do
  41. begin
  42. FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
  43. DeleteFile(FileName);
  44. FileMustExist:=False;
  45. SetNDatasetSchema(Schema);
  46. Open;
  47. if n > 0 then for countId := 1 to n do
  48. begin
  49. Append;
  50. FieldByName('ID').AsInteger := countID;
  51. FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
  52. // Explicitly call .post, since there could be a bug which disturbs
  53. // the automatic call to post. (example: when TDataset.DataEvent doesn't
  54. // work properly)
  55. Post;
  56. end;
  57. if state = dsinsert then
  58. Post;
  59. Close;
  60. Free;
  61. end;
  62. end;
  63. end;
  64. procedure TSdfDSDBConnector.CreateFieldDataset;
  65. var i : integer;
  66. begin
  67. with TSdfDataSet.Create(nil) do
  68. begin
  69. FileName := dbname+PathDelim+'fpdev_field.dat';
  70. DeleteFile(FileName);
  71. FileMustExist:=False;
  72. SetFieldDatasetSchema(Schema);
  73. Open;
  74. for i := 0 to testValuesCount-1 do
  75. begin
  76. Append;
  77. FieldByName('ID').AsInteger := i;
  78. FieldByName('FSTRING').AsString := testStringValues[i];
  79. Post;
  80. end;
  81. Close;
  82. end;
  83. end;
  84. procedure TSdfDSDBConnector.DropNDatasets;
  85. var n : integer;
  86. begin
  87. for n := 0 to MaxDataSet do
  88. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.dat');
  89. end;
  90. procedure TSdfDSDBConnector.DropFieldDataset;
  91. begin
  92. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.dat');
  93. end;
  94. function TSdfDSDBConnector.InternalGetNDataset(n: integer): TDataset;
  95. begin
  96. Result := TSdfDataSet.Create(nil);
  97. with (result as TSdfDataSet) do
  98. begin
  99. FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
  100. SetNDatasetSchema(Schema);
  101. end;
  102. end;
  103. function TSdfDSDBConnector.InternalGetFieldDataset : TDataSet;
  104. begin
  105. Result := TSdfDataSet.Create(nil);
  106. with (result as TSdfDataSet) do
  107. begin
  108. FileName := dbname+PathDelim+'fpdev_field.dat';
  109. SetFieldDatasetSchema(Schema);
  110. end;
  111. end;
  112. initialization
  113. RegisterClass(TSdfDSDBConnector);
  114. end.