--- ibx/trunk/design/ibinsertsqleditor.pas 2014/07/07 13:00:15 20 +++ ibx/trunk/design/ibinsertsqleditor.pas 2015/02/26 10:33:34 21 @@ -32,7 +32,7 @@ interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, - StdCtrls, IBSystemTables, IBDatabase, IBCustomDataSet; + StdCtrls, ComCtrls, IBSystemTables, IBDatabase, IBCustomDataSet; type @@ -41,18 +41,31 @@ type TIBInsertSQLEditorForm = class(TForm) Button1: TButton; Button2: TButton; + ExecuteOnlyIndicator: TLabel; + FieldList: TListBox; GenerateBtn: TButton; GenerateParams: TCheckBox; - TestBtn: TButton; - FieldList: TListBox; - IBTransaction1: TIBTransaction; Label1: TLabel; + Label16: TLabel; + Label17: TLabel; + Label18: TLabel; Label2: TLabel; + PageControl: TPageControl; + ProcedureNames: TComboBox; + ProcInputList: TListBox; + ProcOutputList: TListBox; + TableNamesCombo: TComboBox; + InsertPage: TTabSheet; + ExecutePage: TTabSheet; + TestBtn: TButton; + IBTransaction1: TIBTransaction; Label3: TLabel; QuoteFields: TCheckBox; SQLText: TMemo; - TableNamesCombo: TComboBox; + procedure ExecutePageShow(Sender: TObject); procedure GenerateBtnClick(Sender: TObject); + procedure InsertPageShow(Sender: TObject); + procedure ProcedureNamesCloseUp(Sender: TObject); procedure TestBtnClick(Sender: TObject); procedure FieldListDblClick(Sender: TObject); procedure FormShow(Sender: TObject); @@ -74,6 +87,8 @@ function EditSQL(DataSet: TIBCustomDataS implementation +uses IBSQL; + {$R *.lfm} function EditSQL(DataSet: TIBCustomDataSet; SelectSQL: TStrings): boolean; @@ -110,25 +125,23 @@ end; { TIBInsertSQLEditorForm } procedure TIBInsertSQLEditorForm.FormShow(Sender: TObject); -var TableName: string; +var IsProcedureName: boolean; + SQLType: TIBSQLTypes; begin GenerateBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; - TableNamesCombo.Items.Clear; - try - FIBSystemTables.GetTableNames(TableNamesCombo.Items); - if TableNamesCombo.Items.Count > 0 then - begin - TableNamesCombo.ItemIndex := 0; - if Trim(SQLText.Text) <> '' then - begin - FIBSystemTables.GetTableAndColumns(SQLText.Text,TableName,nil); - TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName) - end; - FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,true,false); - end; - except {ignore} - end; + if Trim(SQLText.Text) <> '' then + begin + try + SQLType := FIBSystemTables.GetStatementType(SQLText.Text,IsProcedureName); + except end; + if SQLType = SQLExecProcedure then + PageControl.ActivePage := ExecutePage + else + PageControl.ActivePage := InsertPage; + end + else + PageControl.ActivePage := InsertPage; end; procedure TIBInsertSQLEditorForm.FieldListDblClick(Sender: TObject); @@ -140,6 +153,11 @@ end; procedure TIBInsertSQLEditorForm.GenerateBtnClick(Sender: TObject); var FieldNames: TStrings; begin + if PageControl.ActivePage = ExecutePage then + FIBSystemTables.GenerateExecuteSQL(ProcedureNames.Text,QuoteFields.Checked,true, + ProcInputList.Items,ProcOutputList.Items,SQLText.Lines) + else + begin FieldNames := FIBSystemTables.GetFieldNames(FieldList); try FIBSystemTables.GenerateInsertSQL(TableNamesCombo.Text,QuoteFields.Checked, @@ -147,6 +165,52 @@ begin finally FieldNames.Free end; + end; +end; + +procedure TIBInsertSQLEditorForm.ExecutePageShow(Sender: TObject); +var ProcName: string; + IsProcedureName: boolean; +begin + FIBSystemTables.GetProcedureNames(ProcedureNames.Items,false); + if ProcedureNames.Items.Count > 0 then + begin + if (FIBSystemTables.GetStatementType(SQLText.Text,IsProcedureName) = SQLExecProcedure) or IsProcedureName then + begin + FIBSystemTables.GetTableAndColumns(SQLText.Text,ProcName,nil); + ProcedureNames.ItemIndex := ProcedureNames.Items.IndexOf(ProcName) + end + else + ProcedureNames.ItemIndex := 0; + end; + ProcedureNamesCloseUp(nil); +end; + +procedure TIBInsertSQLEditorForm.InsertPageShow(Sender: TObject); +var TableName: string; +begin + TableNamesCombo.Items.Clear; + try + FIBSystemTables.GetTableNames(TableNamesCombo.Items); + if TableNamesCombo.Items.Count > 0 then + begin + TableNamesCombo.ItemIndex := 0; + if Trim(SQLText.Text) <> '' then + begin + FIBSystemTables.GetTableAndColumns(SQLText.Text,TableName,nil); + TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName) + end; + FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,true,false); + end; + except {ignore} + end; +end; + +procedure TIBInsertSQLEditorForm.ProcedureNamesCloseUp(Sender: TObject); +var ExecuteOnly: boolean; +begin + FIBSystemTables.GetProcParams(ProcedureNames.Text,ExecuteOnly,ProcInputList.Items,ProcOutputList.Items); + ExecuteOnlyIndicator.Visible := ExecuteOnly; end; procedure TIBInsertSQLEditorForm.TestBtnClick(Sender: TObject);