ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/ibselectsqleditor.pas
Revision: 17
Committed: Sat Dec 28 19:22:24 2013 UTC (6 years, 7 months ago) by tony
File size: 7324 byte(s)
Log Message:
Committing updates for Release R1-0-5
Line User Rev File contents
1 tony 17 (*
2     * IBX For Lazarus (Firebird Express)
3     *
4     * The contents of this file are subject to the Initial Developer's
5     * Public License Version 1.0 (the "License"); you may not use this
6     * file except in compliance with the License. You may obtain a copy
7     * of the License here:
8     *
9     * http://www.firebirdsql.org/index.php?op=doc&id=idpl
10     *
11     * Software distributed under the License is distributed on an "AS
12     * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
13     * implied. See the License for the specific language governing rights
14     * and limitations under the License.
15     *
16     * The Initial Developer of the Original Code is Tony Whyman.
17     *
18     * The Original Code is (C) 2011 Tony Whyman, MWA Software
19     * (http://www.mwasoftware.co.uk).
20     *
21     * All Rights Reserved.
22     *
23     * Contributor(s): ______________________________________.
24     *
25     *)
26    
27     unit ibselectsqleditor;
28    
29     {$mode objfpc}{$H+}
30    
31     interface
32    
33     uses
34     Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
35     StdCtrls, ComCtrls, IBSystemTables, IBDatabase;
36    
37     type
38    
39     { TIBSelectSQLEditorForm }
40    
41     TIBSelectSQLEditorForm = class(TForm)
42     Button1: TButton;
43     Button2: TButton;
44     GenerateBtn: TButton;
45     SelectProcedure: TLabel;
46     TestBtn: TButton;
47     FieldList: TListBox;
48     IBTransaction1: TIBTransaction;
49     Label1: TLabel;
50     Label16: TLabel;
51     Label17: TLabel;
52     Label18: TLabel;
53     Label2: TLabel;
54     Label3: TLabel;
55     Label4: TLabel;
56     PageControl: TPageControl;
57     PrimaryKeyList: TListBox;
58     ProcedureNames: TComboBox;
59     ProcInputList: TListBox;
60     ProcOutputList: TListBox;
61     QuoteFields: TCheckBox;
62     SQLText: TMemo;
63     TableNamesCombo: TComboBox;
64     SelectPage: TTabSheet;
65     ExecutePage: TTabSheet;
66     procedure GenerateBtnClick(Sender: TObject);
67     procedure TestBtnClick(Sender: TObject);
68     procedure ExecutePageShow(Sender: TObject);
69     procedure FieldListDblClick(Sender: TObject);
70     procedure FormShow(Sender: TObject);
71     procedure PrimaryKeyListDblClick(Sender: TObject);
72     procedure ProcedureNamesCloseUp(Sender: TObject);
73     procedure SelectPageShow(Sender: TObject);
74     procedure TableNamesComboCloseUp(Sender: TObject);
75     private
76     { private declarations }
77     FIBSystemTables: TIBSystemTables;
78     FExecuteOnly: boolean;
79     public
80     { public declarations }
81     constructor Create(TheOwner: TComponent); override;
82     destructor Destroy; override;
83     procedure SetDatabase(Database: TIBDatabase);
84     end;
85    
86     var
87     IBSelectSQLEditorForm: TIBSelectSQLEditorForm;
88    
89     function EditSQL(Database: TIBDatabase; SelectSQL: TStrings): boolean;
90    
91     implementation
92    
93     uses IBSQL;
94    
95     {$R *.lfm}
96    
97     function EditSQL(Database: TIBDatabase; SelectSQL: TStrings): boolean;
98     begin
99     Result := false;
100     if assigned(Database) then
101     try
102     Database.Connected := true;
103     except on E: Exception do
104     ShowMessage(E.Message)
105     end;
106    
107     with TIBSelectSQLEditorForm.Create(Application) do
108     try
109     SetDatabase(Database);
110     SQLText.Lines.Assign(SelectSQL);
111     Result := ShowModal = mrOK;
112     if Result then
113     SelectSQL.Assign(SQLText.Lines)
114     finally
115     Free
116     end;
117     end;
118    
119     { TIBSelectSQLEditorForm }
120    
121     procedure TIBSelectSQLEditorForm.FormShow(Sender: TObject);
122     var IsProcedureName: boolean;
123     begin
124     GenerateBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
125     TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
126     if Trim(SQLText.Text) <> '' then
127     begin
128     try
129     FIBSystemTables.GetStatementType(SQLText.Text,IsProcedureName);
130     except end;
131     if IsProcedureName then
132     PageControl.ActivePage := ExecutePage
133     else
134     PageControl.ActivePage := SelectPage;
135     end
136     else
137     PageControl.ActivePage := SelectPage;
138     end;
139    
140     procedure TIBSelectSQLEditorForm.PrimaryKeyListDblClick(Sender: TObject);
141     begin
142     SQLText.SelText := PrimaryKeyList.Items[PrimaryKeyList.ItemIndex];
143     SQLText.SetFocus
144     end;
145    
146     procedure TIBSelectSQLEditorForm.ProcedureNamesCloseUp(Sender: TObject);
147     begin
148     FIBSystemTables.GetProcParams(ProcedureNames.Text,FExecuteOnly,ProcInputList.Items,ProcOutputList.Items);
149     SelectProcedure.Visible := not FExecuteOnly
150     end;
151    
152     procedure TIBSelectSQLEditorForm.SelectPageShow(Sender: TObject);
153     var TableName: string;
154     begin
155     TableNamesCombo.Items.Clear;
156     FIBSystemTables.GetTableNames(TableNamesCombo.Items);
157     if TableNamesCombo.Items.Count > 0 then
158     begin
159     TableNamesCombo.ItemIndex := 0;
160     if Trim(SQLText.Text) <> '' then
161     begin
162     FIBSystemTables.GetTableAndColumns(SQLText.Text,TableName,nil);
163     TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName)
164     end;
165     FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items);
166     FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
167     end;
168     end;
169    
170     procedure TIBSelectSQLEditorForm.FieldListDblClick(Sender: TObject);
171     begin
172     SQLText.SelText := FieldList.Items[FieldList.ItemIndex];
173     SQLText.SetFocus
174     end;
175    
176     procedure TIBSelectSQLEditorForm.GenerateBtnClick(Sender: TObject);
177     var FieldNames: TStrings;
178     begin
179     if PageControl.ActivePage = ExecutePage then
180     FIBSystemTables.GenerateExecuteSQL(ProcedureNames.Text,QuoteFields.Checked,FExecuteOnly,
181     ProcInputList.Items,ProcOutputList.Items,SQLText.Lines)
182     else
183     begin
184     FieldNames := FIBSystemTables.GetFieldNames(FieldList);
185     try
186     FIBSystemTables.GenerateSelectSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,SQLText.Lines)
187     finally
188     FieldNames.Free
189     end;
190     end;
191     end;
192    
193     procedure TIBSelectSQLEditorForm.TestBtnClick(Sender: TObject);
194     begin
195     FIBSystemTables.TestSQL(SQLText.Lines.Text)
196     end;
197    
198     procedure TIBSelectSQLEditorForm.ExecutePageShow(Sender: TObject);
199     var ProcName: string;
200     IsProcedureName: boolean;
201     begin
202     FIBSystemTables.GetProcedureNames(ProcedureNames.Items,true);
203     if ProcedureNames.Items.Count > 0 then
204     begin
205     if (FIBSystemTables.GetStatementType(SQLText.Text,IsProcedureName) = SQLExecProcedure) or IsProcedureName then
206     begin
207     FIBSystemTables.GetTableAndColumns(SQLText.Text,ProcName,nil);
208     ProcedureNames.ItemIndex := ProcedureNames.Items.IndexOf(ProcName)
209     end
210     else
211     ProcedureNames.ItemIndex := 0;
212     end;
213     FIBSystemTables.GetProcParams(ProcedureNames.Text,FExecuteOnly,ProcInputList.Items,ProcOutputList.Items);
214     SelectProcedure.Visible := not FExecuteOnly
215     end;
216    
217     procedure TIBSelectSQLEditorForm.TableNamesComboCloseUp(Sender: TObject);
218     begin
219     FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items);
220     FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
221     end;
222    
223     constructor TIBSelectSQLEditorForm.Create(TheOwner: TComponent);
224     begin
225     inherited Create(TheOwner);
226     FIBSystemTables := TIBSystemTables.Create;
227     end;
228    
229     destructor TIBSelectSQLEditorForm.Destroy;
230     begin
231     if assigned(FIBSystemTables) then FIBSystemTables.Free;
232     inherited Destroy;
233     end;
234    
235     procedure TIBSelectSQLEditorForm.SetDatabase(Database: TIBDatabase);
236     begin
237     IBTransaction1.DefaultDatabase := Database;
238     FIBSystemTables.SelectDatabase(Database,IBTransaction1)
239     end;
240    
241     end.
242