Componentes.Terceros.FastRe.../official/3.23/FastQB/fib/fqbFIBEngine.pas
2007-09-10 15:54:09 +00:00

123 lines
3.1 KiB
ObjectPascal

{*******************************************}
{ }
{ FastQueryBuilder 1.01 }
{ }
{ Copyright (c) 2005 }
{ Fast Reports Inc. }
{ }
{*******************************************}
{$I fqb.inc}
unit fqbFIBEngine;
interface
uses
Windows, Messages, Classes, Dialogs, DB
{$IFDEF Delphi6}
,Variants
{$ENDIF}
,fqbClass, FIBDatabase, pFIBDatabase, FIBDataSet, pFIBDataSet;
type
TfqbFIBEngine = class(TfqbEngine)
private
FDatabase: TpFIBDatabase;
FQuery: TFIBDataSet;
procedure SetDatabase(Value: TpFIBDatabase);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure ReadFieldList(const ATableName: string; var AFieldList: TfqbFieldList);
override;
procedure ReadTableList(ATableList: TStrings); override;
function ResultDataSet: TDataSet; override;
procedure SetSQL(const Value: string); override;
published
property Database: TpFIBDatabase read FDatabase write SetDatabase;
end;
implementation
uses SysUtils, FIBQuery;
{----------------------- TfqbFIBEngine -----------------------}
constructor TfqbFIBEngine.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FQuery := TFIBDataSet.Create(Self);
end;
destructor TfqbFIBEngine.Destroy;
begin
FQuery.Free;
inherited Destroy;
end;
procedure TfqbFIBEngine.ReadFieldList(const ATableName: string; var AFieldList:
TfqbFieldList);
var
tmpTransaction: TFIBTransaction;
tbl: TFIBDataSet;
tmpField: TfqbField;
i: Integer;
begin
tbl := TFIBDataSet.Create(Self);
tmpTransaction := TFIBTransaction.Create(Self);
tmpTransaction.DefaultDatabase := FDatabase;
try
tbl.Database := FDatabase;
tbl.Transaction := tmpTransaction;
tbl.SelectSQL.Add('SELECT *');
tbl.SelectSQL.Add('FROM ' + UpperCase(ATableName));
tmpTransaction.StartTransaction;
tbl.Prepare;
tbl.Open;
tmpField:= TfqbField(AFieldList.Add);
tmpField.FieldName := '*';
for i := 0 to tbl.FieldCount - 1 do
begin
tmpField:= TfqbField(AFieldList.Add);
tmpField.FieldName := tbl.Fields[i].DisplayName;
tmpField.FieldType := Ord(tbl.Fields[i].DataType);
end
finally
if tmpTransaction.Active then
tmpTransaction.Commit;
tbl.Close;
tbl.Free;
tmpTransaction.Free;
end;
end;
procedure TfqbFIBEngine.ReadTableList(ATableList: TStrings);
begin
ATableList.Clear;
FDatabase.Open;
FDatabase.GetTableNames(ATableList, ShowSystemTables);
end;
function TfqbFIBEngine.ResultDataSet: TDataSet;
begin
Result := FQuery
end;
procedure TfqbFIBEngine.SetDatabase(Value: TpFIBDatabase);
begin
FQuery.Close;
FDatabase := Value;
FQuery.Database := FDatabase;
end;
procedure TfqbFIBEngine.SetSQL(const Value: string);
begin
FQuery.Close;
FQuery.SelectSQL.Text := Value;
end;
end.