sdfdstoolsunit.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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. if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  39. for n := 0 to MaxDataSet do
  40. begin
  41. with TSdfDataSet.Create(nil) do
  42. begin
  43. FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
  44. // Make sure the directory exists so we can write
  45. ForceDirectories(dbname);
  46. DeleteFile(FileName);
  47. FileMustExist:=False;
  48. SetNDatasetSchema(Schema);
  49. Open;
  50. if n > 0 then for countId := 1 to n do
  51. begin
  52. Append;
  53. FieldByName('ID').AsInteger := countID;
  54. FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
  55. // Explicitly call .post, since there could be a bug which disturbs
  56. // the automatic call to post. (example: when TDataset.DataEvent doesn't
  57. // work properly)
  58. Post;
  59. end;
  60. if state = dsinsert then
  61. Post;
  62. Close;
  63. Free;
  64. end;
  65. end;
  66. end;
  67. procedure TSdfDSDBConnector.CreateFieldDataset;
  68. var i : integer;
  69. begin
  70. if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  71. with TSdfDataSet.Create(nil) do
  72. begin
  73. FileName := dbname+PathDelim+'fpdev_field.dat';
  74. DeleteFile(FileName);
  75. // Make sure the directory exists so we can write
  76. ForceDirectories(dbname);
  77. FileMustExist:=False;
  78. SetFieldDatasetSchema(Schema);
  79. Open;
  80. for i := 0 to testValuesCount-1 do
  81. begin
  82. Append;
  83. FieldByName('ID').AsInteger := i;
  84. FieldByName('FSTRING').AsString := testStringValues[i];
  85. Post;
  86. end;
  87. Close;
  88. end;
  89. end;
  90. procedure TSdfDSDBConnector.DropNDatasets;
  91. var n : integer;
  92. begin
  93. for n := 0 to MaxDataSet do
  94. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.dat');
  95. end;
  96. procedure TSdfDSDBConnector.DropFieldDataset;
  97. begin
  98. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.dat');
  99. end;
  100. function TSdfDSDBConnector.InternalGetNDataset(n: integer): TDataset;
  101. begin
  102. Result := TSdfDataSet.Create(nil);
  103. with (result as TSdfDataSet) do
  104. begin
  105. FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
  106. SetNDatasetSchema(Schema);
  107. end;
  108. end;
  109. function TSdfDSDBConnector.InternalGetFieldDataset : TDataSet;
  110. begin
  111. Result := TSdfDataSet.Create(nil);
  112. with (result as TSdfDataSet) do
  113. begin
  114. FileName := dbname+PathDelim+'fpdev_field.dat';
  115. SetFieldDatasetSchema(Schema);
  116. end;
  117. end;
  118. initialization
  119. RegisterClass(TSdfDSDBConnector);
  120. end.