* Rework query panel and data panel so they are frames

git-svn-id: trunk@51167 -
This commit is contained in:
michael 2016-01-03 17:08:19 +00:00
parent 56c31e9131
commit 75ba67897f
12 changed files with 1823 additions and 763 deletions

6
.gitattributes vendored
View File

@ -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

View File

@ -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;

View File

@ -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 <http://www.gnu.org/copyleft/gpl.html>. 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.

View File

@ -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

View File

@ -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.

View File

@ -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

View File

@ -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:=(FCurrentQuery<FQueryHistory.Count-1);
end;
procedure TQueryFrame.HavePreviousQuery(Sender : TObject);
begin
(Sender as TAction).Enabled:=(FCurrentQuery>0);
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 FCurrentQuery<FQueryHistory.Count-1 then
begin
Inc(FCurrentQuery);
FMSQL.Lines.Text:=FQueryHistory[FCurrentQuery];
end;
Result:=FCurrentQuery;
end;
function TQueryFrame.PreviousQuery: Integer;
begin
If (FCurrentQuery>0) 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.

View File

@ -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

View File

@ -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';

View File

@ -30,29 +30,32 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
<RequiredPackages Count="7">
<RequiredPackages Count="8">
<Item1>
<PackageName Value="lazdbexport"/>
<PackageName Value="FCL"/>
</Item1>
<Item2>
<PackageName Value="RunTimeTypeInfoControls"/>
<PackageName Value="lazdbexport"/>
</Item2>
<Item3>
<PackageName Value="lazdatadict"/>
<PackageName Value="RunTimeTypeInfoControls"/>
</Item3>
<Item4>
<PackageName Value="SynEdit"/>
<PackageName Value="lazdatadict"/>
</Item4>
<Item5>
<PackageName Value="SQLDBLaz"/>
<PackageName Value="SynEdit"/>
</Item5>
<Item6>
<PackageName Value="LCL"/>
<PackageName Value="SQLDBLaz"/>
</Item6>
<Item7>
<PackageName Value="LCL"/>
</Item7>
<Item8>
<PackageName Value="DBFLaz"/>
<MinVersion Minor="1" Release="1" Valid="True"/>
</Item7>
</Item8>
</RequiredPackages>
<Units Count="13">
<Unit0>
@ -101,27 +104,31 @@
<IsPartOfProject Value="True"/>
</Unit7>
<Unit8>
<Filename Value="datapanel.pp"/>
<Filename Value="README.txt"/>
<IsPartOfProject Value="True"/>
</Unit8>
<Unit9>
<Filename Value="querypanel.pp"/>
<IsPartOfProject Value="True"/>
</Unit9>
<Unit10>
<Filename Value="README.txt"/>
<IsPartOfProject Value="True"/>
</Unit10>
<Unit11>
<Filename Value="frmselectconnectiontype.pp"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="SelectConnectionTypeForm"/>
<HasResources Value="True"/>
<ResourceBaseClass Value="Form"/>
</Unit11>
<Unit12>
</Unit9>
<Unit10>
<Filename Value="lazdatadeskstr.pas"/>
<IsPartOfProject Value="True"/>
</Unit10>
<Unit11>
<Filename Value="fraquery.pp"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="QueryFrame"/>
<ResourceBaseClass Value="Frame"/>
</Unit11>
<Unit12>
<Filename Value="fradata.pp"/>
<IsPartOfProject Value="True"/>
<ComponentName Value="DataFrame"/>
<ResourceBaseClass Value="Frame"/>
</Unit12>
</Units>
</ProjectOptions>
@ -133,11 +140,6 @@
<SearchPaths>
<UnitOutputDirectory Value="lib/$(TargetCPU)-$(TargetOS)"/>
</SearchPaths>
<Parsing>
<SyntaxOptions>
<UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<Linking>
<Options>
<Win32>

View File

@ -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}

View File

@ -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 <http://www.gnu.org/copyleft/gpl.html>. 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:=(FCurrentQuery<FQueryHistory.Count-1);
end;
procedure TQueryPanel.HavePreviousQuery(Sender : TObject);
begin
(Sender as TAction).Enabled:=(FCurrentQuery>0);
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 FCurrentQuery<FQueryHistory.Count-1 then
begin
Inc(FCurrentQuery);
FMSQL.Lines.Text:=FQueryHistory[FCurrentQuery];
end;
Result:=FCurrentQuery;
end;
Function TQueryPanel.PreviousQuery : Integer;
begin
If (FCurrentQuery>0) 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.