toolsunit.pas 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. procedure DataEvent(dataset :TDataset);
  20. Function GetNDataset(n : integer) : TDataset; virtual;
  21. procedure InitialiseDatasets; virtual;
  22. procedure FreeDatasets; virtual;
  23. end;
  24. { TTestDataLink }
  25. TTestDataLink = class(TDataLink)
  26. protected
  27. {$IFDEF fpc}
  28. procedure DataEvent(Event: TDataEvent; Info: Ptrint); override;
  29. {$ELSE}
  30. procedure DataEvent(Event: TDataEvent; Info: longint); override;
  31. {$ENDIF}
  32. end;
  33. type TDBTypes=(mysql40,mysql41,mysql50,interbase,postgresql,odbc,oracle,dbf);
  34. const
  35. DBTypesNames : Array [TDBTypes] of String[19] =
  36. ('mysql40','mysql41','mysql50','interbase','postgresql','odbc','oracle','dbf');
  37. DataEventnames : Array [TDataEvent] of String[19] =
  38. ('deFieldChange', 'deRecordChange', 'deDataSetChange', 'deDataSetScroll',
  39. 'deLayoutChange', 'deUpdateRecord', 'deUpdateState', 'deCheckBrowseMode',
  40. 'dePropertyChange', 'deFieldListChange', 'deFocusControl' ,'deParentScroll'
  41. {$IFNDEF VER2_0_2}, 'deConnectChange','deReconcileError','deDisabledStateChange'{$ENDIF}
  42. );
  43. var dbtype : TDBTypes;
  44. dbname,
  45. dbuser,
  46. dbhostname,
  47. dbpassword : string;
  48. DBConnector : TDBConnector;
  49. DataEvents : string;
  50. procedure InitialiseDBConnector;
  51. resourcestring
  52. SIgnoreAssertion = 'You can safely ignore this failure. This function is just not supported by the selected database';
  53. implementation
  54. uses
  55. {$IFDEF SQLDB_AVAILABLE}
  56. sqldbtoolsunit,
  57. {$ENDIF}
  58. {$IFDEF DBF_AVAILABLE}
  59. dbftoolsunit,
  60. {$ENDIF}
  61. inifiles;
  62. procedure TDBConnector.DataEvent(dataset : tdataset);
  63. begin
  64. DataEvents := DataEvents + 'DataEvent' + ';';
  65. end;
  66. procedure ReadIniFile;
  67. var IniFile : TIniFile;
  68. s : string;
  69. i : TDBTypes;
  70. begin
  71. IniFile := TIniFile.Create(getcurrentdir + PathDelim + 'database.ini');
  72. s := IniFile.ReadString('Database','Type','');
  73. for i := low(DBTypesNames) to high(DBTypesNames) do
  74. if s = DBTypesNames[i] then dbtype := i;
  75. dbname := IniFile.ReadString(s,'Name','');
  76. dbuser := IniFile.ReadString(s,'User','');
  77. dbhostname := IniFile.ReadString(s,'Hostname','');
  78. dbpassword := IniFile.ReadString(s,'Password','');
  79. IniFile.Free;
  80. end;
  81. procedure InitialiseDBConnector;
  82. begin
  83. // ReadIniFile;
  84. if (1 <> 1) then begin end
  85. {$IFDEF SQLDB_AVAILABLE}
  86. else if (dbtype in SQLDBdbTypes) then DBConnector := TSQLDBConnector.Create
  87. {$ENDIF}
  88. {$IFDEF DBF_AVAILABLE}
  89. else if dbtype = dbf then DBConnector := TDBFDBConnector.Create
  90. {$ENDIF}
  91. else Raise Exception.Create('Invalid database-type specified');
  92. end;
  93. { TTestDataLink }
  94. {$IFDEF FPC}
  95. procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Ptrint);
  96. {$ELSE}
  97. procedure TTestDataLink.DataEvent(Event: TDataEvent; Info: Longint);
  98. {$ENDIF}
  99. begin
  100. DataEvents := DataEvents + DataEventnames[Event] + ':' + inttostr(info) + ';';
  101. inherited DataEvent(Event, Info);
  102. end;
  103. { TDBConnector }
  104. function TDBConnector.GetNDataset(n: integer): TDataset;
  105. begin
  106. Result := FDatasets[n];
  107. end;
  108. procedure TDBConnector.InitialiseDatasets;
  109. var count : integer;
  110. begin
  111. for count := 0 to MaxDataSet do
  112. FDatasets[count] := CreateNDataset(count);
  113. end;
  114. procedure TDBConnector.FreeDatasets;
  115. var count : integer;
  116. begin
  117. for count := 0 to MaxDataSet do if assigned(FDatasets[count]) then
  118. FreeNDataset(FDatasets[count]);
  119. end;
  120. initialization
  121. ReadIniFile;
  122. end.