toolsunit.pas 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. unit ToolsUnit;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. {$I settings.inc}
  6. interface
  7. uses
  8. Classes, SysUtils, DB;
  9. Const MaxDataSet = 35;
  10. type
  11. { TDBConnector }
  12. TDBConnector = class(TObject)
  13. private
  14. FDatasets : array[0..MaxDataset] of TDataset;
  15. protected
  16. Procedure FreeNDataset(var ds : TDataset); virtual; abstract;
  17. Function CreateNDataset(n : integer) : TDataset; virtual; abstract;
  18. public
  19. Function GetNDataset(n : integer) : TDataset; virtual;
  20. procedure InitialiseDatasets; virtual;
  21. procedure FreeDatasets; virtual;
  22. end;
  23. { TTestDataLink }
  24. TTestDataLink = class(TDataLink)
  25. protected
  26. {$IFDEF fpc}
  27. procedure DataEvent(Event: TDataEvent; Info: Ptrint); override;
  28. {$ELSE}
  29. procedure DataEvent(Event: TDataEvent; Info: longint); override;
  30. {$ENDIF}
  31. end;
  32. const
  33. DataEventnames : Array [TDataEvent] of String[19] =
  34. ('deFieldChange', 'deRecordChange', 'deDataSetChange', 'deDataSetScroll',
  35. 'deLayoutChange', 'deUpdateRecord', 'deUpdateState', 'deCheckBrowseMode',
  36. 'dePropertyChange', 'deFieldListChange', 'deFocusControl' ,'deParentScroll'
  37. {$IFNDEF VER2_0_2}, 'deConnectChange','deReconcileError','deDisabledStateChange'{$ENDIF}
  38. );
  39. var dbtype,
  40. dbname,
  41. dbuser,
  42. dbhostname,
  43. dbpassword : string;
  44. DBConnector : TDBConnector;
  45. DataEvents : string;
  46. procedure InitialiseDBConnector;
  47. implementation
  48. uses
  49. {$IFDEF SQLDB_AVAILABLE}
  50. sqldbtoolsunit,
  51. {$ENDIF}
  52. {$IFDEF DBF_AVAILABLE}
  53. dbftoolsunit,
  54. {$ENDIF}
  55. inifiles;
  56. procedure ReadIniFile;
  57. var IniFile : TIniFile;
  58. begin
  59. IniFile := TIniFile.Create(getcurrentdir + PathDelim + 'database.ini');
  60. dbtype := IniFile.ReadString('Database','Type','');
  61. dbname := IniFile.ReadString('Database','Name','');
  62. dbuser := IniFile.ReadString('Database','User','');
  63. dbhostname := IniFile.ReadString('Database','Hostname','');
  64. dbpassword := IniFile.ReadString('Database','Password','');
  65. IniFile.Free;
  66. end;
  67. procedure InitialiseDBConnector;
  68. begin
  69. ReadIniFile;
  70. if (1 <> 1) then begin end
  71. {$IFDEF SQLDB_AVAILABLE}
  72. else if (dbtype = 'interbase') or (dbtype = 'postgresql') or (dbtype = 'mysql50') or (dbtype = 'mysql40') or (dbtype = 'mysql41') then DBConnector := TSQLDBConnector.Create
  73. {$ENDIF}
  74. {$IFDEF DBF_AVAILABLE}
  75. else if dbtype = 'dbf' then DBConnector := TDBFDBConnector.Create
  76. {$ENDIF}
  77. else Raise Exception.Create('Invalid database-type specified');
  78. end;
  79. { TTestDataLink }
  80. {$IFDEF FPC}
  81. procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Ptrint);
  82. {$ELSE}
  83. procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Longint);
  84. {$ENDIF}
  85. begin
  86. DataEvents := DataEvents + DataEventnames[Event] + ':' + inttostr(info) + ';';
  87. inherited DataEvent(Event, Info);
  88. end;
  89. { TDBConnector }
  90. function TDBConnector.GetNDataset(n: integer): TDataset;
  91. begin
  92. Result := FDatasets[n];
  93. end;
  94. procedure TDBConnector.InitialiseDatasets;
  95. var count : integer;
  96. begin
  97. for count := 0 to MaxDataSet do
  98. FDatasets[count] := CreateNDataset(count);
  99. end;
  100. procedure TDBConnector.FreeDatasets;
  101. var count : integer;
  102. begin
  103. for count := 0 to MaxDataSet do if assigned(FDatasets[count]) then
  104. FreeNDataset(FDatasets[count]);
  105. end;
  106. end.