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

📄 dbinfofrm.pas

📁 delphi本地数据库引擎
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  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 + -