📄 editortabledata.pas
字号:
unit EditorTableData;
//----------------------------------------------------------------------------------------------------------------------
//
// This file is part of fabFORCE DBDesigner4.
// Copyright (C) 2002 Michael G. Zinner, www.fabFORCE.net
//
// DBDesigner4 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.
//
// DBDesigner4 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.
// You should have received a copy of the GNU General Public License
// along with DBDesigner4; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
//----------------------------------------------------------------------------------------------------------------------
//
// Unit EditorTableData.pas
// ------------------------
// Version 1.0, 25.12.2002, Mike
// Description
// Editor for table data
//
// Changes:
// Version 1.0, 25.12.2002, Mike
// initial version, Mike
//
//----------------------------------------------------------------------------------------------------------------------
interface
uses
SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms,
QDialogs, QStdCtrls, FMTBcd, DB, DBClient, Provider, SqlExpr, QButtons,
QExtCtrls, QDBCtrls, QGrids, QDBGrids, QComCtrls, EERModel, IniFiles;
type
TEditorTableDataForm = class(TForm)
TopPnl: TPanel;
BottomPnl: TPanel;
TableLbl: TLabel;
OutputQry: TSQLQuery;
OutputDataSetProvider: TDataSetProvider;
OutputClientDataSet: TClientDataSet;
OutputDataSrc: TDataSource;
Label1: TLabel;
DBConnEd: TEdit;
GetDBConnSBtn: TSpeedButton;
TableCBox: TComboBox;
CommitPnl: TPanel;
QueryDockPnl: TPanel;
LeftPnl: TPanel;
OpenSQLPnlBtn: TSpeedButton;
RightPnl: TPanel;
OpenBlobBtn: TSpeedButton;
QueryMainPnl: TPanel;
BlobSplitter: TSplitter;
SQLSplitter: TSplitter;
BlobPnl: TPanel;
BlobPageControl: TPageControl;
ClearSheet: TTabSheet;
TextSheet: TTabSheet;
DBMemo: TDBMemo;
ImgSheet: TTabSheet;
DBImage: TDBImage;
BlobSheet: TTabSheet;
Splitter1: TSplitter;
BlobMemo: TMemo;
BlobHexMemo: TMemo;
BlobFuncPnl: TPanel;
BlobBtnPnl: TPanel;
BlobClearBtn: TSpeedButton;
BlobOpenBtn: TSpeedButton;
SpeedButton1: TSpeedButton;
SQLPnl: TPanel;
SQLHeaderPnl: TPanel;
SQLCmdLU: TComboBox;
SQLFuncPnl: TPanel;
SQLFuncRightPnl: TPanel;
SQLMemo: TMemo;
GridPnl: TPanel;
DBGrid: TDBGrid;
GridTopPnl: TPanel;
GridFuncPnl: TPanel;
SubmitBtn: TSpeedButton;
CancelBtn: TSpeedButton;
Bevel1: TBevel;
Bevel2: TBevel;
Bevel3: TBevel;
DBNav: TDBNavigator;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
DBNavigator3: TDBNavigator;
LoadSQLBtn: TSpeedButton;
SaveSQLBtn: TSpeedButton;
ClearSQLBtn: TSpeedButton;
ExecSQLBtn: TSpeedButton;
GetDBConn2SBtn: TSpeedButton;
Bevel4: TBevel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure SetTable(theTable: TEERTable);
procedure ApplyChanges;
procedure GetDBConnSBtnClick(Sender: TObject);
procedure TableCBoxChange(Sender: TObject);
procedure SubmitBtnClick(Sender: TObject);
procedure CancelBtnClick(Sender: TObject);
procedure DBGridColEnter(Sender: TObject);
procedure FormResize(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure BlobClearBtnClick(Sender: TObject);
procedure BlobOpenBtnClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure DBGridDblClick(Sender: TObject);
procedure OpenBlobBtnClick(Sender: TObject);
procedure OpenSQLPnlBtnClick(Sender: TObject);
procedure LeftPnlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RightPnlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ClearSQLBtnClick(Sender: TObject);
procedure LoadSQLBtnClick(Sender: TObject);
procedure SaveSQLBtnClick(Sender: TObject);
procedure ExecSQLBtnClick(Sender: TObject);
procedure SQLMemoDragDrop(Sender, Source: TObject; X, Y: Integer);
procedure SQLMemoDragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
procedure GetDBConn2SBtnClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
theEERTable: TEERTable;
end;
var
EditorTableDataForm: TEditorTableDataForm;
implementation
uses DBDM, MainDM, GUIDM, EER;
{$R *.xfm}
procedure TEditorTableDataForm.FormCreate(Sender: TObject);
begin
DMMain.InitForm(self);
OutputQry.SQLConnection:=DMDB.SQLConn;
BlobPageControl.Style:=tsNoTabs;
BlobPnl.Width:=0;
SQLPnl.Width:=0;
BlobHexMemo.Text:='';
end;
procedure TEditorTableDataForm.FormDestroy(Sender: TObject);
begin
//
end;
procedure TEditorTableDataForm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
//
end;
procedure TEditorTableDataForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
//
end;
procedure TEditorTableDataForm.SetTable(theTable: TEERTable);
var theTables: TStringList;
i: integer;
theColumn: TColumn;
begin
DBGrid.Columns.Clear;
DBMemo.DataField:='';
if(theTable=nil)then
Exit;
theEERTable:=theTable;
theTables:=TStringList.Create;
try
TableCBox.Items.Clear;
TEERModel(theEERTable.Parent).GetEERObjectNameList(EERTable, theTables);
TableCBox.Items.Assign(theTables);
TableCBox.ItemIndex:=TableCBox.Items.IndexOf(theEERTable.ObjName);
finally
theTables.Free;
end;
//when not connected to DB, connect now
if(DMDB.CurrentDBConn=nil)then
begin
DMDB.GetDBConnButtonClick(self, TEERModel(theEERTable.Parent).DefQueryDBConn);
if(DMDB.CurrentDBConn<>nil)then
TEERModel(theEERTable.Parent).DefQueryDBConn:=DMDB.CurrentDBConn.Name
else
Abort;
end
else
begin
OutputQry.Close;
OutputClientDataSet.Close;
end;
DBConnEd.Text:=PDBConn(DMDB.CurrentDBConn).Name;
OutputQry.SQL.Text:='SELECT * FROM '+theEERTable.ObjName;
OutputQry.Open;
OutputClientDataSet.Open;
for i:=0 to OutputClientDataSet.Fields.Count-1 do
begin
theColumn:=DBGrid.Columns.Add;
theColumn.Field:=OutputClientDataSet.Fields[i];
if(theColumn.Field.DataType=ftSmallint)or
(theColumn.Field.DataType=ftInteger)or
(theColumn.Field.DataType=ftWord)or
(theColumn.Field.DataType=ftLargeint)or
(theColumn.Field.DataType=ftAutoInc)then
theColumn.Width:=60
else if(theColumn.Field.DataType=ftString)or
(theColumn.Field.DataType=ftFixedChar)or
(theColumn.Field.DataType=ftWideString)then
theColumn.Width:=120
else if(theColumn.Field.DataType=ftDateTime)then
theColumn.Width:=120
else if(theColumn.Field.DataType=ftDate)or
(theColumn.Field.DataType=ftTime)then
theColumn.Width:=120
else
theColumn.Width:=50;
end;
DBGridColEnter(self);
end;
procedure TEditorTableDataForm.ApplyChanges;
begin
//
end;
procedure TEditorTableDataForm.GetDBConnSBtnClick(Sender: TObject);
begin
SetTable(theEERTable);
end;
procedure TEditorTableDataForm.TableCBoxChange(Sender: TObject);
var theTable: TEERTable;
begin
theTable:=TEERModel(theEERTable.Parent).GetEERObjectByName(EERTable, TableCBox.Items[TableCBox.ItemIndex]);
if(theTable<>nil)then
SetTable(theTable);
end;
procedure TEditorTableDataForm.SubmitBtnClick(Sender: TObject);
begin
if(OutputClientDataSet.Active)then
OutputClientDataSet.ApplyUpdates(-1);
end;
procedure TEditorTableDataForm.CancelBtnClick(Sender: TObject);
begin
if(OutputClientDataSet.Active)then
begin
OutputClientDataSet.Close;
OutputClientDataSet.Open;
end;
end;
procedure TEditorTableDataForm.DBGridColEnter(Sender: TObject);
var theStream: TMemoryStream;
thePicture: TPicture;
//i, toRead: integer;
theBuffer: Array [0..1024] of Char;
theText: Array [0..2048] of Char;
begin
DBMemo.DataField:='';
DBImage.DataField:='';
//String / Text
if(DBGrid.SelectedField.ClassNameIs('TMemoField'))or
(DBGrid.SelectedField.ClassNameIs('TStringField'))or
(DBGrid.SelectedField.ClassNameIs('TWideStringField'))or
(DBGrid.SelectedField.ClassNameIs('TAutoIncField'))then
begin
BlobPageControl.Activepage:=TextSheet;
DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
end
//Numeric
else if(DBGrid.SelectedField.ClassNameIs('TAutoIncField'))or
(DBGrid.SelectedField.ClassNameIs('TBooleanField'))or
(DBGrid.SelectedField.ClassNameIs('TFloatField'))or
(DBGrid.SelectedField.ClassNameIs('TGuidField'))or
(DBGrid.SelectedField.ClassNameIs('TIntegerField'))or
(DBGrid.SelectedField.ClassNameIs('TLargeintField'))or
(DBGrid.SelectedField.ClassNameIs('TSmallIntField'))then
begin
BlobPageControl.Activepage:=TextSheet;
DBMemo.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
end
else if(DBGrid.SelectedField.ClassNameIs('TGraphicField'))or
(DBGrid.SelectedField.ClassNameIs('TBlobField'))then
begin
thePicture:=TPicture.Create;
try
theStream:=TMemoryStream.Create;
try
try
DeleteFile('blob_tmp.png');
//TBlobField(DBGrid.SelectedField).SaveToStream(theStream);
TBlobField(DBGrid.SelectedField).SaveToFile('blob_tmp.png');
//Try to display as Image
thePicture.LoadFromFile('blob_tmp.png');
DBImage.DataField:=DBGrid.Columns[DBGrid.SelectedIndex].FieldName;
BlobPageControl.Activepage:=ImgSheet;
except
//if it is in another format, display as blob
BlobMemo.Lines.LoadFromFile('blob_tmp.png');
//Display Hex Data
BlobHexMemo.Text:='';
TBlobField(DBGrid.SelectedField).SaveToStream(theStream);
{toRead:=theStream.Size;
if(toRead>1024)then
toRead:=1024;
theStream.Read(theBuffer, 1024);}
BinToHex(theBuffer, theText, 1024);
BlobHexMemo.Text:=String(theText);
BlobPageControl.Activepage:=BlobSheet;
end;
finally
theStream.Free;
DeleteFile('blob_tmp.png');
end;
finally
thePicture.Free;
end;
end
else
begin
BlobPageControl.Activepage:=ClearSheet;
end;
end;
procedure TEditorTableDataForm.FormResize(Sender: TObject);
begin
DBConnEd.Width:=TopPnl.Width-505;
GetDBConnSBtn.Left:=DBConnEd.Left+DBConnEd.Width+5;
end;
procedure TEditorTableDataForm.FormShow(Sender: TObject);
begin
FormResize(self);
end;
procedure TEditorTableDataForm.BlobClearBtnClick(Sender: TObject);
begin
if(DBGrid.SelectedField=nil)then
Exit;
if(Not(OutputClientDataSet.State=dsEdit))or
(Not(OutputClientDataSet.State=dsInsert))then
OutputClientDataSet.Edit;
DBGrid.SelectedField.Clear;
end;
procedure TEditorTableDataForm.BlobOpenBtnClick(Sender: TObject);
var theOpenDialog: TOpenDialog;
RecentOpenBlobFieldDir: string;
theIni: TIniFile;
thePicture: TPicture;
begin
if(DBGrid.SelectedField=nil)then
Exit;
if(Not(OutputClientDataSet.Active))then
Exit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -