2
0

dbftoolsunit.pas 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. unit DBFToolsUnit;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. Classes, SysUtils, toolsunit,
  8. db,
  9. Dbf, dbf_fields;
  10. type
  11. { TDBFDBConnector }
  12. TDBFDBConnector = class(TDBConnector)
  13. private
  14. protected
  15. Function CreateNDataset(n : integer) : TDataset; override;
  16. Procedure FreeNDataset(var ds : TDataset); override;
  17. public
  18. destructor Destroy; override;
  19. end;
  20. implementation
  21. destructor TDBFDBConnector.Destroy;
  22. begin
  23. inherited Destroy;
  24. end;
  25. function TDBFDBConnector.CreateNDataset(n: integer): TDataset;
  26. var countID : integer;
  27. begin
  28. with TDbf.Create(nil) do
  29. begin
  30. FilePath := dbname;
  31. TableName := 'fpdev_'+inttostr(n)+'.db';
  32. FieldDefs.Add('ID',ftInteger);
  33. FieldDefs.Add('NAME',ftString,50);
  34. CreateTable;
  35. Open;
  36. for countId := 1 to n do
  37. begin
  38. Append;
  39. FieldByName('ID').AsInteger := countID;
  40. FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
  41. end;
  42. if state = dsinsert then
  43. Post;
  44. Close;
  45. Free;
  46. end;
  47. // A dataset that has been opened and closed can't be used. Or else the tests
  48. // for a newly generated dataset can't work properly.
  49. Result := TDbf.Create(nil);
  50. with (result as TDbf) do
  51. begin
  52. FilePath := dbname;
  53. TableName := 'fpdev_'+inttostr(n)+'.db';
  54. end;
  55. end;
  56. procedure TDBFDBConnector.FreeNDataset(var ds: TDataset);
  57. begin
  58. if ds.Active then ds.close;
  59. FreeAndNil(ds);
  60. end;
  61. end.