--- ibx/trunk/design/ibdataseteditor.pas 2013/02/28 16:56:14 16 +++ ibx/trunk/design/ibdataseteditor.pas 2013/12/28 19:22:24 17 @@ -1,288 +1,288 @@ -(* - * IBX For Lazarus (Firebird Express) - * - * The contents of this file are subject to the Initial Developer's - * Public License Version 1.0 (the "License"); you may not use this - * file except in compliance with the License. You may obtain a copy - * of the License here: - * - * http://www.firebirdsql.org/index.php?op=doc&id=idpl - * - * Software distributed under the License is distributed on an "AS - * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or - * implied. See the License for the specific language governing rights - * and limitations under the License. - * - * The Initial Developer of the Original Code is Tony Whyman. - * - * The Original Code is (C) 2011 Tony Whyman, MWA Software - * (http://www.mwasoftware.co.uk). - * - * All Rights Reserved. - * - * Contributor(s): ______________________________________. - * -*) - -unit IBDataSetEditor; - -{$mode objfpc}{$H+} - -interface - -uses - Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, - ComCtrls, StdCtrls, ExtCtrls, IBSystemTables, IBCustomDataSet, IBDatabase; - -type - - { TIBDataSetEditorForm } - - TIBDataSetEditorForm = class(TForm) - TestBtn: TButton; - CancelButton: TButton; - FieldsPage: TTabSheet; - GenerateButton: TButton; - GroupBox1: TGroupBox; - IBTransaction1: TIBTransaction; - IncludePrimaryKeys: TCheckBox; - PrimaryKeyList: TListBox; - Label1: TLabel; - Label2: TLabel; - Label3: TLabel; - Label4: TLabel; - OkButton: TButton; - PageControl: TPageControl; - QuoteFields: TCheckBox; - SQLMemo: TMemo; - SQLPage: TTabSheet; - StatementType: TRadioGroup; - FieldList: TListBox; - TableNamesCombo: TComboBox; - procedure TestBtnClick(Sender: TObject); - procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); - procedure FormShow(Sender: TObject); - procedure GenerateButtonClick(Sender: TObject); - procedure SQLMemoChange(Sender: TObject); - procedure SQLPageShow(Sender: TObject); - procedure StatementTypeClick(Sender: TObject); - procedure TableNamesComboCloseUp(Sender: TObject); - private - { private declarations } - FDataSet: TIBDataSet; - FIBSystemTables: TIBSystemTables; - FDirty: boolean; - FCurrentStatement: integer; - FSelectSQL: TStringList; - FModifySQL: TStringList; - FInsertSQL: TStringList; - FDeleteSQL: TStringList; - FRefreshSQL: TStringList; - procedure UpdateSQLMemo; - public - { public declarations } - constructor Create(TheOwner: TComponent); override; - destructor Destroy; override; - procedure SetDataSet(AObject: TIBDataSet); - end; - -var - IBDataSetEditorForm: TIBDataSetEditorForm; - -function EditIBDataSet(DataSet: TIBDataSet): boolean; - -implementation - -{$R *.lfm} - -function EditIBDataSet(DataSet: TIBDataSet): boolean; -begin - Result := false; - if assigned(DataSet) and assigned(DataSet.Database) then - try - DataSet.Database.Connected := true; - except on E: Exception do - ShowMessage(E.Message) - end; - - with TIBDataSetEditorForm.Create(Application) do - try - SetDataSet(DataSet); - Result := ShowModal = mrOK - finally - Free - end; - -end; - -{ TIBDataSetEditorForm } - -procedure TIBDataSetEditorForm.FormShow(Sender: TObject); -var TableName: string; -begin - PageControl.ActivePage := FieldsPage; - FModifySQL.Assign(FDataSet.ModifySQL); - FInsertSQL.Assign(FDataSet.InsertSQL); - FDeleteSQL.Assign(FDataSet.DeleteSQL); - FRefreshSQL.Assign(FDataSet.RefreshSQL); - FSelectSQL.Assign(FDataSet.SelectSQL); - GenerateButton.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; - TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; - FCurrentStatement := -1; - TableNamesCombo.Items.Clear; - FIBSystemTables.GetTableNames(TableNamesCombo.Items); - if TableNamesCombo.Items.Count > 0 then - begin - TableNamesCombo.ItemIndex := 0; - if FSelectSQL.Text <> '' then - try - FIBSystemTables.GetTableAndColumns(FSelectSQL.Text,TableName,nil); - TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName); - except end;//ignore - FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false); - FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items); - end; -end; - -procedure TIBDataSetEditorForm.FormClose(Sender: TObject; - var CloseAction: TCloseAction); -begin - if ModalResult = mrOK then - begin - UpdateSQLMemo; - FDataSet.ModifySQL.Assign(FModifySQL); - FDataSet.InsertSQL.Assign(FInsertSQL); - FDataSet.DeleteSQL.Assign(FDeleteSQL); - FDataSet.RefreshSQL.Assign(FRefreshSQL); - FDataSet.SelectSQL.Assign(FSelectSQL); - end; -end; - -procedure TIBDataSetEditorForm.TestBtnClick(Sender: TObject); -begin - if SQLMemo.Lines.Text <> '' then - FIBSystemTables.TestSQL(SQLMemo.Lines.Text); -end; - -procedure TIBDataSetEditorForm.GenerateButtonClick(Sender: TObject); -var FieldNames: TStringList; - I: integer; -begin - FieldNames := TStringList.Create; - try - FRefreshSQL.Clear; - FSelectSQL.Clear; - FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames); - FIBSystemTables.GenerateSelectSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FSelectSQL); - FIBSystemTables.GenerateRefreshSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FRefreshSQL); - FIBSystemTables.GenerateDeleteSQL(TableNamesCombo.Text,QuoteFields.Checked,FDeleteSQL); - FieldNames.Clear; - FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames,true,false); - FIBSystemTables.GenerateInsertSQL(TableNamesCombo.Text,QuoteFields.Checked, - FieldNames,FInsertSQL); - if FieldList.SelCount = 0 then - begin - FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked, - FieldList.Items,FModifySQL); - - end - else - begin - FieldNames.Clear; - for I := 0 to FieldList.Items.Count - 1 do - if FieldList.Selected[I] then - FieldNames.Add(FieldList.Items[I]); - FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked, - FieldNames,FModifySQL); - end; - FDirty := false; - PageControl.ActivePage := SQLPage; - finally - FieldNames.Free - end; -end; - -procedure TIBDataSetEditorForm.SQLMemoChange(Sender: TObject); -begin - FDirty := true -end; - -procedure TIBDataSetEditorForm.SQLPageShow(Sender: TObject); -begin - UpdateSQLMemo -end; - -procedure TIBDataSetEditorForm.StatementTypeClick(Sender: TObject); -begin - UpdateSQLMemo -end; - -procedure TIBDataSetEditorForm.TableNamesComboCloseUp(Sender: TObject); -begin - FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false); - FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items); -end; - -procedure TIBDataSetEditorForm.UpdateSQLMemo; -begin - if FDirty then - case FCurrentStatement of - 0: // Select - FSelectSQL.Assign(SQLMemo.Lines); - 1: //Modify - FModifySQL.Assign(SQLMemo.Lines); - 2: //Insert - FInsertSQL.Assign(SQLMemo.Lines); - 3: // Delete - FDeleteSQL.Assign(SQLMemo.Lines); - 4: //Refresh - FRefreshSQL.Assign(SQLMemo.Lines); - end; - FDirty := false; - case StatementType.ItemIndex of - 0: //Select - SQLMemo.Lines.Assign(FSelectSQL); - 1: // Modify - SQLMemo.Lines.Assign(FModifySQL) ; - 2: //Insert - SQLMemo.Lines.Assign(FInsertSQL) ; - 3: // Delete - SQLMemo.Lines.Assign(FDeleteSQL) ; - 4: //Refresh - SQLMemo.Lines.Assign(FRefreshSQL) ; - end; - FCurrentStatement := StatementType.ItemIndex; -end; - -constructor TIBDataSetEditorForm.Create(TheOwner: TComponent); -begin - inherited Create(TheOwner); - FIBSystemTables := TIBSystemTables.Create; - FModifySQL := TStringList.Create; - FInsertSQL := TStringList.Create; - FDeleteSQL := TStringList.Create; - FRefreshSQL := TStringList.Create; - FSelectSQL := TStringList.Create; -end; - -destructor TIBDataSetEditorForm.Destroy; -begin - if assigned(FIBSystemTables) then FIBSystemTables.Free; - if assigned(FModifySQL) then FModifySQL.Free; - if assigned(FInsertSQL) then FInsertSQL.Free; - if assigned(FDeleteSQL) then FDeleteSQL.Free; - if assigned(FRefreshSQL) then FRefreshSQL.Free; - if assigned(FSelectSQL) then FSelectSQL.Free; - inherited Destroy; -end; - -procedure TIBDataSetEditorForm.SetDataSet(AObject: TIBDataSet); -begin - FDataSet := AObject; - IBTransaction1.DefaultDatabase := FDataSet.Database; - if assigned(FDataSet) then - FIBSystemTables.SelectDatabase(FDataSet.Database,IBTransaction1); -end; - -end. - +(* + * IBX For Lazarus (Firebird Express) + * + * The contents of this file are subject to the Initial Developer's + * Public License Version 1.0 (the "License"); you may not use this + * file except in compliance with the License. You may obtain a copy + * of the License here: + * + * http://www.firebirdsql.org/index.php?op=doc&id=idpl + * + * Software distributed under the License is distributed on an "AS + * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or + * implied. See the License for the specific language governing rights + * and limitations under the License. + * + * The Initial Developer of the Original Code is Tony Whyman. + * + * The Original Code is (C) 2011 Tony Whyman, MWA Software + * (http://www.mwasoftware.co.uk). + * + * All Rights Reserved. + * + * Contributor(s): ______________________________________. + * +*) + +unit IBDataSetEditor; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, + ComCtrls, StdCtrls, ExtCtrls, IBSystemTables, IBCustomDataSet, IBDatabase; + +type + + { TIBDataSetEditorForm } + + TIBDataSetEditorForm = class(TForm) + TestBtn: TButton; + CancelButton: TButton; + FieldsPage: TTabSheet; + GenerateButton: TButton; + GroupBox1: TGroupBox; + IBTransaction1: TIBTransaction; + IncludePrimaryKeys: TCheckBox; + PrimaryKeyList: TListBox; + Label1: TLabel; + Label2: TLabel; + Label3: TLabel; + Label4: TLabel; + OkButton: TButton; + PageControl: TPageControl; + QuoteFields: TCheckBox; + SQLMemo: TMemo; + SQLPage: TTabSheet; + StatementType: TRadioGroup; + FieldList: TListBox; + TableNamesCombo: TComboBox; + procedure TestBtnClick(Sender: TObject); + procedure FormClose(Sender: TObject; var CloseAction: TCloseAction); + procedure FormShow(Sender: TObject); + procedure GenerateButtonClick(Sender: TObject); + procedure SQLMemoChange(Sender: TObject); + procedure SQLPageShow(Sender: TObject); + procedure StatementTypeClick(Sender: TObject); + procedure TableNamesComboCloseUp(Sender: TObject); + private + { private declarations } + FDataSet: TIBDataSet; + FIBSystemTables: TIBSystemTables; + FDirty: boolean; + FCurrentStatement: integer; + FSelectSQL: TStringList; + FModifySQL: TStringList; + FInsertSQL: TStringList; + FDeleteSQL: TStringList; + FRefreshSQL: TStringList; + procedure UpdateSQLMemo; + public + { public declarations } + constructor Create(TheOwner: TComponent); override; + destructor Destroy; override; + procedure SetDataSet(AObject: TIBDataSet); + end; + +var + IBDataSetEditorForm: TIBDataSetEditorForm; + +function EditIBDataSet(DataSet: TIBDataSet): boolean; + +implementation + +{$R *.lfm} + +function EditIBDataSet(DataSet: TIBDataSet): boolean; +begin + Result := false; + if assigned(DataSet) and assigned(DataSet.Database) then + try + DataSet.Database.Connected := true; + except on E: Exception do + ShowMessage(E.Message) + end; + + with TIBDataSetEditorForm.Create(Application) do + try + SetDataSet(DataSet); + Result := ShowModal = mrOK + finally + Free + end; + +end; + +{ TIBDataSetEditorForm } + +procedure TIBDataSetEditorForm.FormShow(Sender: TObject); +var TableName: string; +begin + PageControl.ActivePage := FieldsPage; + FModifySQL.Assign(FDataSet.ModifySQL); + FInsertSQL.Assign(FDataSet.InsertSQL); + FDeleteSQL.Assign(FDataSet.DeleteSQL); + FRefreshSQL.Assign(FDataSet.RefreshSQL); + FSelectSQL.Assign(FDataSet.SelectSQL); + GenerateButton.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; + TestBtn.Enabled := (IBTransaction1.DefaultDatabase <> nil) and IBTransaction1.DefaultDatabase.Connected; + FCurrentStatement := -1; + TableNamesCombo.Items.Clear; + FIBSystemTables.GetTableNames(TableNamesCombo.Items); + if TableNamesCombo.Items.Count > 0 then + begin + TableNamesCombo.ItemIndex := 0; + if FSelectSQL.Text <> '' then + try + FIBSystemTables.GetTableAndColumns(FSelectSQL.Text,TableName,nil); + TableNamesCombo.ItemIndex := TableNamesCombo.Items.IndexOf(TableName); + except end;//ignore + FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false); + FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items); + end; +end; + +procedure TIBDataSetEditorForm.FormClose(Sender: TObject; + var CloseAction: TCloseAction); +begin + if ModalResult = mrOK then + begin + UpdateSQLMemo; + FDataSet.ModifySQL.Assign(FModifySQL); + FDataSet.InsertSQL.Assign(FInsertSQL); + FDataSet.DeleteSQL.Assign(FDeleteSQL); + FDataSet.RefreshSQL.Assign(FRefreshSQL); + FDataSet.SelectSQL.Assign(FSelectSQL); + end; +end; + +procedure TIBDataSetEditorForm.TestBtnClick(Sender: TObject); +begin + if SQLMemo.Lines.Text <> '' then + FIBSystemTables.TestSQL(SQLMemo.Lines.Text); +end; + +procedure TIBDataSetEditorForm.GenerateButtonClick(Sender: TObject); +var FieldNames: TStringList; + I: integer; +begin + FieldNames := TStringList.Create; + try + FRefreshSQL.Clear; + FSelectSQL.Clear; + FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames); + FIBSystemTables.GenerateSelectSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FSelectSQL); + FIBSystemTables.GenerateRefreshSQL(TableNamesCombo.Text,QuoteFields.Checked,FieldNames,FRefreshSQL); + FIBSystemTables.GenerateDeleteSQL(TableNamesCombo.Text,QuoteFields.Checked,FDeleteSQL); + FieldNames.Clear; + FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldNames,true,false); + FIBSystemTables.GenerateInsertSQL(TableNamesCombo.Text,QuoteFields.Checked, + FieldNames,FInsertSQL); + if FieldList.SelCount = 0 then + begin + FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked, + FieldList.Items,FModifySQL); + + end + else + begin + FieldNames.Clear; + for I := 0 to FieldList.Items.Count - 1 do + if FieldList.Selected[I] then + FieldNames.Add(FieldList.Items[I]); + FIBSystemTables.GenerateModifySQL(TableNamesCombo.Text,QuoteFields.Checked, + FieldNames,FModifySQL); + end; + FDirty := false; + PageControl.ActivePage := SQLPage; + finally + FieldNames.Free + end; +end; + +procedure TIBDataSetEditorForm.SQLMemoChange(Sender: TObject); +begin + FDirty := true +end; + +procedure TIBDataSetEditorForm.SQLPageShow(Sender: TObject); +begin + UpdateSQLMemo +end; + +procedure TIBDataSetEditorForm.StatementTypeClick(Sender: TObject); +begin + UpdateSQLMemo +end; + +procedure TIBDataSetEditorForm.TableNamesComboCloseUp(Sender: TObject); +begin + FIBSystemTables.GetFieldNames(TableNamesCombo.Text,FieldList.Items,IncludePrimaryKeys.checked,false); + FIBSystemTables.GetPrimaryKeys(TableNamesCombo.Text,PrimaryKeyList.Items); +end; + +procedure TIBDataSetEditorForm.UpdateSQLMemo; +begin + if FDirty then + case FCurrentStatement of + 0: // Select + FSelectSQL.Assign(SQLMemo.Lines); + 1: //Modify + FModifySQL.Assign(SQLMemo.Lines); + 2: //Insert + FInsertSQL.Assign(SQLMemo.Lines); + 3: // Delete + FDeleteSQL.Assign(SQLMemo.Lines); + 4: //Refresh + FRefreshSQL.Assign(SQLMemo.Lines); + end; + FDirty := false; + case StatementType.ItemIndex of + 0: //Select + SQLMemo.Lines.Assign(FSelectSQL); + 1: // Modify + SQLMemo.Lines.Assign(FModifySQL) ; + 2: //Insert + SQLMemo.Lines.Assign(FInsertSQL) ; + 3: // Delete + SQLMemo.Lines.Assign(FDeleteSQL) ; + 4: //Refresh + SQLMemo.Lines.Assign(FRefreshSQL) ; + end; + FCurrentStatement := StatementType.ItemIndex; +end; + +constructor TIBDataSetEditorForm.Create(TheOwner: TComponent); +begin + inherited Create(TheOwner); + FIBSystemTables := TIBSystemTables.Create; + FModifySQL := TStringList.Create; + FInsertSQL := TStringList.Create; + FDeleteSQL := TStringList.Create; + FRefreshSQL := TStringList.Create; + FSelectSQL := TStringList.Create; +end; + +destructor TIBDataSetEditorForm.Destroy; +begin + if assigned(FIBSystemTables) then FIBSystemTables.Free; + if assigned(FModifySQL) then FModifySQL.Free; + if assigned(FInsertSQL) then FInsertSQL.Free; + if assigned(FDeleteSQL) then FDeleteSQL.Free; + if assigned(FRefreshSQL) then FRefreshSQL.Free; + if assigned(FSelectSQL) then FSelectSQL.Free; + inherited Destroy; +end; + +procedure TIBDataSetEditorForm.SetDataSet(AObject: TIBDataSet); +begin + FDataSet := AObject; + IBTransaction1.DefaultDatabase := FDataSet.Database; + if assigned(FDataSet) then + FIBSystemTables.SelectDatabase(FDataSet.Database,IBTransaction1); +end; + +end. +