📄 di_main.pas
字号:
if (Sender is TDBEdit) = False then
Exit;
//显示MEMO字段=============================
if (Sender as TDBEdit).Field.DataType in [ftMemo] then
begin
DI_DfmDBMemoField := TDI_DfmDBMemoField.Create(Self, (Sender as
TDBEdit).Field.FieldName, TDI_DfmMain(Self));
DI_DfmDBMemoField.Show;
DI_DfmMain_ActiveMemoNumber := DI_DfmMain_ActiveMemoNumber + 1;
end;
//显示图形字段=============================
if (Sender as TDBEdit).Field.DataType in [ftBlob, ftGraphic] then
begin
DI_DfmDBBlobField := TDI_DfmDBBlobField.Create(Self, (Sender as
TDBEdit).Field.FieldName, TDI_DfmMain(Self));
DI_DfmDBBlobField.Show;
DI_DfmMain_ActiveBlobNumber := DI_DfmMain_ActiveBlobNumber + 1;
end;
//创建字典共用部分=============================
if ((Sender as TDBEdit).DataSource.DataSet.State in [dsEdit, dsInsert]) = False
then
Exit;
IdentifyString := 'DBEdit';
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;
if (Sender as TDBEdit).Field.DataType in [ftFloat, ftBCD] then
Exit;
//创建金钱字典=================================
{ if (Sender as TDBEdit).Field.DataType in [ftBCD] then
begin
TemporaryTableNames:=TStringList.Create;
DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,False);
DictionaryTableName:='Dic_'+TDBEdit(Sender).Field.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(Sender),IdentifyString);
DI_DfmDBDictionery.ShowModal;
DI_DfmDBDictionery.Free;
TemporaryTableNames.Free;
end;}
//创建数字字典=================================
{ if (Sender as TDBEdit).Field.DataType in [ftFloat] then
begin
TemporaryTableNames:=TStringList.Create;
DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,False);
DictionaryTableName:='Dic_'+TDBEdit(Sender).Field.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(Sender),IdentifyString);
DI_DfmDBDictionery.ShowModal;
DI_DfmDBDictionery.Free;
TemporaryTableNames.Free;
end;}
//创建字符字典=================================
if (Sender as TDBEdit).Field.DataType in [ftString, ftWideString] then
begin
TemporaryTableNames := TStringList.Create;
DI_DfmDataModule1.AnotherDBADOConnection.GetTableNames(TemporaryTableNames,
False);
DictionaryTableName := 'Dic_' + TDBEdit(Sender).Field.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(TDBEdit(Sender).Field.Size) + ') not null Primary Key)');
try
ExecSql;
except
ShowMessage('error');
Exit;
end;
end;
end;
DI_DfmDBDictionery := TDI_DfmDBDictionery.Create(Self, DictionaryTableName,
DBGrid1, TDBEdit(Sender), IdentifyString);
DI_DfmDBDictionery.ShowModal;
DI_DfmDBDictionery.Free;
TemporaryTableNames.Free;
end;
//创建日期字典==================
if (Sender as TDBEdit).Field.DataType in [ftDate, ftTime, ftDateTime] then
begin
DI_DfmDBCalendar := TDI_DfmDBCalendar.Create(Self, DBGrid1, TDBEdit(Sender),
IdentifyString);
DI_DfmDBCalendar.ShowModal;
DI_DfmDBCalendar.Free;
end;
end;
//DBGrid回车换行================================================================
procedure TDI_DfmMain.DBGrid1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Key = VK_UP) or (Key = VK_DOWN)) then
begin
TDBRecordNumber(sender);
end;
if Key = VK_RETURN then
begin
if dbgrid1.SelectedIndex = dbgrid1.Columns.Count - 1 then
begin
dbgrid1.SelectedIndex := 0;
if dbgrid1.DataSource.DataSet <> nil then
with dbgrid1.DataSource.DataSet do
begin
Next;
if EOF and CanModify then
Append;
end;
end
else
dbgrid1.SelectedIndex := dbgrid1.SelectedIndex + 1;
end;
end;
//DBEdit回车换行================================================================
procedure TDI_DfmMain.TDBEditKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Sender is TDBEdit) and (Key = VK_RETURN)) then
begin
if TDBEdit(Sender).TabOrder = DI_DfmMain_ActiveComponentNumber - 1 then
begin
if TDBEdit(Sender).DataSource.DataSet <> nil then
with TDBEdit(Sender).DataSource.DataSet do
begin
Next;
if EOF and CanModify then
Append;
end;
if ScrollBox1.Controls[2 * DI_DfmMain_ActiveComponentNumber -
DI_DfmMain_TemporaryComponentNumber] is TDBEdit then
(ScrollBox1.Controls[2 * DI_DfmMain_ActiveComponentNumber -
DI_DfmMain_TemporaryComponentNumber] as TDBEdit).SetFocus;
end
else
perform(WM_NEXTDLGCTL, 0, 0);
end;
end;
//确定只有在库上才能创建表======================================================
procedure TDI_DfmMain.TreeView1ContextPopup(Sender: TObject;
MousePos: TPoint; var Handled: Boolean);
begin
end;
//监控记录状态==================================================================
procedure TDI_DfmMain.TTableADOQueryScroll(DataSet: TDataSet);
begin
// StatusBar1.Panels[2].Text:=' 现在位于第 '+IntToStr(DI_DfmDataModule1.TTableADOQuery.RecNo)+' 条';
end;
procedure TDI_DfmMain.TDBRecordNumber(Sender: TObject);
begin
StatusBar1.Panels[2].Text := ' 现在位于第 ' +
IntToStr(DI_DfmDataModule1.TTableADOQuery.RecNo) + ' 条';
end;
//选择服务器并显示数据库=====================================
procedure TDI_DfmMain.SelectServerToolButtonClick(Sender: TObject);
var
MyServerNameNode, MyDatabaseNameNode, MyTableTypeNode, MyTTableNameNode:
TTreeNode;
i, j, TableTypeCount, TableCount: integer;
RunCursor: TCursor;
MyNodeInformation: PNodeInformation;
ti: TInifile;
TableType: string;
begin
Screen.Cursor := crHourGlass;
DI_DfmMain_ServerName := FrmMain.ServerName;
if DI_DfmMain_ServerName = '' then
begin
Screen.Cursor := crDefault;
Exit;
end;
StatusBar1.Panels[0].Text := '当前登录的数据库服务器为' +
DI_DfmMain_ServerName;
DI_DfmMain_ActiveComponentNumber := 0;
DI_DfmMain_ActiveLabelStrings := TStringList.Create;
DI_DfmMain_ActiveEditStrings := TStringList.Create;
//增加服务器节点
New(MyNodeInformation);
MyNodeInformation^.EnglishName := '服务器名称:' + DI_DfmMain_SerVerName;
MyNodeInformation^.ChineseName := '服务器名称:' + DI_DfmMain_SerVerName;
MyServerNameNode := TreeView1.Items.AddObject(nil,
MyNodeInformation^.ChineseName, MyNodeInformation);
MyServerNameNode.ImageIndex := 16;
MyServerNameNode.SelectedIndex := 16;
//增加数据库节点
New(MyNodeInformation);
MyNodeInformation^.EnglishName := FrmMain.DbName;
MyNodeInformation^.ChineseName := FrmMain.DbCName;
MyDatabaseNameNode := TreeView1.Items.AddChildObject(MyServerNameNode,
MyNodeInformation^.ChineseName, MyNodeInformation);
MyDatabaseNameNode.ImageIndex := 18;
MyDatabaseNameNode.SelectedIndex := 18;
//增加表节点
ti := TIniFile.Create(ExtractFilePath(Application.ExeName) + '\System.ini');
TableTypeCount := ti.ReadInteger('System', 'TableTypeCount', 0);
for i := 1 to TableTypeCount do
begin
TableType := ti.ReadString('TableTypeList', 'TableType' + IntToStr(i), '');
if ((TableType <> SelTableType) and (SelTableType <> '业务管理子系统')) then
Continue;
New(MyNodeInformation);
MyNodeInformation^.ChineseName := TableType;
MyNodeInformation^.EnglishName := TableType;
MyTableTypeNode := TreeView1.Items.AddChildObject(MyDatabaseNameNode,
MyNodeInformation^.ChineseName, MyNodeInformation);
MyTableTypeNode.ImageIndex := 14;
MyTableTypeNode.SelectedIndex := 14;
TableCount := ti.ReadInteger(TableType, 'TableCount', 0);
for j := 1 to TableCount do
begin
New(MyNodeInformation);
MyNodeInformation^.ChineseName := ti.ReadString(TableType, 'Table' +
IntToStr(j), '');
MyNodeInformation^.EnglishName :=
GetTableEName(MyNodeInformation^.ChineseName);
MyTTableNameNode := TreeView1.Items.AddChildObject(MyTableTypeNode,
MyNodeInformation^.ChineseName, MyNodeInformation);
MyTTableNameNode.ImageIndex := 14;
MyTTableNameNode.SelectedIndex := 14;
end;
end;
ti.Free;
if TreeView1.Items.Count >= 2 then
TreeView1.Items[1].Selected := True;
DBGrid1.DataSource := DI_DfmDataModule1.TTableDataSource;
DBGrid2.DataSource := DI_DfmDataModule1.TTableDataSource;
DBNavigator1.DataSource := DI_DfmDataModule1.TTableDataSource;
Screen.Cursor := RunCursor;
DBGrid1.Visible := False;
DBGrid2.Visible := False;
Splitter2.Visible := False;
NoteBook1.PageIndex := 1;
TreeView1.Selected := TreeView1.Items[0];
TreeView1.FullExpand;
end;
//清空当前所有数据库============================================================
procedure TDI_DfmMain.CloseServerToolButtonClick(Sender: TObject);
var
i: integer;
begin
if TreeView1.Items.Count = 0 then
Exit;
if DI_DfmMain_ActiveMemoNumber <> 0 then
begin
ShowMessage('存在未关闭的Memo字段显示窗口,请先关闭该窗口!');
Exit;
end;
if DI_DfmMain_ActiveBlobNumber <> 0 then
begin
ShowMessage('存在未关闭的Blob字段显示窗口,请先关闭该窗口!');
Exit;
end;
DI_DfmDataModule1.TTableADOQuery.Close;
DI_DfmDataModule1.MasterADOQuery.Close;
DI_DfmDataModule1.ChineseTableNameADOQuery.Close;
DI_DfmDataModule1.AnotherDBADOConnection.Close;
DI_DfmDataModule1.MasterADOConnection.Close;
TreeView1.Hide;
for i := DI_DfmMain_ActiveComponentNumber - 1 downto 0 do
begin
DI_DfmMain_ActiveLabelStrings.Objects[i].Free;
DI_DfmMain_ActiveEditStrings.Objects[i].Free;
end;
for i := TreeView1.Items.Count - 1 downto 0 do
Dispose(TreeView1.Items[i].Data);
DI_DfmMain_ActiveLabelStrings.Free;
DI_DfmMain_ActiveEditStrings.Free;
DBGrid1.Visible := False;
DBGrid2.Visible := False;
Splitter2.Visible := False;
NoteBook1.PageIndex := 1;
StatusBar1.Panels[0].Text := '';
StatusBar1.Panels[1].Text := '';
StatusBar1.Panels[2].Text := '';
TreeView1.Items.Clear;
TreeView1.Refresh;
TreeView1.Show;
end;
//打开表========================================================================
procedure TDI_DfmMain.OpenTableToolButtonClick(Sender: TObject);
var
MyLabel: TLabel;
MyDBEdit: TDBEdit;
i, j, k: integer;
DTableIdentify: integer;
TableName: string;
begin
if TreeView1.Items.Count = 0 then
Exit;
if ((TreeView1.Selected = nil) or (TreeView1.Selected.Level <= 2)) then
Exit;
if DI_DfmMain_ActiveMemoNumber <> 0 then
begin
ShowMessage('存在未关闭的Memo字段显示窗口,请先关闭该窗口!');
Exit;
end;
if DI_DfmMain_ActiveBlobNumber <> 0 then
begin
ShowMessage('存在未关闭的Blob字段显示窗口,请先关闭该窗口!');
Exit;
end;
DBGrid1.Columns.Clear;
DTableIdentify := 0;
GetReadOnlyFieldNames(TreeView1.Selected.Text, ReadOnlyFieldNames);
//调整以前创建的构件========================================
if DI_DfmMain_ActiveComponentNumber <> 0 then
begin
for j := 1 to DI_DfmDataModule1.TTableADOQuery.FieldCount do
begin
TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[DI_DfmMain_ActiveComponentNumber - j]).Visible := False;
TDBEdit(DI_DfmMain_ActiveEditStrings.Objects[DI_DfmMain_ActiveComponentNumber - j]).DataField := '';
TLabel(DI_DfmMain_ActiveLabelStrings.Objects[DI_DfmMain_ActiveComponentNumber - j]).visible := False;
end;
end;
DI_DfmDataModule1.TTableADOQuery.Close;
DI_DfmDataModule1.AnotherDBADOConnection.Close;
DI_DfmDataModule1.AnotherDBADOConnection.ConnectionString :=
'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=' + FrmMain.Dbuser
+
';Password=' + FrmMain.DBPass + ';Initial Catalog=' + FrmMain.DbName +
';Data Source=' + FrmMain.ServerName;
//打开T表================================
with DI_DfmDataModule1.TTableADOQuery do
begin
Close;
Sql.Clear;
TableName := PNodeInformation(TreeView1.Selected.Data)^.EnglishName;
Sql.Add('Select * From ' +
PNodeInformation(TreeView1.Selected.Data)^.EnglishName);
try
Open;
except
ShowMessage('无法打开表!');
Exit;
end;
end;
//调整DBGrid=====================================================
for k := 0 to DI_DfmDataModule1.TTableADOQuery.FieldCount - 1 do
begin
DBGrid1.Columns.Add;
DBGrid1.Columns[k].Field := DI_DfmDataModule1.TTableADOQuery.Fields[k];
DBGrid1.Columns[k].Title.Alignment := taCenter;
end;
//动态创建构件===================================================
DBGrid1.Visible := True;
DBGrid2.Visible := True;
Splitter2.Visible := True;
SetDBGridFieldsDisplay(DBGrid2);
NoteBook1.PageIndex := 0;
for i := 0 to DI_DfmDataModule1.TTableADOQuery.FieldCount - 1 do
begin
MyLabel := TLabel.Create(ScrollBox1);
with Mylabel do
begin
Parent := ScrollBox1;
Name := 'Label' + '' + IntToStr(DI_DfmMain_ActiveComponentNumber + i) +
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -