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

📄 main.pas

📁 从文档管理升华到知识管理文档是知识的容器
💻 PAS
📖 第 1 页 / 共 3 页
字号:
unit main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, ComCtrls, ToolWin, OleCtnrs, ImgList, StdCtrls,
  Buttons, Menus, DB, ADODB,Filectrl;

type
  TWdForm = class(TForm)
    Panel1: TPanel;
    Panel2: TPanel;
    Splitter1: TSplitter;
    Panel3: TPanel;
    TreeView1: TTreeView;
    ToolBar1: TToolBar;
    ImageList1: TImageList;
    ToolButton1: TToolButton;
    ToolButton3: TToolButton;
    ToolButton4: TToolButton;
    Panel4: TPanel;
    Edit1: TEdit;
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    Panel5: TPanel;
    OleContainer1: TOleContainer;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    ADOQuery2: TADOQuery;
    MainMenu1: TMainMenu;
    aaaa1: TMenuItem;
    S1: TMenuItem;
    X1: TMenuItem;
    N5: TMenuItem;
    A1: TMenuItem;
    N6: TMenuItem;
    D1: TMenuItem;
    N7: TMenuItem;
    M1: TMenuItem;
    U1: TMenuItem;
    D2: TMenuItem;
    I2: TMenuItem;
    O2: TMenuItem;
    H1: TMenuItem;
    N12: TMenuItem;
    N4: TMenuItem;
    N8: TMenuItem;
    N9: TMenuItem;
    N10: TMenuItem;
    StatusBar1: TStatusBar;
    N11: TMenuItem;
    N13: TMenuItem;
    ToolButton2: TToolButton;
    F1: TMenuItem;
    N14: TMenuItem;
    ToolButton5: TToolButton;
    procedure ToolButton1Click(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure ToolButton3Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    Procedure GetNode;
    procedure N3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure N1Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N12Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
    procedure N10Click(Sender: TObject);
    procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
    procedure U1Click(Sender: TObject);
    procedure D2Click(Sender: TObject);
    procedure I2Click(Sender: TObject);
    procedure O2Click(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure TreeView1Edited(Sender: TObject; Node: TTreeNode;
      var S: String);
    procedure TreeView1GetSelectedIndex(Sender: TObject; Node: TTreeNode);
    procedure N13Click(Sender: TObject);
    procedure N14Click(Sender: TObject);
    procedure ToolButton2Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);


  private
    { Private declarations }
     TmpNode,rootNode,Nodel:TTreeNode;
     nodename:string;
     idh:integer;
     yn:boolean;
  public
    { Public declarations }
  end;

var
  WdForm: TWdForm;

implementation
 uses about,dict,pass;
{$R *.dfm}
type
  PMyData=^TMyData;
  TMyData=Record
    nIndex:integer;
  end;

procedure TWdForm.ToolButton1Click(Sender: TObject);
begin
 application.Terminate;
end;

function getbh(s:string): string;
var
 i,j:integer;
begin
 i:=StrToint(s);
 i:=i+1;
 j:=length(s);
 Result:=stringofchar('0',j-length(IntToStr(i)))+IntToStr(i);

end;
procedure TWdForm.BitBtn1Click(Sender: TObject);
begin
 if OpenDialog1.Execute then
  begin
    edit1.Text:=OpenDialog1.FileName;
    yn:=false;
    nodeName:=ExtractFileName(OpenDialog1.FileName);
    TreeView1.Selected.Text:=nodeName;
    yn:=true;
  end;
end;

procedure TWdForm.FormShow(Sender: TObject);
begin
   OpenDialog1.Title:='选择文件';
   OpenDialog1.Filter:='Office 文档|*.doc;*.pps;*.xls|所有文档|*.*';
   OpenDialog1.FilterIndex:=0;
   yn:=true;
   ToolButton2.Enabled:=false;
   ToolButton5.Enabled:=false;
end;

procedure TWdForm.N2Click(Sender: TObject);
var shuju:PMyData;
     i:integer;
     sid,ss,st:string;
begin
 if treeview1.Selected=nil then exit;
  if treeview1.Items.Count=0 then  exit;
     with ADOQuery1 do
      begin
        close;
        sql.Clear;
        sql.Add('select path1 from table2 where xh=:xh');
        idh:=integer(pmydata(treeview1.Selected.data^));
        Parameters.ParamByName('xh').Value:=inttostr(idh);
        open;
        ss:=Fields[0].AsString;
        if ss<>'' then
        begin
         showmessage('当前节点已是最后节点,不能增加子节点,如要增加请删除保存的文件路径!');
         exit;
        end;
        yn:=false;
        close;
        sql.Clear;
        sql.Add('select id from table2 where xh=:xh');
        idh:=integer(pmydata(treeview1.Selected.data^));
        Parameters.ParamByName('xh').Value:=inttostr(idh);
        open;           //得到当前结点id号,就是录入数据的父结点
        ss:=Fields[0].AsString;
        Close;
        sql.Clear;
        sql.Add('select id from table2 where parentId='+''''+ss+''''+'  order by id');
        open;
        Last;
        sid:=Fields[0].Asstring;
        if sid<>'' then   //有子结点
        begin
          i:=strToInt(Fields[0].AsString);
          i:=i+1;
          //st:=Fields[0].AsString;
          st:='000'+IntToStr(i); //重到录入数据的id号
        end
        else
        begin   //没有子结点
          st:=ss+'0001';
        end;
        close;
        sql.Clear;
        sql.Add('insert into table2(id,name,parentId) values('+''''+st+''''+','+''''
          +'新的文档'+''''+','+''''+ss+''''+')');
        try
         begin
          ADOConnection1.BeginTrans;
          ExecSQL;
          ADOConnection1.CommitTrans;
        end;
        except
        begin
         ADOConnection1.RollbackTrans;
         MessageDlg('操作执行失败,请检查后重新执行',mtError,[mbok],0);
         exit;
        end;
        end;
        close;
        SQL.Clear;
        SQL.Add('select xh from table2 where id='+''''+st+'''');
        open;
        new(shuju);     //把录入数据的序号赋值给对就的treeview结点的data
        shuju^.nIndex:=Fields[0].AsInteger;
       nodel:=TreeView1.Items.AddChild(TreeView1.Selected,'新的文档');
       Treeview1.Selected:=nodel;
       nodel.Data:=shuju;
       yn:=true;
    end;   
end;

procedure TWdForm.ToolButton3Click(Sender: TObject);
var
 ss:string;
begin
  nodel:=TreeView1.Selected;
  if  nodel.Data<>nil then
   begin
    ss:=edit1.Text;
    ADOQuery2.Close; //treeview 内容发生改变后,通过DATA属性对数据库中对应记录进行相应的改变
    adoquery2.SQL.Clear;
    adoquery2.SQL.add('update table2 set path1='+''''+ss+''''+','+'name='+''''+nodel.Text+''''+' where xh=:xh') ;
    idh:=integer(pmydata(nodel.data^));
    ADOQuery2.Parameters.ParamByName('xh').Value:=inttostr(idh);
    try
     begin
      ADOConnection1.BeginTrans;
      ADOQuery2.ExecSQL;
      ADOConnection1.CommitTrans;
    end;
    except
    begin
     ADOConnection1.RollbackTrans;
     MessageDlg('操作执行失败,请检查后重新执行',mtError,[mbok],0);
     exit;
    end;
    end;
    ADOQuery2.Close;
   end;
end;

procedure TWdForm.FormCreate(Sender: TObject);
begin
  ADOConnection1.Connected:=true;
  GetNode ;      
end;

procedure TWdForm.GetNode;//从数据库中取数据动态生成树形结构
var
 parent:string; //父级代码
 qi,hi,i,tmpi:integer;
 myshuju: PMyData;
begin
  TreeView1.Items.Clear;
//  ADOConnection1.Connected:=True;
  adoquery1.Close;
  ADOQuery1.SQL.Clear;
  adoquery1.SQL.Add('select id,name,parentid,xh from table2 order by id');
  ADOQuery1.open;  //所有记录列表
  ADOQuery1.First;
  while not adoquery1.Eof do
  begin
    parent:=ADOQuery1.Fields[2].AsString;
    if parent='' then
    begin
      new(myshuju);
      myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
      rootNode:=TreeView1.Items.Add(nil,ADOQuery1.Fields[1].asstring);
      rootNode.ImageIndex:=0;
      rootNode.SelectedIndex:=0;
      Nodel:=rootNode;
      Nodel.Data:=myshuju;         //创建根内容
      //i:=integer(pmydata(Nodel.Data^));
     // showmessage(inttostr(i));
      qi:=length(ADOQuery1.Fields[0].asstring);//得到当前记录ID的长度
      ADOQuery1.Next;
    end
    else
    begin
      hi:=length(ADOQuery1.Fields[0].asstring);//得到下一条记录ID的长度
      if hi>qi then //下一条记录长度大于前一条记录,则为下级记录
       begin
         new(myshuju);
         myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
         TmpNode:=TreeView1.Items.AddChild(nodel,ADOQuery1.Fields[1].asstring);
         qi:=hi;//length(ADOQuery1.Fields[0].asstring);
         //TreeView1.Selected:=TmpNode; 如果
         nodel:=tmpNode;
         nodel.Data:=myshuju;
         ADOQuery1.next;
       end
      else
        if hi=qi then  //记录ID长度相等,则为同级记录
          begin
           new(myshuju);
           myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
           TmpNode:=TreeView1.Items.AddChild(nodel.Parent,ADOQuery1.Fields[1].asstring);
           //TreeView1.Selected:=TmpNode;
           qi:=hi;
           nodel:=TmpNode;
           nodel.Data:=myshuju;
           ADOQuery1.next;
          end
        else
          begin      //为上级记录
            //leveli:=Nodel.Level+1; //当前记录的层次
            tmpi:=round((qi-hi)/4);//两条记录相差层数
            for i:=0 to tmpi do
            begin
              nodel:=nodel.Parent;//得到当前记录的上一个层次
            end;
              new(myshuju);
              myshuju^.nIndex:=ADOQuery1.Fields[3].AsInteger;
              TmpNode:=TreeView1.Items.AddChild(nodel,ADOQuery1.Fields[1].asstring);
              qi:=hi;
               //TreeView1.Selected:=TmpNode;
               nodel:=TmpNode;
               nodel.Data:=myshuju;
               ADOQuery1.next;
          end;
    end;
  end;
  {adoquery1.Close;
  ADOQuery1.SQL.Clear;
  adoquery1.SQL.Add('select id,name from table2 where parentid='' order by id');
  ADOQuery1.open;  //得到根内容
  ADOQuery1.First;
  while not ADOQuery1.Eof do
  begin
    rootNode:=TreeView1.Items.Add(nil,ADOQuery1.Fields[1].asstring);
    rootNode.ImageIndex:=0;

⌨️ 快捷键说明

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