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. ;
  9. type
  10. { TSdfDSDBConnector }
  11. TSdfDSDBConnector = class(TDBConnector)
  12. procedure SetNDatasetSchema(Schema : TStringList);
  13. procedure SetFieldDatasetSchema(Schema : TStringList);
  14. protected
  15. procedure CreateNDatasets; override;
  16. procedure CreateFieldDataset; override;
  17. procedure DropNDatasets; override;
  18. procedure DropFieldDataset; override;
  19. Function InternalGetNDataset(n : integer) : TDataset; override;
  20. Function InternalGetFieldDataset : TDataSet; override;
  21. end;
  22. implementation
  23. { TSdfDSDBConnector }
  24. procedure TSdfDSDBConnector.SetNDatasetSchema(Schema: TStringList);
  25. begin
  26. Schema.Clear;
  27. Schema.Add('ID=5');
  28. Schema.Add('NAME=50');
  29. end;
  30. procedure TSdfDSDBConnector.SetFieldDatasetSchema(Schema: TStringList);
  31. begin
  32. Schema.Clear;
  33. Schema.Add('ID=5');
  34. Schema.Add('FSTRING=10');
  35. end;
  36. procedure TSdfDSDBConnector.CreateNDatasets;
  37. var countID,n : integer;
  38. begin
  39. if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  40. for n := 0 to MaxDataSet do
  41. begin
  42. with TSdfDataSet.Create(nil) do
  43. begin
  44. FileName := dbname+PathDelim+'fpdev_'+inttostr(n)+'.dat';
  45. // Make sure the directory exists so we can write
  46. ForceDirectories(dbname);
  47. DeleteFile(FileName);
  48. FileMustExist:=False;
  49. SetNDatasetSchema(Schema);
  50. Open;
  51. if n > 0 then for countId := 1 to n do
  52. begin
  53. Append;
  54. FieldByName('ID').AsInteger := countID;
  55. FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
  56. // Explicitly call .post, since there could be a bug which disturbs
  57. // the automatic call to post. (example: when TDataset.DataEvent doesn't
  58. // work properly)
  59. Post;
  60. end;
  61. Close;
  62. Free;
  63. end;
  64. end;
  65. end;
  66. procedure TSdfDSDBConnector.CreateFieldDataset;
  67. var i : integer;
  68. begin
  69. if dbname='' then raise Exception.Create('dbname variable not specified. You must specify name= in database.ini');
  70. with TSdfDataSet.Create(nil) do
  71. begin
  72. FileName := dbname+PathDelim+'fpdev_field.dat';
  73. // Make sure the directory exists so we can write
  74. ForceDirectories(dbname);
  75. DeleteFile(FileName);
  76. FileMustExist:=False;
  77. SetFieldDatasetSchema(Schema);
  78. Open;
  79. for i := 0 to testValuesCount-1 do
  80. begin
  81. Append;
  82. FieldByName('ID').AsInteger := i;
  83. FieldByName('FSTRING').AsString := testStringValues[i];
  84. Post;
  85. end;
  86. Close;
  87. Free;
  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. TrimSpace := False;
  117. end;
  118. end;
  119. initialization
  120. RegisterClass(TSdfDSDBConnector);
  121. end.