⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 editortabledata.pas

📁 功能强大的ER图建模工具的源代码。 可以代替ERWin了
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -