123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- {*******************************************************}
- { }
- { Open QBuilder Engine for ZEOS Sources }
- { Lazarus / Free Pascal }
- { }
- { Created by Jean Patrick }
- { Data: 14/02/2013 }
- { E-mail: [email protected] }
- { }
- {*******************************************************}
- unit QBEZEOS;
- interface
- uses
- types, SysUtils, Classes, DB, ZDataset, ZConnection, QBuilder;
- type
- { TOQBEngineZEOS }
- TOQBEngineZEOS = class(TOQBEngine)
- procedure FResultQueryAfterOpen(DataSet: TDataSet);
- procedure GridFloatFieldGetText(Sender: TField; var aText: string;
- DisplayText: Boolean);
- procedure GridMemoFieldGetText(Sender: TField; var aText: string;
- DisplayText: Boolean);
- private
- FResultQuery: TZQuery;
- FZEOSConnection : TZConnection;
- public
- SchemaPostgreSQL : String;
- 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: TZConnection);
- procedure SetQuerySQL(const Value: string); override;
- function ResultQuery: TDataSet; override;
- function SelectDatabase: Boolean; override;
- procedure Notification(AComponent: TComponent; Operation: TOperation); override;
- published
- // ZEOS connection to be used
- // Breaks backward compatibility: used to be DatabaseName
- property Connection: TZConnection read FZEOSConnection write SetConnection;
- end;
- implementation
- { TOQBEngineZEOS }
- procedure TOQBEngineZEOS.FResultQueryAfterOpen(DataSet: TDataSet);
- var
- i: Integer;
- begin
- for i := 0 to DataSet.Fields.Count - 1 do
- begin
- if DataSet.Fields[i].DataType = ftMemo then
- begin
- DataSet.Fields[i].OnGetText := @GridMemoFieldGetText;
- end;
- // Work around Zeos 7.0.3 bug with DOUBLE PRECISION fields in Firebird
- if (DataSet.Fields[i].DataType = ftFloat) and
- (Pos('firebird',FZEOSConnection.Protocol) > 0) and
- (FZEOSConnection.Version = '7.0.3-stable') then
- begin
- DataSet.Fields[i].OnGetText := @GridFloatFieldGetText;
- end;
- // ------------------------------------------------------------------
- end;
- end;
- procedure TOQBEngineZEOS.GridFloatFieldGetText(Sender: TField;
- var aText: string; DisplayText: Boolean);
- begin
- // Work around Zeos 7.0.3 bug with DOUBLE PRECISION fields in Firebird
- aText := FloatToStr(TField(Sender).AsFloat);
- end;
- procedure TOQBEngineZEOS.GridMemoFieldGetText(Sender: TField;
- var aText: string; DisplayText: Boolean);
- begin
- // Show memo fields
- aText := TField(Sender).AsString;
- end;
- constructor TOQBEngineZEOS.Create(AOwner: TComponent);
- begin
- inherited;
- FResultQuery := TZQuery.Create(Self);
- FResultQuery.AfterOpen := @FResultQueryAfterOpen;
- end;
- destructor TOQBEngineZEOS.Destroy;
- begin
- FResultQuery.Free;
- inherited;
- end;
- procedure TOQBEngineZEOS.SetConnection(Value: TZConnection);
- begin
- FZEOSConnection := Value;
- FResultQuery.Connection := Value;
- end;
- function TOQBEngineZEOS.SelectDatabase: Boolean;
- begin
- Result := True;
- end;
- procedure TOQBEngineZEOS.ReadTableList;
- var
- vTypesTables: TStringDynArray;
- begin
- SetLength(vTypesTables,2);
- vTypesTables[0] := 'TABLE';
- vTypesTables[1] := 'VIEW';
- if ShowSystemTables then begin
- SetLength(vTypesTables,3);
- vTypesTables[0] := 'TABLE';
- vTypesTables[1] := 'VIEW';
- vTypesTables[2] := 'SYSTEM TABLE';
- end;
- TableList.Clear;
- FResultQuery.Connection.GetTableNames(SchemaPostgreSQL,'',vTypesTables,TableList);
- end;
- procedure TOQBEngineZEOS.ReadFieldList(const ATableName: string);
- begin
- FieldList.Clear;
- FResultQuery.Connection.GetColumnNames(ATableName, '', FieldList);
- FieldList.Insert(0, '*');
- end;
- procedure TOQBEngineZEOS.ClearQuerySQL;
- begin
- FResultQuery.SQL.Clear;
- end;
- procedure TOQBEngineZEOS.SetQuerySQL(const Value: string);
- begin
- FResultQuery.SQL.Text := Value;
- end;
- function TOQBEngineZEOS.ResultQuery: TDataSet;
- begin
- Result := FResultQuery;
- end;
- procedure TOQBEngineZEOS.OpenResultQuery;
- begin
- try
- FResultQuery.Open;
- finally
- end;
- end;
- procedure TOQBEngineZEOS.CloseResultQuery;
- begin
- FResultQuery.Close;
- end;
- {$WARNINGS OFF}
- procedure TOQBEngineZEOS.SaveResultQueryData;
- begin
- //
- end;
- {$WARNINGS ON}
- procedure TOQBEngineZEOS.Notification(AComponent: TComponent;
- Operation: TOperation);
- begin
- inherited;
- if (AComponent = FZEOSConnection) and (Operation = opRemove) then
- begin
- FZEOSCOnnection := nil;
- FResultQuery.Connection := nil;
- end;
- end;
- end.
|