📄 di_main.pas
字号:
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 + -