ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/public/ibx/trunk/design/ibdataseteditor.pas
Revision: 17
Committed: Sat Dec 28 19:22:24 2013 UTC (6 years, 6 months ago) by tony
File size: 8781 byte(s)
Log Message:
Committing updates for Release R1-0-5
Line File contents
1 (*
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 IBDataSetEditor;
28
29 {$mode objfpc}{$H+}
30
31 interface
32
33 uses
34 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs,
35 ComCtrls, StdCtrls, ExtCtrls, IBSystemTables, IBCustomDataSet, IBDatabase;
36
37 type
38
39 { TIBDataSetEditorForm }
40
41 TIBDataSetEditorForm = class(TForm)
42 TestBtn: TButton;
43 CancelButton: TButton;
44 FieldsPage: TTabSheet;
45 GenerateButton: TButton;
46 GroupBox1: TGroupBox;
47 IBTransaction1: TIBTransaction;
48 IncludePrimaryKeys: TCheckBox;
49 PrimaryKeyList: TListBox;
50 Label1: TLabel;
51 Label2: TLabel;
52 Label3: TLabel;
53 Label4: TLabel;
54 OkButton: TButton;
55 PageControl: TPageControl;
56 QuoteFields: TCheckBox;
57 SQLMemo: TMemo;
58 SQLPage: TTabSheet;
59 StatementType: TRadioGroup;
60 FieldList: TListBox;
61 TableNamesCombo: TComboBox;
62 procedure TestBtnClick(Sender: TObject);
63 procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);
64 procedure FormShow(Sender: TObject);
65 procedure GenerateButtonClick(Sender: TObject);
66 procedure SQLMemoChange(Sender: TObject);
67 procedure SQLPageShow(Sender: TObject);
68 procedure StatementTypeClick(Sender: TObject);
69 procedure TableNamesComboCloseUp(Sender: TObject);
70 private
71 { private declarations }
72 FDataSet: TIBDataSet;
73 FIBSystemTables: TIBSystemTables;
74 FDirty: boolean;
75 FCurrentStatement: integer;
76 FSelectSQL: TStringList;
77 FModifySQL: TStringList;
78 FInsertSQL: TStringList;
79 FDeleteSQL: TStringList;
80 FRefreshSQL: TStringList;
81 procedure UpdateSQLMemo;
82 public
83 { public declarations }
84 constructor Create(TheOwner: TComponent); override;
85 destructor Destroy; override;
86 procedure SetDataSet(AObject: TIBDataSet);
87 end;
88
89 var
90 IBDataSetEditorForm: TIBDataSetEditorForm;
91
92 function EditIBDataSet(DataSet: TIBDataSet): boolean;
93
94 implementation
95
96 {$R *.lfm}
97
98 function EditIBDataSet(DataSet: TIBDataSet): boolean;
99 begin
100 Result := false;
101 if assigned(DataSet) and assigned(DataSet.Database) then
102 try
103 DataSet.Database.Connected := true;
104 except on E: Exception do
105 ShowMessage(E.Message)
106 end;
107
108 with TIBDataSetEditorForm.Create(Application) do
109 try
110 SetDataSet(DataSet);
111 Result := ShowModal = mrOK
112 finally
113 Free
114 end;
115
116 end;
117
118 { TIBDataSetEditorForm }
119
120 procedure TIBDataSetEditorForm.FormShow(Sender: TObject);
121 var TableName: string;
122 begin
123 PageControl.ActivePage := FieldsPage;
124 FModifySQL.Assign(FDataSet.ModifySQL);
125 FInsertSQL.Assign(FDataSet.InsertSQL);
126 FDeleteSQL.Assign(FDataSet.DeleteSQL);
127 FRefreshSQL.Assign(FDataSet.RefreshSQL);
128 FSelectSQL.Assign(FDataSet.SelectSQL);
129 GenerateButton.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
130 TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected;
131 FCurrentStatement := -1;
132 TableNamesCombo.Items.Clear;
133 FIBSystemTables.GetTableNames(TableNamesCombo.Items);
134 if TableNamesCombo.Items.Count > 0 then
135 begin
136 TableNamesCombo.ItemIndex := 0;
137 if FSelectSQL.Text <> '' then
138 try
139 FIBSystemTables.GetTableAndColumns(FSelectSQL.Text,TableName,nil);
140 TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName);
141 except end;//ignore
142 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false);
143 FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
144 end;
145 end;
146
147 procedure TIBDataSetEditorForm.FormClose(Sender: TObject;
148 var CloseAction: TCloseAction);
149 begin
150 if ModalResult = mrOK then
151 begin
152 UpdateSQLMemo;
153 FDataSet.ModifySQL.Assign(FModifySQL);
154 FDataSet.InsertSQL.Assign(FInsertSQL);
155 FDataSet.DeleteSQL.Assign(FDeleteSQL);
156 FDataSet.RefreshSQL.Assign(FRefreshSQL);
157 FDataSet.SelectSQL.Assign(FSelectSQL);
158 end;
159 end;
160
161 procedure TIBDataSetEditorForm.TestBtnClick(Sender: TObject);
162 begin
163 if SQLMemo.Lines.Text <> '' then
164 FIBSystemTables.TestSQL(SQLMemo.Lines.Text);
165 end;
166
167 procedure TIBDataSetEditorForm.GenerateButtonClick(Sender: TObject);
168 var FieldNames: TStringList;
169 I: integer;
170 begin
171 FieldNames := TStringList.Create;
172 try
173 FRefreshSQL.Clear;
174 FSelectSQL.Clear;
175 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames);
176 FIBSystemTables.GenerateSelectSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FSelectSQL);
177 FIBSystemTables.GenerateRefreshSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FRefreshSQL);
178 FIBSystemTables.GenerateDeleteSQL(TableNamesCombo.Text,QuoteFields.Checked,FDeleteSQL);
179 FieldNames.Clear;
180 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames,true,false);
181 FIBSystemTables.GenerateInsertSQL(TableNamesCombo.Text,QuoteFields.Checked,
182 FieldNames,FInsertSQL);
183 if FieldList.SelCount = 0 then
184 begin
185 FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked,
186 FieldList.Items,FModifySQL);
187
188 end
189 else
190 begin
191 FieldNames.Clear;
192 for I := 0 to FieldList.Items.Count - 1 do
193 if FieldList.Selected[I] then
194 FieldNames.Add(FieldList.Items[I]);
195 FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked,
196 FieldNames,FModifySQL);
197 end;
198 FDirty := false;
199 PageControl.ActivePage := SQLPage;
200 finally
201 FieldNames.Free
202 end;
203 end;
204
205 procedure TIBDataSetEditorForm.SQLMemoChange(Sender: TObject);
206 begin
207 FDirty := true
208 end;
209
210 procedure TIBDataSetEditorForm.SQLPageShow(Sender: TObject);
211 begin
212 UpdateSQLMemo
213 end;
214
215 procedure TIBDataSetEditorForm.StatementTypeClick(Sender: TObject);
216 begin
217 UpdateSQLMemo
218 end;
219
220 procedure TIBDataSetEditorForm.TableNamesComboCloseUp(Sender: TObject);
221 begin
222 FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false);
223 FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items);
224 end;
225
226 procedure TIBDataSetEditorForm.UpdateSQLMemo;
227 begin
228 if FDirty then
229 case FCurrentStatement of
230 0: // Select
231 FSelectSQL.Assign(SQLMemo.Lines);
232 1: //Modify
233 FModifySQL.Assign(SQLMemo.Lines);
234 2: //Insert
235 FInsertSQL.Assign(SQLMemo.Lines);
236 3: // Delete
237 FDeleteSQL.Assign(SQLMemo.Lines);
238 4: //Refresh
239 FRefreshSQL.Assign(SQLMemo.Lines);
240 end;
241 FDirty := false;
242 case StatementType.ItemIndex of
243 0: //Select
244 SQLMemo.Lines.Assign(FSelectSQL);
245 1: // Modify
246 SQLMemo.Lines.Assign(FModifySQL) ;
247 2: //Insert
248 SQLMemo.Lines.Assign(FInsertSQL) ;
249 3: // Delete
250 SQLMemo.Lines.Assign(FDeleteSQL) ;
251 4: //Refresh
252 SQLMemo.Lines.Assign(FRefreshSQL) ;
253 end;
254 FCurrentStatement := StatementType.ItemIndex;
255 end;
256
257 constructor TIBDataSetEditorForm.Create(TheOwner: TComponent);
258 begin
259 inherited Create(TheOwner);
260 FIBSystemTables := TIBSystemTables.Create;
261 FModifySQL := TStringList.Create;
262 FInsertSQL := TStringList.Create;
263 FDeleteSQL := TStringList.Create;
264 FRefreshSQL := TStringList.Create;
265 FSelectSQL := TStringList.Create;
266 end;
267
268 destructor TIBDataSetEditorForm.Destroy;
269 begin
270 if assigned(FIBSystemTables) then FIBSystemTables.Free;
271 if assigned(FModifySQL) then FModifySQL.Free;
272 if assigned(FInsertSQL) then FInsertSQL.Free;
273 if assigned(FDeleteSQL) then FDeleteSQL.Free;
274 if assigned(FRefreshSQL) then FRefreshSQL.Free;
275 if assigned(FSelectSQL) then FSelectSQL.Free;
276 inherited Destroy;
277 end;
278
279 procedure TIBDataSetEditorForm.SetDataSet(AObject: TIBDataSet);
280 begin
281 FDataSet := AObject;
282 IBTransaction1.DefaultDatabase := FDataSet.Database;
283 if assigned(FDataSet) then
284 FIBSystemTables.SelectDatabase(FDataSet.Database,IBTransaction1);
285 end;
286
287 end.
288