From 75ba67897f9e286ea30bb7823ca1fc53641b5b0d Mon Sep 17 00:00:00 2001 From: michael Date: Sun, 3 Jan 2016 17:08:19 +0000 Subject: [PATCH] * Rework query panel and data panel so they are frames git-svn-id: trunk@51167 - --- .gitattributes | 6 +- tools/lazdatadesktop/conneditor.pp | 34 +- tools/lazdatadesktop/datapanel.pp | 214 ------ tools/lazdatadesktop/fradata.lfm | 161 ++++ tools/lazdatadesktop/fradata.pp | 134 ++++ tools/lazdatadesktop/fraquery.lfm | 967 ++++++++++++++++++++++++ tools/lazdatadesktop/fraquery.pp | 496 ++++++++++++ tools/lazdatadesktop/frmmain.lfm | 2 + tools/lazdatadesktop/lazdatadeskstr.pas | 8 + tools/lazdatadesktop/lazdatadesktop.lpi | 50 +- tools/lazdatadesktop/lazdatadesktop.lpr | 4 +- tools/lazdatadesktop/querypanel.pp | 510 ------------- 12 files changed, 1823 insertions(+), 763 deletions(-) delete mode 100644 tools/lazdatadesktop/datapanel.pp create mode 100644 tools/lazdatadesktop/fradata.lfm create mode 100644 tools/lazdatadesktop/fradata.pp create mode 100644 tools/lazdatadesktop/fraquery.lfm create mode 100644 tools/lazdatadesktop/fraquery.pp delete mode 100644 tools/lazdatadesktop/querypanel.pp diff --git a/.gitattributes b/.gitattributes index 162bfc2c4a..a6d5816c60 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8860,10 +8860,13 @@ tools/lazdatadesktop/bitmaps/qrybtn_previous.xpm svneol=native#text/plain tools/lazdatadesktop/bitmaps/qrybtn_save.xpm svneol=native#text/plain tools/lazdatadesktop/bitmaps/querypanel.txt svneol=native#text/plain tools/lazdatadesktop/conneditor.pp svneol=native#text/plain -tools/lazdatadesktop/datapanel.pp svneol=native#text/plain tools/lazdatadesktop/ddfiles.pp svneol=native#text/plain tools/lazdatadesktop/dicteditor.pp svneol=native#text/plain tools/lazdatadesktop/dicteditor.res -text +tools/lazdatadesktop/fradata.lfm svneol=native#text/plain +tools/lazdatadesktop/fradata.pp svneol=native#text/plain +tools/lazdatadesktop/fraquery.lfm svneol=native#text/plain +tools/lazdatadesktop/fraquery.pp svneol=native#text/plain tools/lazdatadesktop/frmgeneratesql.lfm svneol=native#text/plain tools/lazdatadesktop/frmgeneratesql.pp svneol=native#text/plain tools/lazdatadesktop/frmimportdd.lfm svneol=native#text/plain @@ -8889,7 +8892,6 @@ tools/lazdatadesktop/lazdatadeskstr.pas svneol=native#text/plain tools/lazdatadesktop/lazdatadesktop.lpi svneol=native#text/plain tools/lazdatadesktop/lazdatadesktop.lpr svneol=native#text/plain tools/lazdatadesktop/lazdatadesktop.res -text -tools/lazdatadesktop/querypanel.pp svneol=native#text/plain tools/lazdatadesktop/querypanel.res -text tools/lazres.lpi svneol=native#text/plain tools/lazres.pp svneol=native#text/pascal diff --git a/tools/lazdatadesktop/conneditor.pp b/tools/lazdatadesktop/conneditor.pp index 45279b2943..d56a376f93 100644 --- a/tools/lazdatadesktop/conneditor.pp +++ b/tools/lazdatadesktop/conneditor.pp @@ -26,7 +26,7 @@ interface uses Classes, SysUtils, db, fpdatadict, controls, comctrls, stdctrls, extctrls, - graphics, imglist, lresources, RTTIGrids, querypanel, lazdatadeskstr; + graphics, imglist, lresources, RTTIGrids, fraquery, lazdatadeskstr; Type @@ -42,10 +42,11 @@ Type FImgList : TImageList; FTSDisplay : TTabsheet; FTSQuery : TTabsheet; - FQueryPanel : TQueryPanel; + FQueryPanel : TQueryFrame; procedure AddPair(LV: TListView; Const AName, AValue: String); procedure ClearDisplay; procedure DoSelectNode(Sender: TObject); + procedure DoTabChange(Sender: TObject); function GetCurrentObjectType: TObjectType; function NewNode(TV: TTreeView; ParentNode: TTreeNode; ACaption: String; AImageIndex: Integer): TTreeNode; @@ -105,7 +106,7 @@ Const implementation -uses typinfo, datapanel, frmgeneratesql; +uses typinfo, fradata, frmgeneratesql; { TConnectionEditor } @@ -170,6 +171,7 @@ begin FPC.Parent:=Self; FPC.Name:='FPC'; FPC.Align:=alClient; + FPC.OnChange:=@DoTabChange; // Display tab sheet FTSDisplay:=TTabsheet.Create(Self); FTSDisplay.Name:='FTSDisplay'; @@ -187,7 +189,7 @@ begin FDisplay.Align:=alClient; FDisplay.Caption:=''; // Query panel - FQueryPanel:= TQueryPanel.Create(Self); + FQueryPanel:= TQueryFrame.Create(Self); FQueryPanel.Name:='FQueryPanel'; FQueryPanel.Parent:=FTSQuery; FQueryPanel.Align:=alClient; @@ -227,6 +229,7 @@ Var C : TControl; begin + C:=Nil; Result:=False; If FPC.ActivePage=FTSQuery then begin @@ -234,8 +237,9 @@ begin end else If FPC.ActivePage=FTSDisplay then begin - C:=FDisplay.Controls[0]; - If Not (C is TDataPanel) then + if FDisplay.ControlCount>0 then + C:=FDisplay.Controls[0]; + If Not (C is TDataFrame) then C:=Nil; Result:=Assigned(C); end; @@ -291,15 +295,17 @@ Var C : TControl; begin + C:=Nil; If FPC.ActivePage=FTSQuery then begin FQueryPanel.CreateCode; end else If FPC.ActivePage=FTSDisplay then begin - C:=FDisplay.Controls[0]; - If (C is TDataPanel) then - TDataPanel(C).CreateCode; + if FDisplay.ControlCount>0 then + C:=FDisplay.Controls[0]; + If (C is TDataFrame) then + TDataFrame(C).CreateCode; end; end; @@ -402,14 +408,20 @@ begin end; end; +procedure TConnectionEditor.DoTabChange(Sender: TObject); +begin + If FPC.ActivePage=FTSQuery then + FQueryPanel.ActivatePanel; +end; + procedure TConnectionEditor.ShowTableData(ATableName : String); Var - P : TDataPanel; + P : TDataFrame; begin ClearDisplay; - P:=TDataPanel.Create(Self); + P:=TDataFrame.Create(Self); P.TableName:=ATableName; P.Parent:=FDisplay; P.Align:=alClient; diff --git a/tools/lazdatadesktop/datapanel.pp b/tools/lazdatadesktop/datapanel.pp deleted file mode 100644 index 9d284913d9..0000000000 --- a/tools/lazdatadesktop/datapanel.pp +++ /dev/null @@ -1,214 +0,0 @@ -{ - *************************************************************************** - * * - * This source is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This code is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * A copy of the GNU General Public License is available on the World * - * Wide Web at . You can also * - * obtain it by writing to the Free Software Foundation, * - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * * - *************************************************************************** -} -unit datapanel; - -{$mode objfpc}{$H+} - -interface - -uses - Graphics, Classes, SysUtils, Controls, ExtCtrls, StdCtrls, DB, dbgrids, dbCtrls, - buttons, fpdatadict; - -Type - - { TDataPanel } - TDataPanel = Class(TCustomPanel) - private - FDataSource: TDatasource; - FTableName: String; - FTopPanel: TPanel; - FDBGrid : TDBGrid; - FNavigator : TDBNavigator; - FExportSB : TSpeedButton; - FCodeSB : TSpeedButton; - procedure Checkbuttons; - procedure CreateControls; - function GetDataset: TDataset; - procedure DoExport(Sender : TObject); - procedure DoCode(Sender : TObject); - function GetExtra: Boolean; - procedure SetExtra(const AValue: Boolean); - Protected - Property TopPanel : TPanel Read FTopPanel; - Property DBGrid : TDBGrid Read FDBGrid; - Property DataSource : TDatasource Read FDataSource; - procedure SetDataset(const AValue: TDataset);virtual; - Public - Constructor Create(AOwner : TComponent); Override; - Property Dataset : TDataset Read GetDataset Write SetDataset; - Property TableName: String Read FTableName Write FTableName; - Procedure ExportData; - Procedure CreateCode; - Property ShowExtraButtons : Boolean Read GetExtra Write SetExtra; - end; - -implementation - -uses fpdataexporter,fpcodegenerator; - -{ TDataPanel } - -function TDataPanel.GetDataset: TDataset; -begin - Result:=FDatasource.Dataset; -end; - -procedure TDataPanel.DoExport(Sender: TObject); -begin - ExportData; -end; - -procedure TDataPanel.DoCode(Sender : TObject); - -begin - CreateCode; -end; - -function TDataPanel.GetExtra: Boolean; -begin - Result:=FExportSB.Visible; -end; - -procedure TDataPanel.SetExtra(const AValue: Boolean); -begin - FExportSB.Visible:=AValue; - FCodeSB.Visible:=AValue; -end; - -procedure TDataPanel.SetDataset(const AValue: TDataset); -begin - FDatasource.Dataset:=AValue; - CheckButtons; -end; - -procedure TDataPanel.ExportData; -begin - With TFPDataExporter.Create(Dataset) do - Try - If Self.TableName<>'' then - TableNameHint:=Self.TableName; - Execute; - Finally - Free; - end; -end; - -procedure TDataPanel.CreateCode; -begin - With TFPCodeGenerator.Create(Dataset) do - try - If Self.TableName<>'' then - TableNameHint:=Self.TableName; - Execute; - Finally - Free; - end; -end; - -constructor TDataPanel.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - FDataSource:=TDatasource.Create(Self); - CreateControls; -end; - -Procedure TDataPanel.CreateControls; - -Var - P : TPixMap; - -begin - P:=TPixMap.Create; - try - // Top panel; - FTopPanel:=TPanel.Create(Self); - FTopPanel.Parent:=Self; - FTopPanel.Caption:=''; - FTopPanel.Align:=alTop; - FTopPanel.height:=30; - FTopPanel.BevelInner:=bvLowered; - FTopPanel.BevelOuter:=bvNone; - // Grid - FDBgrid:=TDBGrid.Create(Self); - FDBGrid.Parent:=Self; - FDBGrid.Align:=alClient; - FDBGrid.Options:=FDBGrid.Options+[dgAutoSizeColumns]; - FDBGrid.DataSource:=FDatasource; - FDBGrid.AutoSizeColumns; - // Navigator; - FNavigator:=TDBNavigator.Create(Self); - FNavigator.Parent:=FTopPanel; - FNavigator.Top:=4; - FNavigator.Left:=4; - FNavigator.Height:=22; - FNavigator.DataSource:=FDatasource; - // - CheckButtons; - FExportSB:=TSpeedButton.Create(Self); - FExportSB.Parent:=FTopPanel; - FExportSB.Left:=16+FNavigator.Width+FNavigator.Left; - FExportSB.Top:=4; - FExportSB.Height:=22; - FExportSB.Width:=22; - P.LoadFromResourceName(HInstance,'qrybtn_export'); - FExportSB.Glyph.Assign(P); - FExportSB.Flat:=True; - FExportSB.OnClick:=@DoExport; - FCodeSB:=TSpeedButton.Create(Self); - FCodeSB.Parent:=FTopPanel; - FCodeSB.Left:=FExportSB.Width+FExportSB.Left; - FCodeSB.Top:=4; - FCodeSB.Height:=22; - FCodeSB.Width:=22; - P.LoadFromResourceName(HInstance,'qrybtn_code'); - FCodeSB.Glyph.Assign(P); - FCodeSB.Flat:=True; - FCodeSB.OnClick:=@DoCode; - Finally - FreeAndNil(P); - end; -end; - -procedure TDataPanel.Checkbuttons; - -Const - NavBtns = [nbFirst,nbPrior,nbNext,nbLast,nbRefresh]; - EditBtns = [nbInsert,nbPost,nbDelete,nbCancel]; - -begin - If Assigned(FNavigator) and Assigned(Dataset) then - begin - If Dataset.CanModify then - begin - FNavigator.VisibleButtons:=NavBtns; - FNavigator.Width:=122; - end - else - begin - FNavigator.VisibleButtons:=NavBtns+EditBtns; - FNavigator.Width:=244; - end - end; -end; - -end. - diff --git a/tools/lazdatadesktop/fradata.lfm b/tools/lazdatadesktop/fradata.lfm new file mode 100644 index 0000000000..af1da1d7e0 --- /dev/null +++ b/tools/lazdatadesktop/fradata.lfm @@ -0,0 +1,161 @@ +object DataFrame: TDataFrame + Left = 0 + Height = 240 + Top = 0 + Width = 320 + ClientHeight = 240 + ClientWidth = 320 + TabOrder = 0 + DesignLeft = 901 + DesignTop = 348 + object FTopPanel: TPanel + Left = 0 + Height = 34 + Top = 0 + Width = 320 + Align = alTop + BevelOuter = bvLowered + ClientHeight = 34 + ClientWidth = 320 + TabOrder = 0 + object FNavigator: TDBNavigator + Left = 1 + Height = 32 + Top = 1 + Width = 113 + Align = alLeft + BevelOuter = bvNone + ChildSizing.EnlargeHorizontal = crsScaleChilds + ChildSizing.EnlargeVertical = crsScaleChilds + ChildSizing.ShrinkHorizontal = crsScaleChilds + ChildSizing.ShrinkVertical = crsScaleChilds + ChildSizing.Layout = cclLeftToRightThenTopToBottom + ChildSizing.ControlsPerLine = 100 + ClientHeight = 32 + ClientWidth = 113 + DataSource = FDataSource + Flat = True + Options = [] + TabOrder = 0 + VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbRefresh] + end + object FExportSB: TSpeedButton + Left = 114 + Height = 32 + Top = 1 + Width = 31 + Align = alLeft + Flat = True + Glyph.Data = { + 36040000424D3604000000000000360000002800000010000000100000000100 + 2000000000000004000064000000640000000000000000000000000000000000 + 000000000000008080FF008080FF008080FF00C0C0FF00C0C0FF00C0C0FF00C0 + C0FF008080FF008080FF008080FF000000000000000000000000000000000000 + 0000008080FF00C0C0FF00C0C0FF00C0C0FF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00C0C0FF00C0C0FF00C0C0FF008080FF0000000000000000008080FF0080 + 80FF00C0C0FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0FF00C0C0FF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00C0C0FF008080FF00000000008080FF00C0 + C0FF00FFFFFF00FFFFFF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0 + C0FF00C0C0FF00C0C0FF00FFFFFF00FFFFFF00C0C0FF008080FF008080FF00C0 + C0FF00FFFFFF00C0C0FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00C0C0FF00FFFFFF00C0C0FF008080FF008080FF00C0 + C0FF00FFFFFF00C0C0FF00FFFFFF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0 + C0FF00C0C0FF00FFFFFF00C0C0FF00FFFFFF00C0C0FF008080FF008080FF00C0 + C0FF00FFFFFF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF008000FF0080 + 00FF00C0C0FF00C0C0FF00C0C0FF00FFFFFF00C0C0FF008080FF008080FF00C0 + C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF008000FF00FF00FF00FF + 00FF008000FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF008080FF008080FF0080 + 80FF008080FF00C0C0FF00C0C0FF00C0C0FF008000FF00FF00FF00FF00FF00FF + 00FF00FF00FF008000FF00C0C0FF008080FF008080FF008080FF000000000000 + 0000000000000000000000000000008000FF008000FF008000FF00FF00FF00FF + 00FF008000FF008000FF008000FF000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000008000FF00FF00FF00FF + 00FF008000FF0000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000008000FF00FF00FF00FF + 00FF008000FF0000000000000000000000000000000000000000008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF00FF00FF00FF + 00FF008000FF0000000000000000000000000000000000000000008000FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF + 00FF008000FF0000000000000000000000000000000000000000008000FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF + 00FF008000FF0000000000000000000000000000000000000000008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF008000FF0080 + 00FF008000FF0000000000000000000000000000000000000000 + } + end + object FCodeSB: TSpeedButton + Left = 145 + Height = 32 + Top = 1 + Width = 31 + Align = alLeft + Flat = True + Glyph.Data = { + 0E060000424D0E06000000000000360000002800000016000000160000000100 + 180000000000D8050000640000006400000000000000000000007C7C7C302E2E + 0200000400000400000300000200000001000001000001000002000002000002 + 000002000001000A0B0806070401020000010000040300030200010000008282 + 82ACACACC6C6C5C7C6C5C7C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6C6C3C6 + C6C3C6C6C3C6C6C2C6C6C2C7C8C3C6C7C3C3C6C3C2C6C3BDC5C3757C7A000300 + 0000828282D0CECEFFFDFCFFFDFCFFFDFAFFFDFAFFFDFAFFFDFAFFFDFAFFFDF9 + FFFEF9FFFDFAFFFDFAFFFDFAFFFEFAFFFEFAFEFCF9FCFBF8FCFFFCF7FEFB9AA3 + A0020B0800007D7D7DCECDCCEAE8E7ACA9A8ACA9A7ACA9A7ACA9A8ACA9A7ACA9 + A7ACA9A6ACAAA6ACA9A7ACA9A7ACA9A7ACAAA8ACAAA8ACA8A6ACA6A5ACAAA9E7 + E9E79EA3A1050C090000797979CCCBCCC7C4C5221C1D221C1D221C1D221C1D22 + 1C1D221C1D221C1D221C1D221C1D221C1D221C1D221C1D221C1D221C1D221C1D + 221D1DC7C4C3A29D9D08000000007F7F7FCFCDCEFFFCFDFFFAFBFFF8F9FFF8F9 + FFF8F8FFF8F8FFF8F8FFF8F8FFF8F8FFF7F8FFF7F8FFF6F7FFF4F6FFF7F8FFF7 + F9FFF7F9FFFBFBFFFBFBA49D9D0C000000007E7E7ECECDCEC8C5C6231D1E231D + 1E231D1E231D1E231D1D231D1D746F6FFBF8F8FBF8F8FBF8F8C5C1C1231C1D23 + 1D1E231C1E3E383AFFFBFBFFFAF9A29C9B08000000007E7E7ECECDCEEAE7E8AC + A7A6ACA5A6ACA5A6ACA5A6ACA5A6ACA5A5CAC4C3FDF8F7FDF7F7FDF7F7E8E3E2 + ACA5A6ACA6A6ACA6A7B6B0B2FFFAFAFFFBFAA39F9E0B050300007E7E7ECECDCE + E3E0E1918B8B918A8B918A8B918A8B918A8B918A8A918A8A918A8A918A8A918A + 8A918A8A918A8B918B8B918B8B938B8CA38F8FE8DEDEA49D9C0C040300007E7E + 7ECECDCECECBCC3E38393E37383E37383E38383E38383E37383E37383E37383E + 37383E37383E37383E37383E37383E37384238395E3E40D6C8C9A39A9A0B0000 + 00007E7E7ECECDCEFFFCFCFFF9F9FFF7F8FFF7F7FFF8F7FFF8F7FFF7F7FFF7F7 + FFF7F7FFF7F7FFF7F7FFF7F7FFF7F8FFF4F6FFF5F7FFF6F8FFFAFCFFFBFDA29D + 9E09000000007E7E7ECECDCEC1BEBF0701020701020701020701020701020701 + 02070102070102070102070102070102070102070102817D7DFBF9F9FFF9F9FE + F2F3A2989909070600007E7E7ECECDCEF1EEEFC7C2C2C7C1C1C7C1C0C7C1C0C7 + C1C0C7C1C0C7C1C0C7C1C0C7C1C1C7C1C1C7C1C1C7C1C2C7BEBDE2DBDCFEF9FA + FFFAFAFEFAFAA09D9D05020100007E7E7ECECDCEDCD9DA757070756F6F756F6F + 756F6F756F6F756F6F756F6F756F6F756F6F756F6F756F6F756F70756D6D756E + 6F7870718B7476E2D8DAA29C9D0800000000FFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFF73595CDCD1D4A49C9E0E020200000000FFFFFFFFFFFCFDFF + F9FBFFFFFF0000FFFFF7F9FFF7F90000FFFFFFFF0000FF0000FF0000FFFFF7F8 + FFF7F9FFF8FAFFF7F9FFF6F8FFFAFDFFFAFDA69EA112050600000000FFFFFFFF + FFFFFFFFFBFEFFFFFF0000FFFFF9FDFFF7FB0000FFFFFFFF0000FFFFFBFEFFF7 + FA0000FFFFFCFEFFFCFDFFFCFDFFFCFDFFFAFCFFFCFDA29E9F07010200000000 + FFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFBFEFF + FBFDFFFCFD0000FFFBF9F9F8F8F8FBFBFBFFFEFEFFFEFEFFFEFEA09E9E030000 + 00000000FF0000FF0000FFFFFFFFFFFFFF0000FF0000FF0000FF0000FFFFFFFF + 0000FF0000FF0000FFF9FAFAFCFDFDFBFCFCFCFDFDFCFDFDFAFBFBF7F9F99A9B + 9B01000000000000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFCFFFFFDFF0000 + FFFFFFFF0000FFFEFDFEFAFBFBF9FAFAFAFDFDFAFEFDFBFEFEFAFDFDF9FCFCF7 + FAFA9A9C9C00000000000000FFFFFFFFFFFFFF0000FFFFFFFF0000FFFFFFFFFF + FFFF0000FFFFFFFF0000FFFFFFFFFFFFFF0000FFFFFFFFFFFFFFDCE1E0DCE1E0 + DCE0E0DCE0E09598981F202000000000FF0000FF0000FFFFFFFFFFFFFFFFFFFF + 0000FF0000FFFFFFFFFFFFFFFFFFFF0000FF0000FF0000FFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFF7C81808D92910000 + } + end + end + object FDBGrid: TDBGrid + Left = 0 + Height = 206 + Top = 34 + Width = 320 + Align = alClient + Color = clWindow + Columns = <> + DataSource = FDataSource + TabOrder = 1 + end + object FDataSource: TDataSource + left = 41 + top = 36 + end +end diff --git a/tools/lazdatadesktop/fradata.pp b/tools/lazdatadesktop/fradata.pp new file mode 100644 index 0000000000..1b94825393 --- /dev/null +++ b/tools/lazdatadesktop/fradata.pp @@ -0,0 +1,134 @@ +unit fradata; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, db, FileUtil, LResources, Forms, Controls, ExtCtrls, + DbCtrls, DBGrids, Buttons; + +type + + { TDataFrame } + + TDataFrame = class(TFrame) + FDBGrid: TDBGrid; + FDataSource: TDataSource; + FNavigator: TDBNavigator; + FTopPanel: TPanel; + FExportSB: TSpeedButton; + FCodeSB: TSpeedButton; + procedure DoExport(Sender : TObject); + procedure DoCode(Sender : TObject); + private + { private declarations } + FTableName : String; + FDataset : TDataset; + public + { public declarations } + procedure Checkbuttons; + function GetDataset: TDataset; + function GetExtra: Boolean; + procedure SetExtra(const AValue: Boolean); + Protected + Property TopPanel : TPanel Read FTopPanel; + Property DBGrid : TDBGrid Read FDBGrid; + Property DataSource : TDatasource Read FDataSource; + procedure SetDataset(const AValue: TDataset);virtual; + Public + Property Dataset : TDataset Read GetDataset Write SetDataset; + Property TableName: String Read FTableName Write FTableName; + Procedure ExportData; + Procedure CreateCode; + Property ShowExtraButtons : Boolean Read GetExtra Write SetExtra; + end; + +implementation + +{$r *.lfm} +uses fpdataexporter,fpcodegenerator; + +{ TDataFrame } + +function TDataFrame.GetDataset: TDataset; +begin + Result:=FDatasource.Dataset; +end; + +procedure TDataFrame.DoExport(Sender: TObject); +begin + ExportData; +end; + +procedure TDataFrame.DoCode(Sender : TObject); + +begin + CreateCode; +end; + +function TDataFrame.GetExtra: Boolean; +begin + Result:=FExportSB.Visible; +end; + +procedure TDataFrame.SetExtra(const AValue: Boolean); +begin + FExportSB.Visible:=AValue; + FCodeSB.Visible:=AValue; +end; + +procedure TDataFrame.SetDataset(const AValue: TDataset); +begin + FDatasource.Dataset:=AValue; + CheckButtons; +end; + +procedure TDataFrame.ExportData; +begin + With TFPDataExporter.Create(Dataset) do + Try + If Self.TableName<>'' then + TableNameHint:=Self.TableName; + Execute; + Finally + Free; + end; +end; + +procedure TDataFrame.CreateCode; +begin + With TFPCodeGenerator.Create(Dataset) do + try + If Self.TableName<>'' then + TableNameHint:=Self.TableName; + Execute; + Finally + Free; + end; +end; + +procedure TDataFrame.Checkbuttons; + +Const + NavBtns = [nbFirst,nbPrior,nbNext,nbLast,nbRefresh]; + EditBtns = [nbInsert,nbPost,nbDelete,nbCancel]; + +begin + If Assigned(FNavigator) and Assigned(Dataset) then + begin + If Dataset.CanModify then + begin + FNavigator.VisibleButtons:=NavBtns; + FNavigator.Width:=122; + end + else + begin + FNavigator.VisibleButtons:=NavBtns+EditBtns; + FNavigator.Width:=244; + end + end; +end; + +end. + diff --git a/tools/lazdatadesktop/fraquery.lfm b/tools/lazdatadesktop/fraquery.lfm new file mode 100644 index 0000000000..9c98a66a34 --- /dev/null +++ b/tools/lazdatadesktop/fraquery.lfm @@ -0,0 +1,967 @@ +object QueryFrame: TQueryFrame + Left = 0 + Height = 505 + Top = 0 + Width = 640 + ClientHeight = 505 + ClientWidth = 640 + TabOrder = 0 + DesignLeft = 671 + DesignTop = 285 + object ToolBar1: TToolBar + Left = 0 + Height = 26 + Top = 0 + Width = 640 + Caption = 'ToolBar1' + Images = ILQuery + ParentShowHint = False + ShowHint = True + TabOrder = 0 + object TBExecute: TToolButton + Left = 1 + Top = 2 + Action = AExecute + end + object TBSep1: TToolButton + Left = 47 + Height = 22 + Top = 2 + Width = 8 + Caption = 'TBSep1' + Style = tbsSeparator + end + object TBPrevious: TToolButton + Left = 55 + Top = 2 + Action = APreviousQuery + end + object TBNext: TToolButton + Left = 78 + Top = 2 + Action = ANextQuery + end + object TBSep2: TToolButton + Left = 101 + Height = 22 + Top = 2 + Width = 8 + Caption = 'TBSep2' + Style = tbsSeparator + end + object TBClose: TToolButton + Left = 24 + Top = 2 + Action = ACloseQuery + end + object TBLoadSQL: TToolButton + Left = 109 + Top = 2 + Action = ALoadSQL + end + object TBSaveSQL: TToolButton + Left = 132 + Top = 2 + Action = ASaveSQL + end + object TBSep3: TToolButton + Left = 155 + Height = 22 + Top = 2 + Width = 8 + Caption = 'TBSep3' + Style = tbsSeparator + end + object ToolButton1: TToolButton + Left = 163 + Top = 2 + Action = AExport + end + object ToolButton2: TToolButton + Left = 186 + Top = 2 + Action = ACreateCode + end + end + object PCResult: TPageControl + Left = 0 + Height = 244 + Top = 261 + Width = 640 + ActivePage = TSResult + Align = alBottom + TabIndex = 0 + TabOrder = 1 + object TSResult: TTabSheet + Caption = 'Result' + ClientHeight = 210 + ClientWidth = 632 + object MResult: TMemo + Left = 0 + Height = 210 + Top = 0 + Width = 632 + Align = alClient + TabOrder = 0 + end + end + object TSData: TTabSheet + Caption = 'Data' + end + end + inline FMSQL: TSynEdit + Left = 0 + Height = 230 + Top = 26 + Width = 640 + Align = alClient + Font.Height = -13 + Font.Name = 'Courier New' + Font.Pitch = fpFixed + Font.Quality = fqNonAntialiased + ParentColor = False + ParentFont = False + TabOrder = 2 + OnKeyDown = OnMemoKey + ExtraLineSpacing = 2 + Gutter.Width = 57 + Gutter.MouseActions = <> + RightGutter.Width = 0 + RightGutter.MouseActions = <> + Highlighter = SQLSyn + Keystrokes = < + item + Command = ecUp + ShortCut = 38 + end + item + Command = ecSelUp + ShortCut = 8230 + end + item + Command = ecScrollUp + ShortCut = 16422 + end + item + Command = ecDown + ShortCut = 40 + end + item + Command = ecSelDown + ShortCut = 8232 + end + item + Command = ecScrollDown + ShortCut = 16424 + end + item + Command = ecLeft + ShortCut = 37 + end + item + Command = ecSelLeft + ShortCut = 8229 + end + item + Command = ecWordLeft + ShortCut = 16421 + end + item + Command = ecSelWordLeft + ShortCut = 24613 + end + item + Command = ecRight + ShortCut = 39 + end + item + Command = ecSelRight + ShortCut = 8231 + end + item + Command = ecWordRight + ShortCut = 16423 + end + item + Command = ecSelWordRight + ShortCut = 24615 + end + item + Command = ecPageDown + ShortCut = 34 + end + item + Command = ecSelPageDown + ShortCut = 8226 + end + item + Command = ecPageBottom + ShortCut = 16418 + end + item + Command = ecSelPageBottom + ShortCut = 24610 + end + item + Command = ecPageUp + ShortCut = 33 + end + item + Command = ecSelPageUp + ShortCut = 8225 + end + item + Command = ecPageTop + ShortCut = 16417 + end + item + Command = ecSelPageTop + ShortCut = 24609 + end + item + Command = ecLineStart + ShortCut = 36 + end + item + Command = ecSelLineStart + ShortCut = 8228 + end + item + Command = ecEditorTop + ShortCut = 16420 + end + item + Command = ecSelEditorTop + ShortCut = 24612 + end + item + Command = ecLineEnd + ShortCut = 35 + end + item + Command = ecSelLineEnd + ShortCut = 8227 + end + item + Command = ecEditorBottom + ShortCut = 16419 + end + item + Command = ecSelEditorBottom + ShortCut = 24611 + end + item + Command = ecToggleMode + ShortCut = 45 + end + item + Command = ecCopy + ShortCut = 16429 + end + item + Command = ecPaste + ShortCut = 8237 + end + item + Command = ecDeleteChar + ShortCut = 46 + end + item + Command = ecCut + ShortCut = 8238 + end + item + Command = ecDeleteLastChar + ShortCut = 8 + end + item + Command = ecDeleteLastChar + ShortCut = 8200 + end + item + Command = ecDeleteLastWord + ShortCut = 16392 + end + item + Command = ecUndo + ShortCut = 32776 + end + item + Command = ecRedo + ShortCut = 40968 + end + item + Command = ecLineBreak + ShortCut = 13 + end + item + Command = ecSelectAll + ShortCut = 16449 + end + item + Command = ecCopy + ShortCut = 16451 + end + item + Command = ecBlockIndent + ShortCut = 24649 + end + item + Command = ecLineBreak + ShortCut = 16461 + end + item + Command = ecInsertLine + ShortCut = 16462 + end + item + Command = ecDeleteWord + ShortCut = 16468 + end + item + Command = ecBlockUnindent + ShortCut = 24661 + end + item + Command = ecPaste + ShortCut = 16470 + end + item + Command = ecCut + ShortCut = 16472 + end + item + Command = ecDeleteLine + ShortCut = 16473 + end + item + Command = ecDeleteEOL + ShortCut = 24665 + end + item + Command = ecUndo + ShortCut = 16474 + end + item + Command = ecRedo + ShortCut = 24666 + end + item + Command = ecGotoMarker0 + ShortCut = 16432 + end + item + Command = ecGotoMarker1 + ShortCut = 16433 + end + item + Command = ecGotoMarker2 + ShortCut = 16434 + end + item + Command = ecGotoMarker3 + ShortCut = 16435 + end + item + Command = ecGotoMarker4 + ShortCut = 16436 + end + item + Command = ecGotoMarker5 + ShortCut = 16437 + end + item + Command = ecGotoMarker6 + ShortCut = 16438 + end + item + Command = ecGotoMarker7 + ShortCut = 16439 + end + item + Command = ecGotoMarker8 + ShortCut = 16440 + end + item + Command = ecGotoMarker9 + ShortCut = 16441 + end + item + Command = ecSetMarker0 + ShortCut = 24624 + end + item + Command = ecSetMarker1 + ShortCut = 24625 + end + item + Command = ecSetMarker2 + ShortCut = 24626 + end + item + Command = ecSetMarker3 + ShortCut = 24627 + end + item + Command = ecSetMarker4 + ShortCut = 24628 + end + item + Command = ecSetMarker5 + ShortCut = 24629 + end + item + Command = ecSetMarker6 + ShortCut = 24630 + end + item + Command = ecSetMarker7 + ShortCut = 24631 + end + item + Command = ecSetMarker8 + ShortCut = 24632 + end + item + Command = ecSetMarker9 + ShortCut = 24633 + end + item + Command = EcFoldLevel1 + ShortCut = 41009 + end + item + Command = EcFoldLevel2 + ShortCut = 41010 + end + item + Command = EcFoldLevel3 + ShortCut = 41011 + end + item + Command = EcFoldLevel4 + ShortCut = 41012 + end + item + Command = EcFoldLevel5 + ShortCut = 41013 + end + item + Command = EcFoldLevel6 + ShortCut = 41014 + end + item + Command = EcFoldLevel7 + ShortCut = 41015 + end + item + Command = EcFoldLevel8 + ShortCut = 41016 + end + item + Command = EcFoldLevel9 + ShortCut = 41017 + end + item + Command = EcFoldLevel0 + ShortCut = 41008 + end + item + Command = EcFoldCurrent + ShortCut = 41005 + end + item + Command = EcUnFoldCurrent + ShortCut = 41003 + end + item + Command = EcToggleMarkupWord + ShortCut = 32845 + end + item + Command = ecNormalSelect + ShortCut = 24654 + end + item + Command = ecColumnSelect + ShortCut = 24643 + end + item + Command = ecLineSelect + ShortCut = 24652 + end + item + Command = ecTab + ShortCut = 9 + end + item + Command = ecShiftTab + ShortCut = 8201 + end + item + Command = ecMatchBracket + ShortCut = 24642 + end + item + Command = ecColSelUp + ShortCut = 40998 + end + item + Command = ecColSelDown + ShortCut = 41000 + end + item + Command = ecColSelLeft + ShortCut = 40997 + end + item + Command = ecColSelRight + ShortCut = 40999 + end + item + Command = ecColSelPageDown + ShortCut = 40994 + end + item + Command = ecColSelPageBottom + ShortCut = 57378 + end + item + Command = ecColSelPageUp + ShortCut = 40993 + end + item + Command = ecColSelPageTop + ShortCut = 57377 + end + item + Command = ecColSelLineStart + ShortCut = 40996 + end + item + Command = ecColSelLineEnd + ShortCut = 40995 + end + item + Command = ecColSelEditorTop + ShortCut = 57380 + end + item + Command = ecColSelEditorBottom + ShortCut = 57379 + end> + MouseActions = <> + MouseTextActions = <> + MouseSelActions = <> + Lines.Strings = ( + '' + ) + Options = [eoBracketHighlight, eoGroupUndo, eoScrollPastEol, eoSmartTabs, eoTabIndent, eoTabsToSpaces, eoTrimTrailingSpaces] + VisibleSpecialChars = [vscSpace, vscTabAtLast] + SelectedColor.BackPriority = 50 + SelectedColor.ForePriority = 50 + SelectedColor.FramePriority = 50 + SelectedColor.BoldPriority = 50 + SelectedColor.ItalicPriority = 50 + SelectedColor.UnderlinePriority = 50 + SelectedColor.StrikeOutPriority = 50 + BracketHighlightStyle = sbhsBoth + BracketMatchColor.Background = clNone + BracketMatchColor.Foreground = clNone + BracketMatchColor.Style = [fsBold] + FoldedCodeColor.Background = clNone + FoldedCodeColor.Foreground = clGray + FoldedCodeColor.FrameColor = clGray + MouseLinkColor.Background = clNone + MouseLinkColor.Foreground = clBlue + LineHighlightColor.Background = clNone + LineHighlightColor.Foreground = clNone + inline SynLeftGutterPartList1: TSynGutterPartList + object SynGutterMarks1: TSynGutterMarks + Width = 24 + MouseActions = <> + end + object SynGutterLineNumber1: TSynGutterLineNumber + Width = 17 + MouseActions = <> + MarkupInfo.Background = clBtnFace + MarkupInfo.Foreground = clNone + DigitCount = 2 + ShowOnlyLineNumbersMultiplesOf = 1 + ZeroStart = False + LeadingZeros = False + end + object SynGutterChanges1: TSynGutterChanges + Width = 4 + MouseActions = <> + ModifiedColor = 59900 + SavedColor = clGreen + end + object SynGutterSeparator1: TSynGutterSeparator + Width = 2 + MouseActions = <> + MarkupInfo.Background = clWhite + MarkupInfo.Foreground = clGray + end + object SynGutterCodeFolding1: TSynGutterCodeFolding + MouseActions = <> + MarkupInfo.Background = clNone + MarkupInfo.Foreground = clGray + MouseActionsExpanded = <> + MouseActionsCollapsed = <> + end + end + end + object SQuery: TSplitter + Cursor = crVSplit + Left = 0 + Height = 5 + Top = 256 + Width = 640 + Align = alBottom + ResizeAnchor = akBottom + end + object ILQuery: TImageList + left = 32 + top = 47 + Bitmap = { + 4C69080000001000000010000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000008080FF008080FF008080FF0080 + 80FF008080FF008080FF00000000000000000000000000000000000000000000 + 000000000000000000000000000000000000008080FF00FFFFFF00FFFFFF00FF + FFFF00FFFFFF008080FF00000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000008080FF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF008080FF000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080FF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF008080FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000080 + 80FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008080FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008080FF00FFFFFF00FFFFFF00FFFFFF008080FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000080 + 80FF00FFFFFF00FFFFFF00FFFFFF008080FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000008080FF00FF + FFFF00FFFFFF00FFFFFF008080FF000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000080 + 80FF00FFFFFF00FFFFFF00FFFFFF008080FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008080FF00FFFFFF00FFFFFF008080FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000008080FF00FFFFFF00FFFFFF008080FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000008080FF00FFFFFF00FFFFFF008080FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000008080FF00FFFFFF00FFFFFF008080FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000008080FF00FFFFFF008080FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000000000000000000000008080FF008080FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 80FF000000000000000000000000000000000000000000000000000080FF0000 + 0000000000000000000000000000000000000000000000000000000080FF0000 + FFFF000080FF00000000000000000000000000000000000080FF0000FFFF0000 + 80FF0000000000000000000000000000000000000000000080FF0000FFFF0000 + FFFF0000FFFF000080FF0000000000000000000080FF0000FFFF0000FFFF0000 + FFFF000080FF000000000000000000000000000080FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000080FF000080FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000080FF00000000000080FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000080FF00000000000080FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000080FF000000000000000000000000000080FF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF000080FF0000000000000000000000000000000000000000000080FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 80FF000000000000000000000000000000000000000000000000000080FF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + 80FF0000000000000000000000000000000000000000000080FF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF000080FF000000000000000000000000000080FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000080FF00000000000080FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000080FF00000000000080FF0000FFFF0000FFFF0000 + FFFF0000FFFF0000FFFF000080FF000080FF0000FFFF0000FFFF0000FFFF0000 + FFFF0000FFFF000080FF000000000000000000000000000080FF0000FFFF0000 + FFFF0000FFFF000080FF0000000000000000000080FF0000FFFF0000FFFF0000 + FFFF000080FF0000000000000000000000000000000000000000000080FF0000 + FFFF000080FF00000000000000000000000000000000000080FF0000FFFF0000 + 80FF000000000000000000000000000000000000000000000000000000000000 + 80FF000000000000000000000000000000000000000000000000000080FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000004000FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000004000FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000004000FF00FF00FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000040 + 00FF00FF00FF008000FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000004000FF00FF + 00FF008000FF008000FF00FF00FF004000FF0000000000000000000000000000 + 00000000000000000000000000000000000000000000004000FF00FF00FF0080 + 00FF008000FF008000FF00FF00FF004000FF004000FF004000FF004000FF0040 + 00FF004000FF004000FF004000FF00000000004000FF00FF00FF008000FF0080 + 00FF008000FF008000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF004000FF004000FF00FF00FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF008000FF0080 + 00FF008000FF00FF00FF004000FF004000FF00FF00FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF008000FF0080 + 00FF008000FF00FF00FF004000FF00000000004000FF00FF00FF008000FF0080 + 00FF008000FF008000FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF004000FF0000000000000000004000FF00FF00FF0080 + 00FF008000FF008000FF00FF00FF004000FF004000FF004000FF004000FF0040 + 00FF004000FF004000FF004000FF000000000000000000000000004000FF00FF + 00FF008000FF008000FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000040 + 00FF00FF00FF008000FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000004000FF00FF00FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000004000FF00FF00FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000004000FF004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF004000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF004000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF00FF00FF004000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF008000FF00FF00FF0040 + 00FF000000000000000000000000004000FF004000FF004000FF004000FF0040 + 00FF004000FF004000FF004000FF004000FF00FF00FF008000FF008000FF00FF + 00FF004000FF0000000000000000004000FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000FF008000FF0080 + 00FF00FF00FF004000FF00000000004000FF00FF00FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF008000FF0080 + 00FF008000FF00FF00FF004000FF004000FF00FF00FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF008000FF0080 + 00FF008000FF00FF00FF004000FF004000FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000FF008000FF0080 + 00FF00FF00FF004000FF00000000004000FF004000FF004000FF004000FF0040 + 00FF004000FF004000FF004000FF004000FF00FF00FF008000FF008000FF00FF + 00FF004000FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF008000FF00FF00FF0040 + 00FF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF00FF00FF004000FF0000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF00FF00FF004000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF004000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000004000FF0000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 000000000000000000FF000000FF000000FF000000FF00000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000FF000000FF00000000000000FF000000FF000000FF000000FF0000 + 0000000000FF0000000000000000000000000000000000000000000000000000 + 00FF0000000000000000000000000000000000000000000000FF000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000FF0000 + 00FF000000FF0000000000000000000000000000000000000000000000000000 + 00000000000000000000000000000000000000000000000000FF000000FF0000 + 00FF000000FF0000000000000000000000001B334EFF1B334EFF1B334EFF1B33 + 4EFF000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000000000001B334EFF66A5E5FF9AD3FEFF85C5FEFF66A5 + E5FF1B334EFF1B334EFF1B334EFF1B334EFF1B334EFF1B334EFF1B334EFF0000 + 00000000000000000000000000001B334EFF9AD3FEFF87C5FDFF82C2FEFF62AC + F8FF62ACF8FF62ACF8FF62ACF8FF62ACF8FF62ACF8FF62ACF8FF62ACF8FF0000 + 00FF0000000000000000000000001B334EFF8AC8FEFF82C2FEFF1B334EFF4D50 + 53FF4D5053FF4F5255FF575A5CFF4E5154FF4E5154FF505356FF505356FF4E51 + 54FF000000FF000000FF000000FF1B334EFF82C2FEFF4E86C4FF4C4F52FFF5F5 + F5FFF5F5F5FFECECECFFE4E4E4FFDCDCDCFFD4D4D4FFCBCBCBFFC4C4C4FFBCBC + BCFFB5B5B5FFB3B3B3FF303030FF1B334EFF82C2FEFF19314AFFDBDBDBFFDEDF + DFFFE7E8E8FFE4E6E6FFDEDFDFFFD1D2D2FFC6C7C7FFB9BABAFFACADADFF9FA0 + A0FF939494FF484949FF000000001B334EFF447DB7FF4E5153FFDADADAFFDADB + DBFFE0E1E1FFDCDDDDFFD5D6D6FFCACBCBFFC0C1C1FFB5B6B6FFA8A9A9FF9FA0 + A0FF676868FF212222FF000000001B334EFF183049FFCDCDCDFFC9CACAFFD4D5 + D5FFD4D5D5FFD0D2D2FFCBCCCCFFC1C2C2FFB8B9B9FFAEAFAFFFA1A2A2FF9495 + 95FF484949FF00000000000000001B334EFF505356FFCECECEFFBCBEBEFFC2C4 + C4FFC5C6C6FFC2C3C3FFBEBFBFFFB5B6B6FFADAEAEFFA4A5A5FF9D9E9EFF6E6F + 6FFF121212FF00000000000000001B334EFFBDBDBDFFA5A6A6FFA8AAAAFFABAD + ADFFACAEAEFFAAABABFFA6A7A7FFA0A1A1FF999A9AFF929494FF8B8D8DFF4849 + 49FF000000000000000000000000232323FF4A4A4AFF494A4AFF4B4C4CFF4C4C + 4CFF4B4C4CFF4A4B4BFF484949FF464646FF434343FF404141FF333434FF1E1F + 1FFF000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000A6D7FDFF447FC8FF263E5BFF1B1B1BFF3F3F + 3FFF404040FF404040FF404040FF404040FF404040FF404040FF404040FF1C1C + 1CFF1C1C1CFF00000000000000000478EAFF4AA9FAFF6FB3EEFF6B9DD0FF729A + CCFFC3D0DEFFF4F7FAFFF2F6FBFFEEF4FAFFEAF1F9FFE6EEF8FFE2ECF7FF4040 + 40FF777777FF1C1C1CFF00000000000000FF035CB6FF0475E1FF309AF8FF7FC1 + F5FF5F97D2FF6187A1FF989E6EFFA4A468FFA5A569FFB6BBABFFE0EAF6FF4040 + 40FF737373FF1C1C1CFF00000000000000000B0E10FF061829FF023569FF0C7B + E8FF2F84ECFF75A2EEFF8DA8DBFFD2DBE9FFE3ECF6FFE1EBF7FFDDE8F6FF4040 + 40FF707070FF1C1C1CFF00000000000000001A1A1AFF717171FF202020FF1522 + 33FF2A4571FF49679EFF5F7DB6FF44536AFF9B9B62FFB4B9A9FFDBE7F5FF4040 + 40FF6D6D6DFF1C1C1CFF00000000000000001C1C1CFF7A7A7AFF3D3D3DFFDBDE + E2FFC2C6CBFFB3B8BEFFACB2B9FFB0B7BEFFC3CBD6FFD6E2EFFFD8E5F4FF4040 + 40FF696969FF1C1C1CFF00000000000000001C1C1CFF797979FF777777FF3F3F + 3FFF3D3D3DFF3C3C3CFF3C3C3CFF3C3C3CFF3D3D3DFF3F3F3FFF404040FF6767 + 67FF666666FF1C1C1CFF00000000000000001C1C1CFF757575FF737373FF7272 + 72FF707070FF6E6E6EFF6D6D6DFF6B6B6BFF696969FF676767FF666666FF6464 + 64FF626262FF1C1C1CFF00000000000000001C1C1CFF727272FF707070FF6E6E + 6EFF404040FF404040FF404040FF404040FF404040FF404040FF404040FF6060 + 60FF5F5F5FFF1C1C1CFF00000000000000001C1C1CFF6E6E6EFF6D6D6DFF4040 + 40FFE6E6E6FFDBDBDBFFD1D1D1FFC7C7C7FF404040FF8E8E8EFF8B8B8BFF4040 + 40FF5B5B5BFF1C1C1CFF00000000000000001C1C1CFF6B6B6BFF696969FF4040 + 40FFDBDBDBFF424242FF424242FFBCBCBCFF404040FF858585FF838383FF4040 + 40FF585858FF1C1C1CFF00000000000000001C1C1CFF676767FF666666FF4040 + 40FFD1D1D1FF424242FF666666FFB2B2B2FF404040FF7D7D7DFF7B7B7BFF4040 + 40FF545454FF1C1C1CFF00000000000000001C1C1CFF646464FF626262FF4040 + 40FFC7C7C7FFBCBCBCFFB2B2B2FFA7A7A7FF404040FF757575FF737373FF4040 + 40FF535353FF1C1C1CFF0000000000000000000000001C1C1CFF1C1C1CFF1C1C + 1CFF404040FF404040FF404040FF404040FF1C1C1CFF1C1C1CFF1C1C1CFF1C1C + 1CFF1C1C1CFF0000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000000000000000000000000000008000FF008000FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF008000FF008000FF008000FF000000000000 + 0000000000000000000000000000008000FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000FF000000000000 + 0000000000000000000000000000008000FF00FF00FF00FF00FF00FF00FF00FF + 00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF00FF008000FF000000000000 + 0000000000000000000000000000008000FF008000FF008000FF008000FF0080 + 00FF008000FF008000FF008000FF00FF00FF00FF00FF008000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000008000FF00FF00FF00FF00FF008000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 00000000000000000000008000FF00FF00FF00FF00FF008000FF000000000000 + 0000000000000000000000000000000000000000000000000000000000000000 + 0000008000FF008000FF008000FF00FF00FF00FF00FF008000FF008000FF0080 + 00FF000000000000000000000000008080FF008080FF008080FF00C0C0FF00C0 + C0FF00C0C0FF008000FF00FF00FF00FF00FF00FF00FF00FF00FF008000FF00C0 + C0FF008080FF008080FF008080FF008080FF00C0C0FF00C0C0FF00C0C0FF00C0 + C0FF00C0C0FF00C0C0FF008000FF00FF00FF00FF00FF008000FF00C0C0FF00C0 + C0FF00C0C0FF00C0C0FF008080FF008080FF00C0C0FF00FFFFFF00C0C0FF00C0 + C0FF00C0C0FF00C0C0FF00C0C0FF008000FF008000FF00C0C0FF00C0C0FF00C0 + C0FF00FFFFFF00C0C0FF008080FF008080FF00C0C0FF00FFFFFF00C0C0FF00FF + FFFF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00FFFFFF00C0 + C0FF00FFFFFF00C0C0FF008080FF008080FF00C0C0FF00FFFFFF00C0C0FF00FF + FFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0 + C0FF00FFFFFF00C0C0FF008080FF008080FF00C0C0FF00FFFFFF00FFFFFF00C0 + C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF00FF + FFFF00FFFFFF00C0C0FF008080FF008080FF008080FF00C0C0FF00FFFFFF00FF + FFFF00FFFFFF00FFFFFF00C0C0FF00C0C0FF00FFFFFF00FFFFFF00FFFFFF00FF + FFFF00C0C0FF008080FF000000000000000000000000008080FF00C0C0FF00C0 + C0FF00C0C0FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00C0C0FF00C0C0FF00C0 + C0FF008080FF0000000000000000000000000000000000000000008080FF0080 + 80FF008080FF00C0C0FF00C0C0FF00C0C0FF00C0C0FF008080FF008080FF0080 + 80FF0000000000000000000000000000FFFF0000FFFF0000FFFFFFFFFFFFFFFF + FFFFFFFFFFFF0000FFFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFF0000FFFF0000 + FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF + FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFF0000FFFFFFFFFFFFFFFF + FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFF + FFFF0000FFFFFFFCFFFFFFFDFFFF0000FFFFFFFFFFFF0000FFFFFEFDFEFFFAFB + FBFFF9FAFAFFFAFDFDFFFAFEFDFF0000FFFF0000FFFF0000FFFFFFFFFFFFFFFF + FFFF0000FFFF0000FFFF0000FFFF0000FFFFFFFFFFFF0000FFFF0000FFFF0000 + FFFFF9FAFAFFFCFDFDFFFBFCFCFF0000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFF0000FFFFFFFFFFFFFFFFFFFF0000FFFFFFFFFFFFFFFBFEFFFFFBFDFFFFFC + FDFF0000FFFFFBF9F9FFF8F8F8FF0000FFFFFFFFFFFFFFFFFFFFFFFBFEFFFFFF + FFFF0000FFFFFFF9FDFFFFF7FBFF0000FFFFFFFFFFFF0000FFFFFFFBFEFFFFF7 + FAFF0000FFFFFFFCFEFFFFFCFDFF0000FFFFFFFFFFFFFFFCFDFFFFF9FBFFFFFF + FFFF0000FFFFFFF7F9FFFFF7F9FF0000FFFFFFFFFFFF0000FFFF0000FFFF0000 + FFFFFFF7F8FFFFF7F9FFFFF8FAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF + FFFFFFFFFFFFFFFFFFFFFFFFFFFF7E7E7E00CECDCEFFDCD9DAFF757070FF756F + 6FFF756F6FFF756F6FFF756F6FFF756F6FFF756F6FFF756F6FFF756F6FFF756F + 6FFF756F6FFF756F70FF756D6DFF7E7E7E00CECDCEFFF1EEEFFFC7C2C2FFC7C1 + C1FFC7C1C0FFC7C1C0FFC7C1C0FFC7C1C0FFC7C1C0FFC7C1C0FFC7C1C1FFC7C1 + C1FFC7C1C1FFC7C1C2FFC7BEBDFF7E7E7E00CECDCEFFC1BEBFFF070102FF0701 + 02FF070102FF070102FF070102FF070102FF070102FF070102FF070102FF0701 + 02FF070102FF070102FF070102FF7E7E7E00CECDCEFFFFFCFCFFFFF9F9FFFFF7 + F8FFFFF7F7FFFFF8F7FFFFF8F7FFFFF7F7FFFFF7F7FFFFF7F7FFFFF7F7FFFFF7 + F7FFFFF7F7FFFFF7F8FFFFF4F6FF7E7E7E00CECDCEFFCECBCCFF3E3839FF3E37 + 38FF3E3738FF3E3838FF3E3838FF3E3738FF3E3738FF3E3738FF3E3738FF3E37 + 38FF3E3738FF3E3738FF3E3738FF7E7E7E00CECDCEFFE3E0E1FF918B8BFF918A + 8BFF918A8BFF918A8BFF918A8BFF918A8AFF918A8AFF918A8AFF918A8AFF918A + 8AFF918A8AFF918A8BFF918B8BFF7E7E7E00CECDCEFFEAE7E8FFACA7A6FFACA5 + A6FFACA5A6FFACA5A6FFACA5A6FFACA5A5FFCAC4C3FFFDF8F7FFFDF7F7FFFDF7 + F7FFE8E3E2FFACA5A6FFACA6A6FF7E7E7E00CECDCEFFC8C5C6FF231D1EFF231D + 1EFF231D1EFF231D1EFF231D1DFF231D1DFF746F6FFFFBF8F8FFFBF8F8FFFBF8 + F8FFC5C1C1FF231C1DFF231D1EFF + } + end + object ALQuery: TActionList + Images = ILQuery + left = 85 + top = 48 + object AExecute: TAction + Caption = 'Execute statement' + Hint = 'Execute SQL statement(s)' + ImageIndex = 0 + OnExecute = BExecClick + OnUpdate = NotBusy + ShortCut = 16453 + end + object ACloseQuery: TAction + Caption = 'ACloseQuery' + Hint = 'Close dataset' + ImageIndex = 1 + OnExecute = CloseQueryClick + OnUpdate = DataShowing + end + object APreviousQuery: TAction + Caption = 'Previous SQL' + Hint = 'Previous SQL statement' + ImageIndex = 2 + OnExecute = PreviousQueryClick + OnUpdate = HavePreviousQuery + end + object ANextQuery: TAction + Caption = 'ANextQuery' + Hint = 'Next SQL statement' + ImageIndex = 3 + OnExecute = NextQueryClick + OnUpdate = HaveNextQuery + end + object ALoadSQL: TAction + Caption = 'ALoadSQL' + Hint = 'Load SQL from file' + ImageIndex = 4 + OnExecute = LoadQueryClick + OnUpdate = NotBusy + end + object ASaveSQL: TAction + Caption = 'ASaveSQL' + Hint = 'Save SQL to file' + ImageIndex = 5 + OnExecute = SaveQueryClick + OnUpdate = NotBusy + end + object AExport: TAction + Caption = 'AExport' + Hint = 'Export Data' + ImageIndex = 6 + OnExecute = ExportDataClick + OnUpdate = DataShowing + end + object ACreateCode: TAction + Caption = 'ACreateCode' + Hint = 'Create code from dataset' + ImageIndex = 7 + OnExecute = CreateCodeClick + OnUpdate = DataShowing + end + end + object SQLSyn: TSynSQLSyn + DefaultFilter = 'SQL Files (*.sql)|*.sql' + TableNameAttri.Foreground = 2779939 + SQLDialect = sqlInterbase6 + left = 200 + top = 47 + end + object ODSQL: TOpenDialog + DefaultExt = '.sql' + Options = [ofFileMustExist, ofEnableSizing, ofViewDetail] + left = 144 + top = 48 + end + object SDSQL: TSaveDialog + Options = [ofOverwritePrompt, ofPathMustExist, ofEnableSizing] + left = 256 + top = 48 + end +end diff --git a/tools/lazdatadesktop/fraquery.pp b/tools/lazdatadesktop/fraquery.pp new file mode 100644 index 0000000000..d4859abcfe --- /dev/null +++ b/tools/lazdatadesktop/fraquery.pp @@ -0,0 +1,496 @@ +unit fraquery; + +{$mode objfpc}{$H+} + +interface + +uses + Classes, SysUtils, FileUtil, SynHighlighterSQL, SynEdit, LResources, Forms, + DB, LCLType, Controls, ComCtrls, StdCtrls, ActnList, Dialogs, ExtCtrls, + fpDatadict, fradata, lazdatadeskstr; + +type + + { TQueryFrame } + + TQueryFrame = class(TFrame) + ACloseQuery: TAction; + ACreateCode: TAction; + AExport: TAction; + ASaveSQL: TAction; + ALoadSQL: TAction; + ANextQuery: TAction; + APreviousQuery: TAction; + AExecute: TAction; + ALQuery: TActionList; + ILQuery: TImageList; + MResult: TMemo; + ODSQL: TOpenDialog; + PCResult: TPageControl; + FMSQL: TSynEdit; + SDSQL: TSaveDialog; + SQuery: TSplitter; + SQLSyn: TSynSQLSyn; + TBExecute: TToolButton; + TBSep1: TToolButton; + TBPrevious: TToolButton; + TBClose: TToolButton; + TBNext: TToolButton; + TBSep2: TToolButton; + TBLoadSQL: TToolButton; + TBSaveSQL: TToolButton; + TBSep3: TToolButton; + ToolButton1: TToolButton; + ToolButton2: TToolButton; + TSResult: TTabSheet; + TSData: TTabSheet; + ToolBar1: TToolBar; + procedure AExecuteExecute(Sender: TObject); + procedure BExecClick(Sender: TObject); + procedure CloseQueryClick(Sender: TObject); + procedure HaveNextQuery(Sender: TObject); + procedure HavePreviousQuery(Sender: TObject); + procedure LoadQueryClick(Sender: TObject); + procedure NextQueryClick(Sender: TObject); + procedure OnMemoKey(Sender: TObject; var Key: Word; Shift: TShiftState); + procedure PreviousQueryClick(Sender: TObject); + procedure SaveQueryClick(Sender: TObject); + procedure ExportDataClick(Sender: TObject); + procedure CreateCodeClick(Sender: TObject); + Procedure NotBusy(Sender: TObject); + Procedure DataShowing(Sender: TObject); + private + { private declarations } + FEngine: TFPDDEngine; + FQueryHistory : TStrings; + FCurrentQuery : Integer; + FBusy : Boolean; + FData : TDataFrame; + procedure ClearResults; + procedure DoExecuteQuery(Qry: String); + procedure LocalizeFrame; + procedure SetTableNames; + public + Protected + procedure SetEngine(const AValue: TFPDDEngine); + Function GetDataset: TDataset; + Procedure CreateControls; virtual; + Public + Constructor Create(AOwner : TComponent); override; + Destructor Destroy; override; + procedure ExecuteQuery(Qry: String); + procedure SaveQuery(AFileName: String); + procedure LoadQuery(AFileName: String); + Function AddToHistory(Qry : String) : Integer; + Function NextQuery : Integer; + Function PreviousQuery : Integer; + Procedure CloseDataset; + Procedure FreeDataset; + Procedure ExportData; + Procedure CreateCode; + Procedure ActivatePanel; + Property Dataset : TDataset Read GetDataset; + Property Engine : TFPDDEngine Read FEngine Write SetEngine; + Property QueryHistory : TStrings Read FQueryHistory; + Property CurrentQuery : Integer Read FCurrentQuery; + Property Busy : Boolean Read FBusy; + { public declarations } + end; + +implementation + +uses strutils, sqldb, fpdataexporter, fpcodegenerator; + +{$r *.lfm} + + +constructor TQueryFrame.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + FQueryHistory:=TStringList.Create; + FCurrentQuery:=-1; + CreateControls; + LocalizeFrame; +end; + +destructor TQueryFrame.Destroy; +begin + FreeAndNil(FQueryHistory); + inherited Destroy; +end; + +procedure TQueryFrame.SetEngine(const AValue: TFPDDEngine); +begin + if FEngine=AValue then exit; + If Assigned(Dataset) then + begin + CloseDataset; + FreeDataset; + end; + FEngine:=AValue; + SetTableNames; +end; + +procedure TQueryFrame.SetTableNames; + +begin + SQLSyn.TableNames.BeginUpdate; + try + SQLSyn.TableNames.Clear; + if (FEngine=Nil) or Not (FEngine.Connected) then + exit; + FEngine.GetTableList(SQLSyn.TableNames); + finally + SQLSyn.TableNames.EndUpdate; + end; +end; + +procedure TQueryFrame.ExportDataClick(Sender: TObject); +begin + ExportData; +end; + +procedure TQueryFrame.CreateCodeClick(Sender: TObject); +begin + CreateCode; +end; + +function TQueryFrame.GetDataset: TDataset; +begin + Result:=FData.Dataset; +end; + +procedure TQueryFrame.LocalizeFrame; + +begin + // Localize + AExecute.Caption:=SExecute; + AExecute.Hint:=SHintExecute; + APreviousQuery.Caption:=SPrevious; + APreviousQuery.Hint:=SHintPrevious; + ANextQuery.Caption:=SNext; + ANextQuery.Hint:=SHintNext; + ALoadSQL.Caption:=SLoad; + ALoadSQL.Hint:=SHintLoad; + ASaveSQL.Caption:=SSave; + ASaveSQL.Hint:=SHintSave; + ACloseQuery.Caption:=SClose; + ACloseQuery.Hint:=SHintClose; + AExport.Caption:=SExport; + AExport.Hint:=SHintExport; + ACreateCode.Caption:=SCreateCode; + ACreateCode.Hint:=SHintCreateCode; + ODSQL.Filter:=SSQLFilters; + SDSQL.Filter:=SSQLFilters; +end; + +procedure TQueryFrame.CreateControls; + +begin + FData:=TDataFrame.Create(Self); + FData.Parent:=TSData; + FData.Align:=alClient; + FData.Visible:=True; + FData.ShowExtraButtons:=False; + MResult.Lines.Clear; + MResult.Append(SReadyForSQL); +end; + +{ --------------------------------------------------------------------- + Callbacks + ---------------------------------------------------------------------} + +procedure TQueryFrame.OnMemoKey(Sender: TObject; var Key: Word; Shift: TShiftState); +begin + If (Key=VK_E) and (Shift=[ssCtrl]) then + begin + AExecute.Execute; + Key:=0; + end; +end; + +procedure TQueryFrame.ClearResults; + +Var + DS : TDataset; + +begin + MResult.Clear; + DS:=Dataset; + If Assigned(DS) then + CloseDataset; +end; + +procedure TQueryFrame.BExecClick(Sender : TObject); + +begin + ClearResults; + ExecuteQuery(FMSQL.Lines.Text); +end; + +procedure TQueryFrame.AExecuteExecute(Sender: TObject); +begin + +end; + +procedure TQueryFrame.CloseQueryClick(Sender : TObject); + +begin + CloseDataset; +end; + +procedure TQueryFrame.NotBusy(Sender : TObject); + +begin + (Sender as TAction).Enabled:=Not FBusy; +end; + +procedure TQueryFrame.DataShowing(Sender : TObject); + +Var + DS : TDataset; + +begin + DS:=Dataset; + (Sender as TAction).Enabled:=Assigned(DS) and DS.Active; +end; + +procedure TQueryFrame.HaveNextQuery(Sender : TObject); + +begin + (Sender as TAction).Enabled:=(FCurrentQuery0); +end; + +procedure TQueryFrame.NextQueryClick(Sender : TObject); + +begin + NextQuery; +end; + +procedure TQueryFrame.PreviousQueryClick(Sender : TObject); + +begin + PreviousQuery; +end; + +procedure TQueryFrame.LoadQueryClick(Sender : TObject); + +begin + With ODSQL do + begin + Options:=[ofFileMustExist]; + If Execute then + LoadQuery(FileName); + end; +end; + +procedure TQueryFrame.SaveQueryClick(Sender : TObject); + +begin + With SDSQL.Create(Self) do + begin + If Execute then + SaveQuery(FileName); + end; +end; + +{ --------------------------------------------------------------------- + Actual commands + ---------------------------------------------------------------------} + +procedure TQueryFrame.LoadQuery(AFileName: String); + +begin + FMSQL.Lines.LoadFromFile(AFileName); +end; + +function TQueryFrame.AddToHistory(Qry: String): Integer; + +Var + I : Integer; + +begin + I:=FQueryHistory.IndexOf(Qry); + If (I=-1) then + FCurrentQuery:=FQueryHistory.Add(Qry) + else + begin + FQueryHistory.Move(I,FQueryHistory.Count-1); + FCurrentQuery:=FQueryHistory.Count-1; + end; + Result:=FCurrentQuery; +end; + +function TQueryFrame.NextQuery: Integer; +begin + If FCurrentQuery0) then + begin + Dec(FCurrentQuery); + FMSQL.Lines.Text:=FQueryHistory[FCurrentQuery]; + end; + Result:=FCurrentQuery; +end; + + +procedure TQueryFrame.SaveQuery(AFileName: String); + +begin + FMSQL.Lines.SaveToFile(AFileName); +end; + +procedure TQueryFrame.DoExecuteQuery(Qry : String); + +Var + DS : TDataset; + S,RowsAff : String; + N : Integer; + TS,TE : TDateTime; + +begin + RowsAff:=''; + TS:=Now; + MResult.Append(Format(SExecutingSQLStatement,[DateTimeToStr(TS)])); + MResult.Append(Qry); + If Not assigned(FEngine) then + Raise Exception.Create(SErrNoEngine); + S:=ExtractDelimited(1,Trim(Qry),[' ',#9,#13,#10]); + If (CompareText(S,'SELECT')<>0) then + begin + N:=FEngine.RunQuery(Qry); + TE:=Now; + If ecRowsAffected in FEngine.EngineCapabilities then + RowsAff:=Format(SRowsAffected,[N]); + TSData.TabVisible:=False; + PCResult.ActivePage:=TSResult; + end + else + begin + DS:=Dataset; + If Assigned(DS) then + FEngine.SetQueryStatement(Qry,DS) + else + begin + DS:=FEngine.CreateQuery(Qry,Self); + FData.Dataset:=DS; + end; + TSData.TabVisible:=true; + PCResult.ActivePage:=TSData; + DS.Open; + TE:=Now; + RowsAff:=Format(SRecordsFetched,[DS.RecordCount]); + end; + MResult.Append(Format(SSQLExecutedOK,[DateTimeToStr(TE)])); + MResult.Append(Format(SExecutionTime,[FormatDateTime('hh:nn:ss.zzz',TE-TS,[fdoInterval])])); + if (RowsAff<>'') then + MResult.Append(RowsAff); + AddToHistory(Qry); + ACloseQuery.Update; +end; + +procedure TQueryFrame.ExecuteQuery(Qry : String); + +Var + Msg : String; + +begin + FBusy:=True; + Try + try + DoExecuteQuery(Qry); + except + on Ed : ESQLDatabaseError do + begin + Msg:=Ed.Message; + if Ed.ErrorCode<>0 then + Msg:=Msg+sLineBreak+Format(SSQLErrorCode,[Ed.ErrorCode]); + if (Ed.SQLState<>'') then + Msg:=Msg+sLineBreak+Format(SSQLStatus,[Ed.SQLState]); + end; + On E : EDatabaseError do + begin + Msg:=E.Message; + end; + end; + if (Msg<>'') then + begin + PCResult.ActivePage:=TSResult; + MResult.Append(SErrorExecutingSQL); + MResult.Append(Msg); + end; + Finally + FBusy:=False; + end; +end; + +procedure TQueryFrame.CloseDataset; +begin + FBusy:=True; + Try + FData.Dataset.Close; + FData.Visible:=False; + ACloseQuery.Update; + Finally + FBusy:=False; + end; +end; + +procedure TQueryFrame.FreeDataset; + +Var + D : TDataset; + +begin + D:=FData.Dataset; + FData.Dataset:=Nil; + D.Free; +end; + + + +procedure TQueryFrame.ExportData; + +begin + With TFPDataExporter.Create(Dataset) do + try + Execute; + finally + Free; + end; +end; + +procedure TQueryFrame.CreateCode; +begin + With TFPCodeGenerator.Create(Dataset) do + try + SQL:=FMSQL.Lines; + DataSet:=Self.Dataset; + Execute; + Finally + Free; + end; +end; + +procedure TQueryFrame.ActivatePanel; +begin + If SQLSyn.TableNames.Count=0 then + SetTableNames; +end; + +end. + diff --git a/tools/lazdatadesktop/frmmain.lfm b/tools/lazdatadesktop/frmmain.lfm index bd6acb633d..01fa8eb593 100644 --- a/tools/lazdatadesktop/frmmain.lfm +++ b/tools/lazdatadesktop/frmmain.lfm @@ -221,8 +221,10 @@ object MainForm: TMainForm DefaultItemHeight = 16 Images = ILMain PopupMenu = PMAll + ReadOnly = True TabOrder = 0 OnDblClick = TVAllDblClick + Options = [tvoAutoItemHeight, tvoHideSelection, tvoKeepCollapsedNodes, tvoReadOnly, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw] end end end diff --git a/tools/lazdatadesktop/lazdatadeskstr.pas b/tools/lazdatadesktop/lazdatadeskstr.pas index 464c6f9f8e..171f1093d1 100644 --- a/tools/lazdatadesktop/lazdatadeskstr.pas +++ b/tools/lazdatadesktop/lazdatadeskstr.pas @@ -140,6 +140,14 @@ resourcestring SHintExport = 'Export this data'; SCreateCode = 'Create code'; SHintCreateCode = 'Create pascal code for this data'; + SExecutingSQLStatement = '%s : Executing SQL statement:'; + SRecordsFetched = 'Records fetched: %d'; + SSQLexecutedOK = '%s : Statement executed succesfully.'; + SExecutionTime = 'Execution time: %s'; + SSQLErrorCode = 'SQL Error code: %d'; + SSQLStatus = 'SQL State: %s'; + SErrorExecutingSQL = 'Error executing SQL statement:'; + SReadyForSQL = 'Ready to execute SQL statements'; // Main form SSaveData = 'Save changes'; diff --git a/tools/lazdatadesktop/lazdatadesktop.lpi b/tools/lazdatadesktop/lazdatadesktop.lpi index 38cf9ff423..9cb49b3cc1 100644 --- a/tools/lazdatadesktop/lazdatadesktop.lpi +++ b/tools/lazdatadesktop/lazdatadesktop.lpi @@ -30,29 +30,32 @@ - + - + - + - + - + - + - + + + + - + @@ -101,27 +104,31 @@ - + - - - - - - - - - - + + + + + + + + + + + + + + @@ -133,11 +140,6 @@ - - - - - diff --git a/tools/lazdatadesktop/lazdatadesktop.lpr b/tools/lazdatadesktop/lazdatadesktop.lpr index 2705b4dd7a..4937c8145e 100644 --- a/tools/lazdatadesktop/lazdatadesktop.lpr +++ b/tools/lazdatadesktop/lazdatadesktop.lpr @@ -9,8 +9,8 @@ uses Interfaces, // this includes the LCL widgetset Forms, frmmain, dicteditor, DBFLaz, frmimportdd, frmgeneratesql, SQLDBLaz, lazdatadict, RunTimeTypeInfoControls, frmSQLConnect, - ddfiles, conneditor, datapanel, querypanel, frmselectconnectiontype, - lazdatadeskstr, lazdbexport; + ddfiles, conneditor, frmselectconnectiontype, + lazdatadeskstr, lazdbexport, fraquery, fradata; {$R *.res} diff --git a/tools/lazdatadesktop/querypanel.pp b/tools/lazdatadesktop/querypanel.pp deleted file mode 100644 index 865e9e4dda..0000000000 --- a/tools/lazdatadesktop/querypanel.pp +++ /dev/null @@ -1,510 +0,0 @@ -{ - *************************************************************************** - * * - * This source is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This code is distributed in the hope that it will be useful, but * - * WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * - * General Public License for more details. * - * * - * A copy of the GNU General Public License is available on the World * - * Wide Web at . You can also * - * obtain it by writing to the Free Software Foundation, * - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * * - *************************************************************************** -} -unit querypanel; - -{$mode objfpc}{$H+} - -interface - -uses - Classes, SysUtils, DB, fpDatadict, FileUtil, Controls, ExtCtrls, StdCtrls, - ComCtrls, LResources, LCLType, Dialogs, ActnList, datapanel, SynEdit, SynMemo, - SynHighlighterSQL, lazdatadeskstr; - -Type - - { TQueryPanel } - - TQueryPanel = Class(TCustomPanel) - private - FEngine: TFPDDEngine; - FPToolBar : TPanel; - FToolBar : TToolBar; - FIL : TImageList; - FAL : TActionList; - AExecute : TAction; - ANextQuery : TAction; - APreviousQuery : TAction; - ACloseQuery : TAction; - ALoadSQL : TAction; - ASaveSQL : TAction; - AExport : TAction; - ACreateCode : TAction; - FMSQL: TSynMemo; // later change to SQL highlighting Syn memo. - FSplit: TSplitter; - FData : TDataPanel; - FQueryHistory : TStrings; - FCurrentQuery : Integer; - FBusy : Boolean; - procedure BExecClick(Sender: TObject); - procedure CloseQueryClick(Sender: TObject); - Function GetDataset: TDataset; - procedure HaveNextQuery(Sender: TObject); - procedure HavePreviousQuery(Sender: TObject); - procedure LoadQueryClick(Sender: TObject); - procedure NextQueryClick(Sender: TObject); - procedure OnMemoKey(Sender: TObject; var Key: Word; Shift: TShiftState); - procedure PreviousQueryClick(Sender: TObject); - procedure SaveQueryClick(Sender: TObject); - procedure SetEngine(const AValue: TFPDDEngine); - procedure ExportDataClick(Sender: TObject); - procedure CreateCodeClick(Sender: TObject); - Protected - Procedure CreateControls; virtual; - procedure CreateActions; virtual; - procedure CreateButtons; virtual; - procedure CreateImageList; virtual; - Procedure NotBusy(Sender: TObject); - Procedure DataShowing(Sender: TObject); - Public - Constructor Create(AOwner : TComponent); override; - Destructor Destroy; override; - procedure ExecuteQuery(Qry: String); - procedure SaveQuery(AFileName: String); - procedure LoadQuery(AFileName: String); - Function AddToHistory(Qry : String) : Integer; - Function NextQuery : Integer; - Function PreviousQuery : Integer; - Procedure CloseDataset; - Procedure FreeDataset; - Procedure ExportData; - Procedure CreateCode; - Property Dataset : TDataset Read GetDataset; - Property Engine : TFPDDEngine Read FEngine Write SetEngine; - Property QueryHistory : TStrings Read FQueryHistory; - Property CurrentQuery : Integer Read FCurrentQuery; - Property Busy : Boolean Read FBusy; - end; - -implementation - -{$R querypanel.res} - -uses strutils, fpdataexporter, fpcodegenerator; - -{ TQueryPanel } - -{ --------------------------------------------------------------------- - Setup - ---------------------------------------------------------------------} - -constructor TQueryPanel.Create(AOwner: TComponent); -begin - inherited Create(AOwner); - CreateControls; - FQueryHistory:=TStringList.Create; - FCurrentQuery:=-1; -end; - -destructor TQueryPanel.Destroy; -begin - FreeAndNil(FQueryHistory); - inherited Destroy; -end; - -procedure TQueryPanel.SetEngine(const AValue: TFPDDEngine); -begin - if FEngine=AValue then exit; - If Assigned(Dataset) then - begin - CloseDataset; - FreeDataset; - end; - FEngine:=AValue; -end; - -procedure TQueryPanel.ExportDataClick(Sender: TObject); -begin - ExportData; -end; - -procedure TQueryPanel.CreateCodeClick(Sender: TObject); -begin - CreateCode; -end; - -function TQueryPanel.GetDataset: TDataset; -begin - Result:=FData.Dataset; -end; - -procedure TQueryPanel.CreateControls; -begin - // Images for actionlist/toolbar - CreateImageList; - // Actions; - CreateActions; - // Toolbar panel; - FPToolBar:=TPanel.Create(Self); - FPToolBar.Parent:=Self; - FPToolBar.Align:=alTop; - FPToolBar.height:=30; - // Toolbar itself - FToolBar:=TToolbar.Create(Self); - FToolBar.Parent:=FPToolBar; - FToolBar.Images:=FIL; - FToolbar.Flat:=True; - FToolBar.ShowHint:=True; - // Toolbar buttons - CreateButtons; - // Data panel - FData:=TDataPanel.Create(Self); - FData.Parent:=Self; - FData.Align:=alBottom; - FData.Height:=200; - FData.Visible:=False; - FData.ShowExtraButtons:=False; - // Splitter - FSplit:=TSplitter.Create(Self); - FSplit.Parent:=Self; - FSplit.Align:=alBottom; - // Syntax memo; - FMSQL:=TSynMemo.Create(Self); - FMSQL.Parent:=Self; - FMSQL.Align:=AlClient; - FMSQL.Highlighter:=TSynSQLSyn.Create(Self); - FMSQL.Options:=[eoSmartTabDelete, eoSmartTabs, eoTabIndent, eoTabsToSpaces, eoTrimTrailingSpaces, eoBracketHighlight]; - FMSQL.OnKeyDown:=@OnMemoKey; - FMSQL.ExtraLineSpacing:=2; -end; - -procedure TQueryPanel.CreateImageList; - -begin - FIL:=TImageList.Create(Self); - FIL.AddResourceName(HInstance, 'qrybtn_execute'); - FIL.AddResourceName(HInstance, 'qrybtn_close'); - FIL.AddResourceName(HInstance, 'qrybtn_previous'); - FIL.AddResourceName(HInstance, 'qrybtn_next'); - FIL.AddResourceName(HInstance, 'qrybtn_open'); - FIL.AddResourceName(HInstance, 'qrybtn_save'); - FIL.AddResourceName(HInstance, 'qrybtn_export'); - FIL.AddResourceName(HInstance, 'qrybtn_code'); -end; - -procedure TQueryPanel.CreateActions; - - Function NewAction(ACaption,AHint : String; AImageIndex : Integer; AOnExecute,AOnUpdate : TNotifyEvent) : TAction; - - begin - Result:=TAction.Create(Self); - Result.Caption:=ACaption; - Result.Hint:=AHint; - Result.ImageIndex:=AImageIndex; - Result.OnExecute:=AOnExecute; - Result.OnUpdate:=AOnUpdate; - Result.ActionList:=FAL; - end; - -begin - FAL:=TActionList.Create(Self); - FAL.Images:=FIL; - AExecute:=NewAction(SExecute,SHintExecute,0,@BExecClick,@NotBusy); - AExecute.ShortCut:=KeyToShortCut(VK_E,[ssCtrl]); - ACloseQuery:=NewAction(SClose,SHintClose,1,@CloseQueryClick,@DataShowing); - APreviousQuery:=NewAction(SPrevious,SHintPrevious,2,@PreviousQueryClick,@HavePreviousQuery); - ANextQuery:=NewAction(SNext,SHintNext,3,@NextQueryClick,@HaveNextQuery); - ALoadSQL:=NewAction(SLoad,SHintLoad,4,@LoadQueryClick,@NotBusy); - ASaveSQL:=NewAction(SSave,SHintSave,5,@SaveQueryClick,@NotBusy); - AExport:=NewAction(SExport,SHintExport,6,@ExportDataClick,@DataShowing); - ACreateCode:=NewAction(SCreateCode,SHintCreateCode,7,@CreateCodeClick,@DataShowing); -end; - - -procedure TQueryPanel.CreateButtons; - - Function NewButton(AAction : TAction; Var L : Integer) : TToolButton; - - begin - Result:=TToolbutton.Create(FToolBar); - Result.Parent:=FToolBar; - Result.Action:=AAction; - Result.Left:=L; - L:=L+FToolBar.ButtonWidth+1; - end; - - procedure NewSeparator(Var L : Integer); - var - B : TToolButton; - begin - B:=NewButton(Nil,L); - B.Style:=tbsSeparator; - B.Width:=8; - Dec(L,FToolBar.ButtonWidth-8); - end; - -Var - L : integer; - -begin - L:=0; - NewButton(AExecute,L); - NewButton(ACloseQuery,L); - NewSeparator(L); - NewButton(APreviousQuery,L); - NewButton(ANextQuery,L); - NewSeparator(L); - NewButton(ALoadSQL,L); - NewButton(ASaveSQL,L); - NewSeparator(L); - NewButton(AExport,L); - NewButton(ACreateCode,L); -end; - -{ --------------------------------------------------------------------- - Callbacks - ---------------------------------------------------------------------} - -procedure TQueryPanel.OnMemoKey(Sender: TObject; var Key: Word; Shift: TShiftState); -begin - If (Key=VK_E) and (Shift=[ssCtrl]) then - begin - AExecute.Execute; - Key:=0; - end; -end; - -procedure TQueryPanel.BExecClick(Sender : TObject); - -begin - ExecuteQuery(FMSQL.Lines.Text); -end; - -procedure TQueryPanel.CloseQueryClick(Sender : TObject); - -begin - CloseDataset; -end; - -procedure TQueryPanel.NotBusy(Sender : TObject); - -begin - (Sender as TAction).Enabled:=Not FBusy; -end; - -procedure TQueryPanel.DataShowing(Sender : TObject); - -Var - DS : TDataset; - -begin - DS:=Dataset; - (Sender as TAction).Enabled:=Assigned(DS) and DS.Active; -end; - -procedure TQueryPanel.HaveNextQuery(Sender : TObject); - -begin - (Sender as TAction).Enabled:=(FCurrentQuery0); -end; - -procedure TQueryPanel.NextQueryClick(Sender : TObject); - -begin - NextQuery; -end; - -procedure TQueryPanel.PreviousQueryClick(Sender : TObject); - -begin - PreviousQuery; -end; - -procedure TQueryPanel.LoadQueryClick(Sender : TObject); - -begin - With TOpenDialog.Create(Self) do - try - Filter:=SSQLFilters; - Options:=[ofFileMustExist]; - If Execute then - LoadQuery(FileName); - Finally - Free; - end; -end; - -procedure TQueryPanel.SaveQueryClick(Sender : TObject); - -begin - With TSaveDialog.Create(Self) do - try - Filter:=SSQLFilters; - Options:=[ofPathMustExist,ofOverwritePrompt]; - If Execute then - SaveQuery(FileName); - Finally - Free; - end; -end; - -{ --------------------------------------------------------------------- - Actual commands - ---------------------------------------------------------------------} - -procedure TQueryPanel.LoadQuery(AFileName: String); - -begin - FMSQL.Lines.LoadFromFile(AFileName); -end; - -function TQueryPanel.AddToHistory(Qry: String): Integer; - -Var - I : Integer; - -begin - I:=FQueryHistory.IndexOf(Qry); - If (I=-1) then - FCurrentQuery:=FQueryHistory.Add(Qry) - else - begin - FQueryHistory.Move(I,FQueryHistory.Count-1); - FCurrentQuery:=FQueryHistory.Count-1; - end; - Result:=FCurrentQuery; -end; - -Function TQueryPanel.NextQuery : Integer; -begin - If FCurrentQuery0) then - begin - Dec(FCurrentQuery); - FMSQL.Lines.Text:=FQueryHistory[FCurrentQuery]; - end; - Result:=FCurrentQuery; -end; - - -procedure TQueryPanel.SaveQuery(AFileName: String); - -begin - FMSQL.Lines.SaveToFile(AFileName); -end; - -procedure TQueryPanel.ExecuteQuery(Qry : String); - -Var - DS : TDataset; - S : String; - N : Integer; - -begin - FBusy:=True; - Try - If Not assigned(FEngine) then - Raise Exception.Create(SErrNoEngine); - DS:=Dataset; - If Assigned(DS) then - CloseDataset; - S:=ExtractDelimited(1,Trim(Qry),[' ',#9,#13,#10]); - If (CompareText(S,'SELECT')<>0) then - begin - N:=FEngine.RunQuery(Qry); - If ecRowsAffected in FEngine.EngineCapabilities then - ShowMessage(Format(SRowsAffected,[N])); - end - else - begin - If Assigned(DS) then - FEngine.SetQueryStatement(Qry,DS) - else - begin - DS:=FEngine.CreateQuery(Qry,Self); - FData.Dataset:=DS; - end; - FData.Visible:=True; - FSplit.Top:=FData.Top-10; - DS.Open; - end; - AddToHistory(Qry); - ACloseQuery.Update; - Finally - FBusy:=False; - end; -end; - -procedure TQueryPanel.CloseDataset; -begin - FBusy:=True; - Try - FData.Dataset.Close; - FData.Visible:=False; - ACloseQuery.Update; - Finally - FBusy:=False; - end; -end; - -procedure TQueryPanel.FreeDataset; - -Var - D : TDataset; - -begin - D:=FData.Dataset; - FData.Dataset:=Nil; - D.Free; -end; - - - -procedure TQueryPanel.ExportData; - -begin - With TFPDataExporter.Create(Dataset) do - try - Execute; - finally - Free; - end; -end; - -procedure TQueryPanel.CreateCode; -begin - With TFPCodeGenerator.Create(Dataset) do - try - SQL:=FMSQL.Lines; - DataSet:=Self.Dataset; - Execute; - Finally - Free; - end; -end; - -end. -