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 (10 years, 10 months ago) by tony
Content type: text/x-pascal
File size: 8781 byte(s)
Log Message:
Committing updates for Release R1-0-5

File Contents

# User Rev Content
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 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