dbftoolsunit.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. // Explicitly call .post, since there could be a bug which disturbs
  40. // the automatic call to post. (example: when TDataset.DataEvent doesn't
  41. // work properly)
  42. Post;
  43. end;
  44. if state = dsinsert then
  45. Post;
  46. Close;
  47. Free;
  48. end;
  49. end;
  50. end;
  51. procedure TDBFDBConnector.CreateFieldDataset;
  52. var i : integer;
  53. begin
  54. with TDbf.Create(nil) do
  55. begin
  56. FilePath := dbname;
  57. TableName := 'fpdev_field.db';
  58. FieldDefs.Add('ID',ftInteger);
  59. FieldDefs.Add('FSTRING',ftString,10);
  60. FieldDefs.Add('FSMALLINT',ftSmallint);
  61. FieldDefs.Add('FINTEGER',ftInteger);
  62. // FieldDefs.Add('FWORD',ftWord);
  63. FieldDefs.Add('FBOOLEAN',ftBoolean);
  64. FieldDefs.Add('FFLOAT',ftFloat);
  65. // FieldDefs.Add('FCURRENCY',ftCurrency);
  66. // FieldDefs.Add('FBCD',ftBCD);
  67. FieldDefs.Add('FDATE',ftDate);
  68. // FieldDefs.Add('FTIME',ftTime);
  69. FieldDefs.Add('FDATETIME',ftDateTime);
  70. FieldDefs.Add('FLARGEINT',ftLargeint);
  71. CreateTable;
  72. Open;
  73. for i := 0 to testValuesCount-1 do
  74. begin
  75. Append;
  76. FieldByName('ID').AsInteger := i;
  77. FieldByName('FSTRING').AsString := testStringValues[i];
  78. FieldByName('FSMALLINT').AsInteger := testSmallIntValues[i];
  79. FieldByName('FINTEGER').AsInteger := testIntValues[i];
  80. FieldByName('FBOOLEAN').AsBoolean := testBooleanValues[i];
  81. FieldByName('FFLOAT').AsFloat := testFloatValues[i];
  82. ShortDateFormat := 'yyyy-mm-dd';
  83. FieldByName('FDATE').AsDateTime := StrToDate(testDateValues[i]);
  84. FieldByName('FLARGEINT').AsLargeInt := testLargeIntValues[i];
  85. Post;
  86. end;
  87. Close;
  88. end;
  89. end;
  90. procedure TDBFDBConnector.DropNDatasets;
  91. var n : integer;
  92. begin
  93. for n := 0 to MaxDataSet do
  94. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_'+inttostr(n)+'.db');
  95. end;
  96. procedure TDBFDBConnector.DropFieldDataset;
  97. begin
  98. DeleteFile(ExtractFilePath(dbname)+PathDelim+'fpdev_field.db');
  99. end;
  100. function TDBFDBConnector.InternalGetNDataset(n: integer): TDataset;
  101. begin
  102. Result := TDbf.Create(nil);
  103. with (result as TDbf) do
  104. begin
  105. FilePath := dbname;
  106. TableName := 'fpdev_'+inttostr(n)+'.db';
  107. end;
  108. end;
  109. function TDBFDBConnector.InternalGetFieldDataset: TDataSet;
  110. begin
  111. Result := TDbf.Create(nil);
  112. with (result as TDbf) do
  113. begin
  114. FilePath := dbname;
  115. TableName := 'fpdev_field.db';
  116. end;
  117. end;
  118. initialization
  119. RegisterClass(TDBFDBConnector);
  120. end.