dbftoolsunit.pas 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. unit DBFToolsUnit;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. Classes, SysUtils, toolsunit,
  8. db, Dbf;
  9. type
  10. { TDBFDBConnector }
  11. TDBFDBConnector = class(TDBConnector)
  12. protected
  13. procedure CreateNDatasets; override;
  14. procedure CreateFieldDataset; override;
  15. procedure DropNDatasets; override;
  16. procedure DropFieldDataset; override;
  17. Function InternalGetNDataset(n : integer) : TDataset; override;
  18. Function InternalGetFieldDataset : TDataSet; override;
  19. end;
  20. implementation
  21. procedure TDBFDBConnector.CreateNDatasets;
  22. var countID,n : integer;
  23. begin
  24. for n := 0 to MaxDataSet do
  25. begin
  26. with TDbf.Create(nil) do
  27. begin
  28. FilePath := dbname;
  29. TableName := 'fpdev_'+inttostr(n)+'.db';
  30. FieldDefs.Add('ID',ftInteger);
  31. FieldDefs.Add('NAME',ftString,50);
  32. CreateTable;
  33. Open;
  34. if n > 0 then for countId := 1 to n do
  35. begin
  36. Append;
  37. FieldByName('ID').AsInteger := countID;
  38. FieldByName('NAME').AsString := 'TestName'+inttostr(countID);
  39. end;
  40. if state = dsinsert then
  41. Post;
  42. Close;
  43. Free;
  44. end;
  45. end;
  46. end;
  47. procedure TDBFDBConnector.CreateFieldDataset;
  48. var i : integer;
  49. begin
  50. with TDbf.Create(nil) do
  51. begin
  52. FilePath := dbname;
  53. TableName := 'fpdev_field.db';
  54. FieldDefs.Add('ID',ftInteger);
  55. FieldDefs.Add('FSTRING',ftString,10);
  56. FieldDefs.Add('FSMALLINT',ftSmallint);
  57. FieldDefs.Add('FINTEGER',ftInteger);
  58. // FieldDefs.Add('FWORD',ftWord);
  59. FieldDefs.Add('FBOOLEAN',ftBoolean);
  60. FieldDefs.Add('FFLOAT',ftFloat);
  61. // FieldDefs.Add('FCURRENCY',ftCurrency);
  62. // FieldDefs.Add('FBCD',ftBCD);
  63. FieldDefs.Add('FDATE',ftDate);
  64. // FieldDefs.Add('FTIME',ftTime);
  65. FieldDefs.Add('FDATETIME',ftDateTime);
  66. FieldDefs.Add('FLARGEINT',ftLargeint);
  67. CreateTable;
  68. Open;
  69. for i := 0 to testValuesCount-1 do
  70. begin
  71. Append;
  72. FieldByName('ID').AsInteger := i;
  73. FieldByName('FSTRING').AsString := testStringValues[i];
  74. FieldByName('FSMALLINT').AsInteger := testSmallIntValues[i];
  75. FieldByName('FINTEGER').AsInteger := testIntValues[i];
  76. FieldByName('FBOOLEAN').AsBoolean := testBooleanValues[i];
  77. FieldByName('FFLOAT').AsFloat := testFloatValues[i];
  78. ShortDateFormat := 'yyyy-mm-dd';
  79. FieldByName('FDATE').AsDateTime := StrToDate(testDateValues[i]);
  80. FieldByName('FLARGEINT').AsLargeInt := testLargeIntValues[i];
  81. Post;
  82. end;
  83. Close;
  84. end;
  85. end;
  86. procedure TDBFDBConnector.DropNDatasets;
  87. var n : integer;
  88. begin
  89. for n := 0 to MaxDataSet do
  90. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.db');
  91. end;
  92. procedure TDBFDBConnector.DropFieldDataset;
  93. begin
  94. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.db');
  95. end;
  96. function TDBFDBConnector.InternalGetNDataset(n: integer): TDataset;
  97. begin
  98. Result := TDbf.Create(nil);
  99. with (result as TDbf) do
  100. begin
  101. FilePath := dbname;
  102. TableName := 'fpdev_'+inttostr(n)+'.db';
  103. end;
  104. end;
  105. function TDBFDBConnector.InternalGetFieldDataset: TDataSet;
  106. begin
  107. Result := TDbf.Create(nil);
  108. with (result as TDbf) do
  109. begin
  110. FilePath := dbname;
  111. TableName := 'fpdev_field.db';
  112. end;
  113. end;
  114. initialization
  115. RegisterClass(TDBFDBConnector);
  116. end.