5.3.2 添加Word工具栏 (1)删除系统缺省添加的代码。 paper51.com 系统缺省添加的代码是针对VB插件的,而不是Word或其它应用程序插件的。因此删除它们。并在程序顶部添加以下代码: paper51.com OptionExplicit copyright paper51.com PrivatemAppWord As Word.Application ‘定义word对象变量 内容来自www.paper51.com PrivatemBar As Office.CommandBar ‘定义工具栏对象变量 copyright paper51.com ‘定义工具栏上按钮对象变量和事件响响应程序 内容来自www.paper51.com
PrivateWithEvents mBtn1 As Office.CommandBarButton 内容来自论文无忧网 www.paper51.com (2)添加AddinInstance对象的OnConnection方法。 内容来自www.paper51.com AddinInstance就代表了该插件本身。 内容来自论文无忧网 www.paper51.com 在其中添加代码,以便在Word中添加工具栏和按键,代码: 内容来自www.paper51.com
PrivateSub AddinInstance_OnConnection (ByVal Application As Object, ByVal ConnectModeAs AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As Object, custom ()As Variant) 内容来自www.paper51.com Set mAppWord = Application 内容来自论文无忧网 www.paper51.com Set mBar =mAppWord.CommandBars.Add("word manager", , , True) 内容来自www.paper51.com Set mBtn1 =mBar.Controls.Add(Office.MsoControlType.msoControlButton) http://www.paper51.com SetButtonStyle(mBtn1,203,"Button1","Testtoaddabuttoninword",msoButtonIconAndCaption) copyright paper51.com
End Sub http://www.paper51.com 按键对象定义为WithEvents,这样可以添加它的事件处理代码: http://www.paper51.com Private Sub mBtn1_Click (ByValCtrl as Office.CommandBarButton, CancelDefault as Boolean) 内容来自论文无忧网 www.paper51.com Dim doc As Word.Document '操作word对象 copyright paper51.com Form1.Show '取Word的当前活动文档,显示Form1窗体 copyright paper51.com End Sub 内容来自www.paper51.com 5.3.3 连接数据库 paper51.com
在VisualBasic6.0中,可使用三种数据访问接口,即ActiveX数据对象(ADO)、远程数据对象(RDO)和数据访问对象(DAO)。数据访问接口是一个对象模型,代表了访问数据的多种方法。ADO又称OLE自动化接口,采用了类似DAO和RDO的约定和特性,从而使其更易手于使用,它是由Microsoft推出的最新、功能最强,且容易使用的数据访问实例(OLE DB)的应用程序接口。OLE DB可以极高的性能访问数据源,其中包括关联和非关联数据库、电子邮件和文件系统、文本和图形、定制商业对象等。 paper51.com
其中ADO是最新的,它最简单也最灵活。因此,此系统使用ADO作为数据访问接口。 paper51.com 数据库控件使用:ADOData控件使用MicrosoftActiveX Data对象(ADO)快速创建数据绑定控件和数据提供者之间的连接。能够执行数据绑定的ActiveX控件包括DataGrid、DataCombo、Chart和DataList。 http://www.paper51.com DataCombo和DataList控件都有五种特殊的属性: 内容来自论文无忧网 www.paper51.com
1. DataSource:DataComno和DataList控件被绑定的ADODC控件的名称 内容来自论文无忧网 www.paper51.com 2. DataField:由DataSource属性所指定的记录集中的字段名称。 copyright paper51.com
3. RowSource:将要用于填充列表的ADODC的名称。 http://www.paper51.com
4. BoundColumn:由RowSource属性指定的记录集中的字段名称。该字段必须与用来更新列表的DataField的类型相同。 内容来自www.paper51.com 5. ListField:用来填充列表的由RowSource指定的记录集的字段名。 copyright paper51.com
由于ADO Data控件为ActiveX控件,因此,要使用它,必须首先加载ADODC控件到工具箱中。选择“工程”菜单中的“引用”,选上Microsoft ActiveX Data Objects 2.5 Library。此时在部件里选择Microsoft ADO Data Control 6.0(OLEDB)控件。在使用前请先设置控件的数据库关联属性: paper51.com 1. ConnectionString。连接字符串,可包含所有制作连接所需要的设置。在“通用”里“使用连接字符串”,点击“生成”,选择OLE DB提供程序里“Microsoft Jet 4.0 OLE DB Provider”,在连接里找到数据库文件(这里是.mdb文件),测试连接成功后,即可自动生成连接字符串。这种方法虽然方便且不易出错,但也有它的弊端。 内容来自论文无忧网 www.paper51.com 2. UserName。如果数据库是用口令保护的,此参数必不可少。类似Provider属性,它可通过ConnectionString设置。 copyright paper51.com 3. Password。访问保护数据库时需要此参数。它也可通过ConnectionString设置。 http://www.paper51.com 4. RecordSource。通常为一条语句,它决定了如何从数据库中检索数据。也可在“属性页”的“记录源”写入:select * from table1 order by sort_id(这里只对ADODC1)。 copyright paper51.com 5. CommandType。如果源为SQL语句、表名、存储过程或未知类型,它用于指定数据提供者。 copyright paper51.com 在Form1窗体代码顶部加入以下代码: 内容来自论文无忧网 www.paper51.com Dim cnn As NewADODB.Connection ‘定义对象引用 http://www.paper51.com
Dim cmd As New ADODB.Command paper51.com Dim rs As NewADODB.Recordset copyright paper51.com 此时可进行连接数据库,在Form1的Form_Load子过程添加以下代码: 内容来自www.paper51.com cnn.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & App. Path& "\db1.mdb;Persist Security Info=False" http://www.paper51.com cnn.open ‘打开连接,并定义对象变量 http://www.paper51.com Set cmd.ActiveConnection =cnn 内容来自论文无忧网 www.paper51.com
Set rs.ActiveConnection =cnn http://www.paper51.com
这里用到APP对象。App对象有两种重要属性:(1)App.Path,它在VB编程状态下返回.MAK文件所在目录;在以.EXE文件运行时,则返回你的.EXE文件所在目录。(2)App.EXE Name它返回程序名。这样,只要将.mdb文件放到工程的目录下,而无论工程放在什么位置,都能访问工程目录下的数据库文件。 paper51.com 5.4 功能模块设计和实现 内容来自www.paper51.com 软件分别用了三个能够执行数据绑定的ActiveX控件来表示和显示这三层:DataCombo显示所有目录,DataList用文件夹填充,文档部分由DataGrid显示。三个ActiveX控件分别绑定ADODC1,ADODC2,ADODC3,并在Form1里显示(visible为true,但所有ADODC都不显示): paper51.com
内容来自www.paper51.com 图10程序主界面 paper51.com 设置DataCombo属性绑定ADODC1:DataSource选择ADODC1,RowSource选择ADODC1,BoundColumn选择sort_id,DataField选择sort,ListField选择sort,Visable设为True。设置DataList属性:DataSource选择ADODC2,RowSource选择ADODC2,BoundColumn选择fold_id,DataField选择fold,ListField选择fold,Visable设为True。设置DataGrid属性:DataSource选择ADODC3。 paper51.com 在DataCombo的Click事件里添加以下代码: 内容来自论文无忧网 www.paper51.com '读取所有的fold,当ref_table1_id为当前输出值 内容来自www.paper51.com strQuery = "select *from table2 where ref_table1_id =" + DataCombo1.BoundText http://www.paper51.com With Adodc2 '设置Adodc2的数据源,并刷新显示 http://www.paper51.com .RecordSource = strQuery 内容来自www.paper51.com .Refresh paper51.com End With http://www.paper51.com 实现的功能:当选定DataCombo某个值(目录)时,将这个值对应的fold查询出来,并把它们刷新显示到DataList里。 copyright paper51.com 同理在DataList的Click事件里添加以下代码: http://www.paper51.com
Dim strquery1 As String '声明变量,保存SQL语句 http://www.paper51.com
'读取所有filename,filepath,当ref_table2_id为当前输出值 http://www.paper51.com
strquery1 = "selectfilename,filepath from table3 where ref_table2_id=" + DataList1.BoundText 内容来自www.paper51.com With Adodc3 '设置Adodc3的数据源,并刷新显示 内容来自www.paper51.com .RecordSource = strquery1 内容来自www.paper51.com
.Refresh 内容来自论文无忧网 www.paper51.com End With '当返回至Datalist控件的数据为空时,提示用户新建记录 paper51.com Else: MsgBox "无记录,请单击'新建'开始" copyright paper51.com
End If http://www.paper51.com With DataGrid1 内容来自www.paper51.com .ClearFields copyright paper51.com
.Rebind 内容来自www.paper51.com
实现功能:用户选择DataList某个值时,将这个值对应的filename、filepath查询出来,并把它们刷新显示到DataGrid里。至此已完成自动刷新功能。 内容来自www.paper51.com 在Form1里添加六个Button分别是:新建、打开、编辑、删除、添加于和退出,用它们对应不同的功能实现Word文档的管理。其中除了打开和退出按钮外,另外的按钮都连接到新的窗体。 copyright paper51.com 5.4.1 新建功能 内容来自www.paper51.com 图11 新建功能界面 内容来自www.paper51.com 新建功能在Form2界面上操作。 内容来自论文无忧网 www.paper51.com 在Form_Load事件里添加以下代码: 内容来自论文无忧网 www.paper51.com
cnn2.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"\db1.mdb;Persist Security Info=False" 内容来自www.paper51.com Adodc4.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"\db1.mdb;Persist Security Info=False" http://www.paper51.com Adodc4.RecordSource ="select * from table1 order by sort_id" paper51.com Adodc4.Refresh copyright paper51.com cnn2.open '打开连接 内容来自论文无忧网 www.paper51.com Set rs2.ActiveConnection =cnn2 内容来自论文无忧网 www.paper51.com Set cmd2.ActiveConnection =cnn2 http://www.paper51.com
连接数据库,并打开连接,定义对象变量。由于可对目录和文件夹新建,窗体上设置了两个Option控件,分别表示新建目录和文件夹。对于目录,直接新建即可;但对新建文件夹,还要提供文件夹隶属的目录,因此设置了一个DataCombo来显示所有目录,供用户选择。这个DataCombo只有当用户选择新建文件夹(Option2有效)时才是可见的,否则不可见。在Form2窗体的“确定”按钮里添加以下代码: 内容来自www.paper51.com If Option1.Value = TrueThen '当选定新建sort时 内容来自www.paper51.com If Text1.Text = ""Then '如果名称为空,提示输入 内容来自www.paper51.com MsgBox "请输入目录名称" copyright paper51.com End If '执行插入sort表语句 内容来自www.paper51.com cmd2.CommandText = "insertinto table1 (sort) values (" + "'" + Text1.Text + "'"+ ") " copyright paper51.com cmd2.Execute paper51.com ElseIf Option2.Value = True Then '当选定新建fold时 http://www.paper51.com If Text1.Text = ""Then '如果属于为空提示输入 内容来自www.paper51.com MsgBox "请输入目录名称" copyright paper51.com End If '执行插入fold表语句 内容来自www.paper51.com For i = 0 To Form1.DataList1.VisibleCount- 1 '判断重复输入,提示信息 copyright paper51.com
If Form1.DataList1.VisibleItems(i) = Text1.Text Then paper51.com MsgBox "重名,请再次输入" paper51.com ExitSub http://www.paper51.com EndIf 内容来自论文无忧网 www.paper51.com Next i 内容来自www.paper51.com
cmd2.CommandText ="insert into table2 (ref_table1_id,fold) values (" + "'" +DataCombo2.BoundText + "'" + "," + "'" +Text1.Text + "'" + ")" 内容来自论文无忧网 www.paper51.com cmd2.Execute paper51.com End If http://www.paper51.com
Call Form1.Datarefresh '刷新数据显示 内容来自www.paper51.com cnn2.Close '关闭数据库连接2 http://www.paper51.com Unload Me 内容来自论文无忧网 www.paper51.com 通过cmd对象完成对记录(目录和文件夹)的新建。 copyright paper51.com |