Files

137 lines
3.3 KiB
ObjectPascal

{*******************************************************}
{ }
{ Delphi Visual Component Library }
{ Open QBuilder Engine for IBX Sources }
{ }
{ Copyright (c) 2003 Fast Reports, Inc. }
{ }
{ Adapted to Lazarus by Reinier Olislagers October 2014 }
{*******************************************************}
//untested: ibx users, please test!
unit QBEIBX;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DB, IBDatabase, IBQuery, QBuilder;
type
TOQBEngineIBX = class(TOQBEngine)
private
FResultQuery: TIBQuery;
FIBXConnection : TIBDatabase;
FTransaction : TIBTransaction;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ClearQuerySQL; override;
procedure CloseResultQuery; override;
procedure OpenResultQuery; override;
procedure ReadFieldList(const ATableName: string); override;
procedure ReadTableList; override;
procedure SaveResultQueryData; override;
procedure SetConnection(Value: TIBDatabase);
procedure SetQuerySQL(const Value: string); override;
function ResultQuery: TDataSet; override;
function SelectDatabase: Boolean; override;
procedure Notification(AComponent: TComponent; Operation: TOperation); override;
published
// Breaking change: used to be DatabaseName
property Connection: TIBDatabase read FIBXConnection write SetConnection;
end;
implementation
{ TOQBEngineIBX }
constructor TOQBEngineIBX.Create(AOwner: TComponent);
begin
inherited;
FResultQuery := TIBQuery.Create(Self);
FTransaction := TIBTransaction.Create(Self);
FResultQuery.Transaction := FTransaction;
end;
destructor TOQBEngineIBX.Destroy;
begin
FResultQuery.Free;
FTransaction.Free;
inherited;
end;
procedure TOQBEngineIBX.SetConnection(Value: TIBDatabase);
begin
FIBXConnection := Value;
FResultQuery.Database := Value;
end;
function TOQBEngineIBX.SelectDatabase: Boolean;
begin
Result := True;
end;
procedure TOQBEngineIBX.ReadTableList;
begin
TableList.Clear;
FResultQuery.Database.GetTableNames(TableList, ShowSystemTables);
end;
procedure TOQBEngineIBX.ReadFieldList(const ATableName: string);
begin
FieldList.Clear;
FResultQuery.Database.GetFieldNames(ATableName, FieldList);
FieldList.Insert(0, '*');
end;
procedure TOQBEngineIBX.ClearQuerySQL;
begin
FResultQuery.SQL.Clear;
end;
procedure TOQBEngineIBX.SetQuerySQL(const Value: string);
begin
FResultQuery.SQL.Text := Value;
end;
function TOQBEngineIBX.ResultQuery: TDataSet;
begin
Result := FResultQuery;
end;
procedure TOQBEngineIBX.OpenResultQuery;
begin
FTransaction.DefaultDatabase := FIBXConnection;
FTransaction.Active := True;
FResultQuery.Open;
end;
procedure TOQBEngineIBX.CloseResultQuery;
begin
FResultQuery.Close;
end;
{$WARNINGS OFF}
procedure TOQBEngineIBX.SaveResultQueryData;
begin
//
end;
{$WARNINGS ON}
procedure TOQBEngineIBX.Notification(AComponent: TComponent;
Operation: TOperation);
begin
inherited;
if (AComponent = FIBXConnection) and (Operation = opRemove) then
begin
FIBXCOnnection := nil;
FResultQuery.Database := nil;
end;
end;
end.