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

📄 di_main.pas

📁 亚惠快餐管理信息系统 包括亚惠快餐管理的各项功能
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit DI_Main;

{
代码单元名称:通用数据登录工具主窗口
从属软件:大连资金清算中心打码机管理信息系统
开发单位:大连理工大学计算机技术研究所软件工程研究室
作者:王树润
时间:2001,1,30
}

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  stdctrls,
  ComCtrls, ExtCtrls, DBCtrls, ToolWin, Menus, ImgList, Grids, DBGrids, db,
  IniFiles;

type
  PNodeInformation = ^TNodeInformation;
  TNodeInformation = record
    EnglishName: string;
    ChineseName: string;
  end;
  TDI_DfmMain = class(TForm)
    ImageList1: TImageList;
    CoolBar1: TCoolBar;
    ToolBar1: TToolBar;
    CloseToolButton: TToolButton;
    DBNavigator1: TDBNavigator;
    TreeView1: TTreeView;
    StatusBar1: TStatusBar;
    Notebook1: TNotebook;
    ScrollBox1: TScrollBox;
    Splitter1: TSplitter;
    Panel1: TPanel;
    DBGrid1: TDBGrid;
    ToolButton1: TToolButton;
    PopupMenu2: TPopupMenu;
    N24: TMenuItem;
    DBGrid2: TDBGrid;
    Splitter2: TSplitter;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    ToolButton5: TToolButton;
    ToolButton6: TToolButton;
    ToolButton7: TToolButton;
    ToolButton8: TToolButton;
    procedure FormShow(Sender: TObject);
    procedure PlayShiftToolButtonClick(Sender: TObject);
    procedure CloseToolButtonClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure DBGrid1DblClick(Sender: TObject);
    procedure TreeView1ContextPopup(Sender: TObject; MousePos: TPoint;
      var Handled: Boolean);
    procedure DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure SelectServerToolButtonClick(Sender: TObject);
    procedure CloseServerToolButtonClick(Sender: TObject);
    procedure OpenTableToolButtonClick(Sender: TObject);
    procedure CloseTableToolButtonClick(Sender: TObject);
    procedure CreateTableToolButtonClick(Sender: TObject);
    procedure DeleteToolButtonClick(Sender: TObject);
    procedure FieldCopyToolButtonClick(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure DBGrid1CellClick(Column: TColumn);
    procedure DBGrid2DblClick(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure ToolButton7Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    DI_DfmMain_ActiveLabelStrings: TStrings;
    DI_DfmMain_ActiveEditStrings: TStrings;
    DI_DfmMain_ActiveComponentNumber: integer;
    DI_DfmMain_TemporaryComponentNumber: integer;
    DI_DfmMain_TemporaryDatabaseName: string;
    DI_DfmMain_TemporaryTableName: string;
    DI_DfmMain_ServerName: string;
    DI_DfmMain_FormActiveNumber: integer;
    DI_DfmMain_ActiveMemoNumber: integer;
    DI_DfmMain_ActiveBlobNumber: integer;
    ServerName, DbName, DbUser, DbPsw: string;
    SelTableType: string;
    ReadOnlyFieldNames: TStrings;
    procedure TDBEditOnChange(Sender: TObject);
    procedure TDBEditDoubleClick(Sender: TObject);
    procedure TDBEditKeyDown(Sender: TObject; var Key: Word; Shift:
      TShiftState);
    procedure TTableADOQueryScroll(DataSet: TDataSet);
    procedure TADOQueryPostError(DataSet: TDataSet; E: EDatabaseError; var
      Action: TDataAction);
    procedure TADOQueryEditError(DataSet: TDataSet; E: EDatabaseError; var
      Action: TDataAction);
    procedure TADOQueryDeleteError(DataSet: TDataSet; E: EDatabaseError; var
      Action: TDataAction);
    procedure TDBRecordNumber(Sender: TObject);
    constructor ACreate(ATableType: string);
  end;

procedure SetWork(TableType: string);

implementation

uses DI_CreateNewTable, DI_DataModul1, DI_DBBlobField, DI_DBCalendar,
  DI_DBDictionery,
  DI_DBMemoField, DI_NewTableName, DI_FieldCopy, Main,
  PublicUnit, AG_Main, AG_HistroyList, DI_KHZL;

{$R *.DFM}

{ TDfmDBWrite }

procedure SetWork(TableType: string);
var
  DI_DfmMain: TDI_DfmMain;
begin
  Screen.Cursor := crHourGlass;
  FrmMain.Refresh;
  DI_DfmMain := TDI_DfmMain.ACreate(TableType);
  DI_DfmMain.Show;
  Screen.Cursor := crDefault;
end;

//窗体产生======================================================================

constructor TDI_DfmMain.ACreate(ATableType: string);
begin
  inherited Create(Application);
  SelTableType := ATableType;
end;

procedure TDI_DfmMain.FormShow(Sender: TObject);
begin
  ReadOnlyFieldNames := TStringList.Create;
  DI_DfmMain_ActiveMemoNumber := 0;
  DI_DfmMain_ActiveMemoNumber := 0;
  DI_DfmMain_ActiveBlobNumber := 0;
  DBGrid1.Visible := False;
  DBGrid2.Visible := False;
  Splitter2.Visible := False;
  DI_DfmMain_FormActiveNumber := 1;
  SelectServerToolButtonClick(Self);

  TreeView1.Selected := TreeView1.Items[TreeView1.Items.Count - 1];
  OpenTableToolButtonClick(Sender);
  TreeView1.Visible := False;

  {  if SelTableType = '盒饭销售记录' then
    begin
      TreeView1.Selected := TreeView1.Items[TreeView1.Items.Count - 1];
      OpenTableToolButtonClick(Sender);
      TreeView1.Visible := False;
    end;}
  Notebook1.ActivePage := 'DBEditPage';
end;

//窗体关闭======================================================================

procedure TDI_DfmMain.FormClose(Sender: TObject; var Action: TCloseAction);
var
  i: integer;
begin
  if TreeView1.Items.Count <> 0 then
  begin
    DI_DfmDataModule1.TTableADOQuery.Close;
    DI_DfmDataModule1.MasterADOQuery.Close;
    DI_DfmDataModule1.AnotherDBADOConnection.Close;
    DI_DfmDataModule1.MasterADOConnection.Close;
    for i := DI_DfmMain_ActiveComponentNumber - 1 downto 0 do
    begin
      DI_DfmMain_ActiveLabelStrings.Objects[i].Free;
      DI_DfmMain_ActiveEditStrings.Objects[i].Free;
    end;
    DI_DfmMain_ActiveLabelStrings.Free;
    DI_DfmMain_ActiveEditStrings.Free;
    Action := caFree;
  end;
  ReadOnlyFieldNames.Free;
  Action := caFree;
end;

//关闭按钮======================================================================

procedure TDI_DfmMain.CloseToolButtonClick(Sender: TObject);
begin
  Close;
end;

//表格、标签切换按钮============================================================

procedure TDI_DfmMain.PlayShiftToolButtonClick(Sender: TObject);
begin
  if Notebook1.PageIndex = 0 then
    Notebook1.ActivePage := 'DBEditPage'
  else
    Notebook1.ActivePage := 'DBGridPage';
end;

//表格状态字典==================================================================

procedure TDI_DfmMain.DBGrid1DblClick(Sender: TObject);
var
  DI_DfmDBDictionery: TDI_DfmDBDictionery;
  DI_DfmDBCalendar: TDI_DfmDBCalendar;
  DI_DfmDBMemoField: TDI_DfmDBMemoField;
  DI_DfmDBBlobField: TDI_DfmDBBlobField;
  TemporaryTableNames: TStrings;
  DictionaryTableName: string;
  IdentifyString: string;
begin
  if DBGrid1.SelectedField = nil then
    Exit;
  //显示MEMO字段=============================
  if DBGrid1.SelectedField.DataType in [ftMemo] then
  begin
    DI_DfmDBMemoField := TDI_DfmDBMemoField.Create(Self,
      DBGrid1.SelectedField.FieldName, TDI_DfmMain(Self));
    DI_DfmDBMemoField.Show;
    DI_DfmMain_ActiveMemoNumber := DI_DfmMain_ActiveMemoNumber + 1;
  end;
  //显示图形字段=============================
  if DBGrid1.SelectedField.DataType in [ftBlob, ftGraphic] then
  begin
    DI_DfmDBBlobField := TDI_DfmDBBlobField.Create(Self,
      DBGrid1.SelectedField.FieldName, TDI_DfmMain(Self));
    DI_DfmDBBlobField.Show;
    DI_DfmMain_ActiveBlobNumber := DI_DfmMain_ActiveBlobNumber + 1;
  end;
  //创建字典共用部分=============================
  if (DBGrid1.DataSource.DataSet.State in [dsEdit, dsInsert]) = False then
    Exit;
  if DBGrid1.SelectedField.DataType in [ftUnknown, ftSmallint, ftInteger,
    ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftBytes, ftVarBytes,
    ftAutoInc,
    ftBlob, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar,
    ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob,
    ftVariant, ftInterface, ftIDispatch, ftGuid, ftTimeStamp, ftFMTBcd] then
    Exit;
  IdentifyString := 'DBGrid';
  //创建金钱字典=================================
  {if DBGrid1.SelectedField.DataType in [ftBCD] then
  begin
    TemporaryTableNames:=TStringList.Create;
    DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,False);
    DictionaryTableName:='Dic_'+DBGrid1.SelectedField.FieldName;
    if TemporaryTableNames.IndexOf(DictionaryTableName)=-1  then
    begin
      if MessageDlg('没有字典,是否创建?',mtConfirmation,mbOKCancel,0)=mrCancel then Exit;
      with DI_DfmDataModule1.DictioneryADOQuery do
      begin
        Close;
        Sql.Clear;
        Sql.Add('Create Table '+DictionaryTableName);
        Sql.Add('(ID varChar (10),DICTIONARY Money not null Primary Key)');
        try ExecSql;
         except
           ShowMessage('error');
           Exit;
        end;
      end;
    end;
    DI_DfmDBDictionery:=TDI_DfmDBDictionery.Create(Self,DictionaryTableName,DBGrid1,TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[0]),IdentifyString);
    DI_DfmDBDictionery.ShowModal;
    DI_DfmDBDictionery.Free;
    TemporaryTableNames.Free;
  end;}
  //创建数字字典=================================
{  if DBGrid1.SelectedField.DataType in [ftFloat] then
  begin
    TemporaryTableNames:=TStringList.Create;
    DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,False);
    DictionaryTableName:='Dic_'+DBGrid1.SelectedField.FieldName;
    if TemporaryTableNames.IndexOf(DictionaryTableName)=-1  then
    begin
      if MessageDlg('没有字典,是否创建?',mtConfirmation,mbOKCancel,0)=mrCancel then Exit;
      with DI_DfmDataModule1.DictioneryADOQuery do
      begin
        Close;
        Sql.Clear;
        Sql.Add('Create Table '+DictionaryTableName);
        Sql.Add('(ID varChar (10),DICTIONARY float not null Primary Key)');
        try ExecSql;
         except
           ShowMessage('error');
           Exit;
        end;
      end;
    end;
    DI_DfmDBDictionery:=TDI_DfmDBDictionery.Create(Self,DictionaryTableName,DBGrid1,TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[0]),IdentifyString);
    DI_DfmDBDictionery.ShowModal;
    DI_DfmDBDictionery.Free;
    TemporaryTableNames.Free;
  end;}
  //创建字符字典=================================
  if DBGrid1.SelectedField.DataType in [ftString, ftWideString] then
  begin
    TemporaryTableNames := TStringList.Create;
    DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
      False);
    DictionaryTableName := 'Dic_' + DBGrid1.SelectedField.FieldName;
    if TemporaryTableNames.IndexOf(DictionaryTableName) = -1 then
    begin
      if MessageDlg('没有字典,是否创建?', mtConfirmation, mbOKCancel, 0) =
        mrCancel then
        Exit;
      with DI_DfmDataModule1.DictioneryADOQuery do
      begin
        Close;
        Sql.Clear;
        Sql.Add('Create Table ' + DictionaryTableName);
        Sql.Add('(ID varChar (10),DICTIONARY varChar(' +
          IntToStr(DBGrid1.SelectedField.Size) + ') not null Primary Key)');
        try
          ExecSql;
        except
          ShowMessage('error');
          Exit;
        end;
      end;
    end;
    DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DictionaryTableName,
      DBGrid1, TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[0]),
      IdentifyString);
    DI_DfmDBDictionery.ShowModal;
    DI_DfmDBDictionery.Free;
    TemporaryTableNames.Free;
  end;
  //创建日期字典==================
  if DBGrid1.SelectedField.DataType in [ftDate, ftTime, ftDateTime] then
  begin
    DI_DfmDBCalendar := TDI_DfmDBCalendar.Create(Self, DBGrid1,
      TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[0]), IdentifyString);
    DI_DfmDBCalendar.ShowModal;
    DI_DfmDBCalendar.Free;
  end;
end;

procedure TDI_DfmMain.TDBEditOnChange(Sender: TObject);
var
  TableCName: string;
  ADataSet: TDataSet;
  DFieldValue, DFieldValue2: string;
  pn: integer;
begin
  ADataSet := TDBEdit(Sender).DataSource.DataSet;
  if not (ADataSet.State in [dsEdit, dsInsert]) then
    Exit;
  TableCName := TreeView1.Selected.Text;
  if TableCName = '盒饭销售信息表' then
  begin
    //若是商品号发生变化
    if TDbEdit(Sender).Field.FieldName = '商品号' then
    begin
      DFieldValue := FieldTranslate('PZXX_DSPXX1', '商品号',
        TDbEdit(Sender).Text, '商品名称');
      DFieldValue2 := FieldTranslate('PZXX_DSPXX1', '商品号',
        TDbEdit(Sender).Text, '商品价格');
      if DFieldValue <> '' then
      begin
        ADataSet.FieldbyName('商品名称').Asstring := DFieldValue;
        ADataSet.FieldbyName('盒饭标准').Asstring := DFieldValue2;
        ADataSet.FieldbyName('盒饭销售额').AsFloat :=
          ADataSet.FieldbyName('盒饭标准').AsFloat *
          ADataSet.FieldbyName('盒饭数量').AsInteger;
      end
    end
      //若是商品名称发生变化
    else if TDbEdit(Sender).Field.FieldName = '商品名称' then
    begin
      DFieldValue := FieldTranslate('PZXX_DSPXX1', '商品名称',
        TDbEdit(Sender).Text, '商品号');
      DFieldValue2 := FieldTranslate('PZXX_DSPXX1', '商品名称',
        TDbEdit(Sender).Text, '商品价格');
      if DFieldValue <> '' then
      begin
        ADataSet.FieldbyName('商品号').Asstring := DFieldValue;
        ADataSet.FieldbyName('盒饭标准').Asstring := DFieldValue2;
        ADataSet.FieldbyName('盒饭销售额').AsFloat :=
          ADataSet.FieldbyName('盒饭标准').AsFloat *
          ADataSet.FieldbyName('盒饭数量').AsInteger;
      end
    end
      //若是盒饭数量发生变化
    else if TDbEdit(Sender).Field.FieldName = '盒饭数量' then
    begin
      try
        pn := StrToInt(TDbEdit(Sender).Text);
      except Exit;
      end;
      ADataSet.FieldByName('盒饭销售额').AsFloat :=
        ADataSet.FieldbyName('盒饭标准').AsFloat * pn;
    end;
  end;
end;

//标签状态字典==================================================================

procedure TDI_DfmMain.TDBEditDoubleClick(Sender: TObject);
var
  DI_DfmDBDictionery: TDI_DfmDBDictionery;
  DI_DfmDBCalendar: TDI_DfmDBCalendar;
  DI_DfmDBMemoField: TDI_DfmDBMemoField;
  DI_DfmDBBlobField: TDI_DfmDBBlobField;
  TemporaryTableNames: TStrings;
  DictionaryTableName: string;
  IdentifyString: string;
begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -