📄 dbinfofrm.pas
字号:
I: Integer;
DBTableForm: TDBTableForm;
DBTableForms: array of TDBTableForm;
begin
for I := 0 to MainForm.MDIChildCount - 1 do
begin
if MainForm.MDIChildren[I] is TDBTableForm then
begin
DBTableForm := MainForm.MDIChildren[I] as TDBTableForm;
if DBTableForm.TableName = TableName then
begin
SetLength(DBTableForms, Length(DBTableForms) + 1);
DBTableForms[High(DBTableForms)] := DBTableForm;
end;
end;
end;
for I := 0 to High(DBTableForms) do
DBTableForms[I].Close;
SetLength(DBTableForms, 0);
end;
procedure TDBInfoForm.CloseAllTable;
var
I: Integer;
DBTableForm: TDBTableForm;
DBTableForms: array of TDBTableForm;
begin
for I := 0 to MainForm.MDIChildCount - 1 do
begin
if MainForm.MDIChildren[I] is TDBTableForm then
begin
DBTableForm := MainForm.MDIChildren[I] as TDBTableForm;
SetLength(DBTableForms, Length(DBTableForms) + 1);
DBTableForms[High(DBTableForms)] := DBTableForm;
end;
end;
for I := 0 to High(DBTableForms) do
DBTableForms[I].Close;
SetLength(DBTableForms, 0);
end;
procedure TDBInfoForm.ExportDBToText(FileName: string);
var
TableIdx, RecordIdx, FieldIdx: Integer;
Lines: TStrings;
TinyTable: TTinyTable;
begin
Lines := TStringList.Create;
TinyTable := TTinyTable.Create(nil);
MainForm.BeginProgress;
try
TinyTable.DatabaseName := FTinyDatabase.DatabaseName;
for TableIdx := 0 to FTinyDatabase.TableDefs.Count - 1 do
begin
TinyTable.Close;
TinyTable.TableName := FTinyDatabase.TableDefs[TableIdx].Name;
TinyTable.Open;
Lines.Add('Table Name: [' + TinyTable.TableName + ']');
for RecordIdx := 0 to TinyTable.RecordCount - 1 do
begin
for FieldIdx := 0 to TinyTable.FieldDefs.Count - 1 do
begin
Lines.Add('[' + TinyTable.Fields[FieldIdx].FieldName + ']:');
Lines.Add(TinyTable.Fields[FieldIdx].AsString);
end;
Lines.Add('');
TinyTable.Next;
MainForm.DoProgress(Trunc((RecordIdx+1)/TinyTable.RecordCount*100));
end;
Lines.Add('--------------------------------');
end;
Lines.SaveToFile(FileName);
finally
Lines.Free;
TinyTable.Close;
TinyTable.Free;
MainForm.EndProgress;
end;
end;
procedure TDBInfoForm.LocateNodeOfTableName(TableName: string);
var
I: Integer;
NodeData: TNodeData;
begin
for I := 0 to DBStructTreeView.Items.Count - 1 do
begin
if DBStructTreeView.Items[I].Data = nil then Continue;
NodeData := GetNodeData(DBStructTreeView.Items[I]);
if (NodeData.NodeType = ntTable) and (CompareText(NodeData.SelfName, TableName) = 0) then
begin
DBStructTreeView.Items[I].Selected := True;
DBStructTreeView.Items[I].MakeVisible;
FCurNode := DBStructTreeView.Items[I];
Break;
end;
end;
end;
procedure TDBInfoForm.DeleteIndex(TableName, IndexName: string);
var
R: Integer;
begin
R := Application.MessageBox(PChar(AppLangMgr.Trans('Are you sure to delete?')), PChar(Application.Title), 36);
if R = ID_YES then
begin
CloseFormOfTableName(TableName);
FTinyDatabase.DeleteIndex(TableName, IndexName);
FillDBStructToTreeView;
end;
end;
procedure TDBInfoForm.RenameTable(OldTableName, NewTableName: string);
begin
CloseFormOfTableName(OldTableName);
FTinyDatabase.RenameTable(OldTableName, NewTableName);
end;
procedure TDBInfoForm.RenameField(TableName, OldFieldName, NewFieldName: string);
begin
CloseFormOfTableName(TableName);
FTinyDatabase.RenameField(TableName, OldFieldName, NewFieldName);
end;
procedure TDBInfoForm.RenameIndex(TableName, OldIndexName, NewIndexName: string);
begin
CloseFormOfTableName(TableName);
FTinyDatabase.RenameIndex(TableName, OldIndexName, NewIndexName);
end;
procedure TDBInfoForm.DBStructTreeViewMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Node, TempNode: TTreeNode;
NodeData: TNodeData;
Pos: TPoint;
HitTest: THitTests;
Empty: Boolean;
begin
Pos := DBStructTreeView.ClientToScreen(Point(X, Y));
HitTest := DBStructTreeView.GetHitTestInfoAt(X, Y);
if (htOnIcon in HitTest) or (htOnLabel in HitTest)then
begin
TempNode := DBStructTreeView.GetNodeAt(X, Y);
if TempNode <> nil then TempNode.Selected := True;
end;
Node := DBStructTreeView.Selected;
if Node = nil then Exit;
if Node.Data = nil then Exit;
NodeData := GetNodeData(Node);
FCurNodeData := NodeData;
FCurNode := Node;
if Button = mbRight then
begin
Empty := DBStructTreeView.Items.Count = 0;
TableMenuOpenItem.Enabled := not Empty;
TableMenuDeleteItem.Enabled := not Empty;
TableMenuRenameItem.Enabled := not Empty;
TableMenuEmptyItem.Enabled := not Empty;
if Empty then TablePopupMenu.Popup(Pos.x, Pos.y);
case NodeData.NodeType of
ntTable:
TablePopupMenu.Popup(Pos.x, Pos.y);
ntField:
FieldPopupMenu.Popup(Pos.x, Pos.y);
ntIndex:
IndexPopupMenu.Popup(Pos.x, Pos.y);
end;
end;
end;
procedure TDBInfoForm.DBStructTreeViewDblClick(Sender: TObject);
var
Node: TTreeNode;
NodeData: TNodeData;
begin
Node := DBStructTreeView.Selected;
if Node = nil then Exit;
if Node.Data = nil then Exit;
NodeData := GetNodeData(Node);
case NodeData.NodeType of
ntField:
FieldMenuPropItemClick(nil);
ntIndex:
IndexMenuPropItemClick(nil);
end;
end;
procedure TDBInfoForm.TableMenuOpenItemClick(Sender: TObject);
begin
OpenTable(FCurNodeData.SelfName);
end;
procedure TDBInfoForm.TableMenuDeleteItemClick(Sender: TObject);
begin
DeleteTable(FCurNodeData.SelfName);
end;
procedure TDBInfoForm.TableMenuRenameItemClick(Sender: TObject);
begin
FCurNode.EditText;
end;
procedure TDBInfoForm.TableMenuRefreshItemClick(Sender: TObject);
begin
FillDBStructToTreeView;
end;
procedure TDBInfoForm.IndexMenuPropItemClick(Sender: TObject);
var
Value: TIndexPropFormData;
begin
Value.TableName := FCurNodeData.TableName;
Value.CurIndexName := FCurNodeData.SelfName;
ShowIndexPropForm(Value);
end;
procedure TDBInfoForm.FieldMenuPropItemClick(Sender: TObject);
var
Value: TFieldPropFormData;
begin
Value.TableName := FCurNodeData.TableName;
Value.CurFieldName := FCurNodeData.SelfName;
ShowFieldPropForm(Value);
end;
procedure TDBInfoForm.TableMenuNewItemClick(Sender: TObject);
begin
InvokeNewTableForm;
end;
procedure TDBInfoForm.TableMenuEmptyItemClick(Sender: TObject);
var
Value: TTableListFormData;
TableName: string;
begin
if FCurNodeData.SelfName = '' then
begin
Value.TinyDatabase := FTinyDatabase;
Value.TableName := '';
if ShowTableListForm(Value) then
TableName := Value.TableName
else
Exit;
end else
TableName := FCurNodeData.SelfName;
EmptyTable(TableName);
end;
procedure TDBInfoForm.TableMenuDesignItemClick(Sender: TObject);
begin
DesignTable(FCurNodeData.SelfName);
end;
procedure TDBInfoForm.IndexMenuDeleteItemClick(Sender: TObject);
begin
DeleteIndex(FCurNodeData.TableName, FCurNodeData.SelfName);
end;
procedure TDBInfoForm.IndexMenuRenameItemClick(Sender: TObject);
begin
FCurNode.EditText;
end;
procedure TDBInfoForm.FieldMenuRenameItemClick(Sender: TObject);
begin
FCurNode.EditText;
end;
procedure TDBInfoForm.DBStructTreeViewEditing(Sender: TObject;
Node: TTreeNode; var AllowEdit: Boolean);
begin
if Node.Data = nil then AllowEdit := False;
end;
procedure TDBInfoForm.DBStructTreeViewEdited(Sender: TObject;
Node: TTreeNode; var S: String);
var
NodeData: TNodeData;
TempNode: TTreeNode;
I: Integer;
begin
NodeData := GetNodeData(Node);
case NodeData.NodeType of
ntTable:
begin
RenameTable(NodeData.SelfName, S);
MainForm.InitTableComboxBox;
PNodeData(Node.Data)^.SelfName := S;
for I := 0 to DBStructTreeView.Items.Count - 1 do
begin
TempNode := DBStructTreeView.Items[I];
if TempNode.Data <> nil then
if CompareText(GetNodeData(TempNode).TableName, NodeData.TableName) = 0 then
PNodeData(TempNode.Data)^.TableName := S;
end;
end;
ntField:
begin
RenameField(NodeData.TableName, NodeData.SelfName, S);
PNodeData(Node.Data)^.SelfName := S;
end;
ntIndex:
begin
RenameIndex(NodeData.TableName, NodeData.SelfName, S);
PNodeData(Node.Data)^.SelfName := S;
end;
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -