QBEIBX.pas 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. {*******************************************************}
  2. { }
  3. { Delphi Visual Component Library }
  4. { Open QBuilder Engine for IBX Sources }
  5. { }
  6. { Copyright (c) 2003 Fast Reports, Inc. }
  7. { }
  8. { Adapted to Lazarus by Reinier Olislagers October 2014 }
  9. {*******************************************************}
  10. //untested: ibx users, please test!
  11. unit QBEIBX;
  12. interface
  13. uses
  14. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  15. StdCtrls, ExtCtrls, DB, IBDatabase, IBQuery, QBuilder;
  16. type
  17. TOQBEngineIBX = class(TOQBEngine)
  18. private
  19. FResultQuery: TIBQuery;
  20. FIBXConnection : TIBDatabase;
  21. FTransaction : TIBTransaction;
  22. public
  23. constructor Create(AOwner: TComponent); override;
  24. destructor Destroy; override;
  25. procedure ClearQuerySQL; override;
  26. procedure CloseResultQuery; override;
  27. procedure OpenResultQuery; override;
  28. procedure ReadFieldList(const ATableName: string); override;
  29. procedure ReadTableList; override;
  30. procedure SaveResultQueryData; override;
  31. procedure SetConnection(Value: TIBDatabase);
  32. procedure SetQuerySQL(const Value: string); override;
  33. function ResultQuery: TDataSet; override;
  34. function SelectDatabase: Boolean; override;
  35. procedure Notification(AComponent: TComponent; Operation: TOperation); override;
  36. published
  37. // Breaking change: used to be DatabaseName
  38. property Connection: TIBDatabase read FIBXConnection write SetConnection;
  39. end;
  40. implementation
  41. { TOQBEngineIBX }
  42. constructor TOQBEngineIBX.Create(AOwner: TComponent);
  43. begin
  44. inherited;
  45. FResultQuery := TIBQuery.Create(Self);
  46. FTransaction := TIBTransaction.Create(Self);
  47. FResultQuery.Transaction := FTransaction;
  48. end;
  49. destructor TOQBEngineIBX.Destroy;
  50. begin
  51. FResultQuery.Free;
  52. FTransaction.Free;
  53. inherited;
  54. end;
  55. procedure TOQBEngineIBX.SetConnection(Value: TIBDatabase);
  56. begin
  57. FIBXConnection := Value;
  58. FResultQuery.Database := Value;
  59. end;
  60. function TOQBEngineIBX.SelectDatabase: Boolean;
  61. begin
  62. Result := True;
  63. end;
  64. procedure TOQBEngineIBX.ReadTableList;
  65. begin
  66. TableList.Clear;
  67. FResultQuery.Database.GetTableNames(TableList, ShowSystemTables);
  68. end;
  69. procedure TOQBEngineIBX.ReadFieldList(const ATableName: string);
  70. begin
  71. FieldList.Clear;
  72. FResultQuery.Database.GetFieldNames(ATableName, FieldList);
  73. FieldList.Insert(0, '*');
  74. end;
  75. procedure TOQBEngineIBX.ClearQuerySQL;
  76. begin
  77. FResultQuery.SQL.Clear;
  78. end;
  79. procedure TOQBEngineIBX.SetQuerySQL(const Value: string);
  80. begin
  81. FResultQuery.SQL.Text := Value;
  82. end;
  83. function TOQBEngineIBX.ResultQuery: TDataSet;
  84. begin
  85. Result := FResultQuery;
  86. end;
  87. procedure TOQBEngineIBX.OpenResultQuery;
  88. begin
  89. FTransaction.DefaultDatabase := FIBXConnection;
  90. FTransaction.Active := True;
  91. FResultQuery.Open;
  92. end;
  93. procedure TOQBEngineIBX.CloseResultQuery;
  94. begin
  95. FResultQuery.Close;
  96. end;
  97. {$WARNINGS OFF}
  98. procedure TOQBEngineIBX.SaveResultQueryData;
  99. begin
  100. //
  101. end;
  102. {$WARNINGS ON}
  103. procedure TOQBEngineIBX.Notification(AComponent: TComponent;
  104. Operation: TOperation);
  105. begin
  106. inherited;
  107. if (AComponent = FIBXConnection) and (Operation = opRemove) then
  108. begin
  109. FIBXCOnnection := nil;
  110. FResultQuery.Database := nil;
  111. end;
  112. end;
  113. end.