热列祝贺:中国共产党第十七次全国代表大会胜利闭幕   颜色主题:   网页游戏 软件下载 软件文章 常用网址 自助友情
 首页程序设计数据库操作系统办公系列WEB开发项目专题网络安全图形图像站点地图友情链接
 您的位置: >首页 >程序设计 >VB >VB操作LotusNotes数据库
  文章搜索
按名称 按简介
  本类推荐
· 浅谈用VB6.0编写木马程序
· VB操作LotusNotes数据库
· 再谈VB程序的加密
· 用VB制作文件下载程序
· VB中让窗体始终处于最前面
· VB中使窗体右上角的X按钮失效
· VB编程的好帮手--资源文件
· VB学习一点通
· VB设计动画时钟
· 在Visual Basic 6.0 中创建Wor...
  本类排行
· VB操作LotusNotes数据库
· 浅谈用VB6.0编写木马程序
· 再谈VB程序的加密
· VB中让窗体始终处于最前面
· 用VB制作文件下载程序
· VB编程的好帮手--资源文件
· VB中使窗体右上角的X按钮失效
· VB学习一点通
· 用VB6.0编写磁盘格式化程序
· VB设计动画时钟
· VB实现图像在数据库的存储与显示
· VB实现文件数据对SQL Server上...
· 利用Visual Basic操作XML数据
· 利用VB动态设计多“主细表”应用
· 用VB6.0编写手机短信发送
· 用VB6.0取得系统信息技巧
· 在Visual Basic 6.0 中创建Wor...
VB操作LotusNotes数据库

今天,异构数据环境已经是一个普遍存在的问题,Windows常用开放数据库互连标准ODBC进行数据交换与操作,后来微软又推出了ADO技术,例如用VB操作Oracle、Sybase和SQL Server等,其应用也越来越普遍。 办公自动化软件中常用的数据库系统Lotus Notes,属于非关系数据库管理系统,具有以下特点: 1. 基于文档组织模式; 2. 使用非结构化的数据元素; 3. 通过定时复制刷新数据; 4. 使用视图定位数据; 5. 通过全文检索访问数据。 因为ADO或ODBC的方法是针对Oracle等关系数据库管理系统的,主要是通过SQL语言访问数据,Notes尽管也提供了Notes ODBC,但它并不支持全文检索,因此要在VB中实现对Lotus Notes数据库的存取,必须通过别的方法。 在Notes中使用COM和OLE OLE是Windows的一个特征,OLE通过把应用程序的功能作为对象暴露给其他应用程序,这些对象拥有属性(数据)和方法(函数),应用程序通过OLE中的对象去执行相应的任务。Domino既可以作为一个OLE提供给外部程序调用,也可以通过OLE去控制其他OLE对象。尽管OLE也有许多优点,但Domino的OLE服务不支持早期绑定,这意味着在VB等应用程序中对OLE编程进行类型检查、快速启动时,Domino OLE将强迫应用程序启动Notes的客户端,从而对系统产生巨大压力。此外,应用程序不能同时启动多个NotesSession,主要出于安全角度,Domino的OLE不允许应用程序直接输入用户名和密码,因此整个应用程序要么频繁地启动和关闭Domino OLE来打开NotesSession,要么大量使用全局变量,对程序设计极为不利。 在R5.03以后,Lotus提供了一个后台的COM类NotesSession。NotesSession是一个功能强大的对象模型,它提供了其他Notes对象的接口,即只有通过它才能访问Notes中的数据库对象NotesDatabase、NotesView等对象。 由于COM与OLE的兼容性,因此,用VB等程序操作Domino就变得相当容易,在VB中引用的方法非常简单,新建一个工程,在菜单“工程”下选择“引用”,则会出现下列对话框: 新建工程时加入对Domino库的引用 同时在Form上放一个FlexGrid控件,产生一个如图2所示的窗体。 在窗体事件Load 中键入下列代码: 窗口界面 Private Sub Form_Load() Dim Session As New Domino.NotesSession Dim PublicNotesDb As New Domino .NotesDatabase Dim View As NotesView Dim C As NOTESVIEWCOLUMN Dim Mycount As Integer Session.Initialize Set PublicNotesDb = session.GetDatabase(“教科文处/教科文”, “档案管理.nsf”) If PublicNotesDb Is Nothing Then MsgBox (“不能打开Notes库,请查看系统设置!”) End If Set View = PublicNotesDb.GetView(“Having AutoCode”) With grdDataGrid .Clear j = 0 .Rows = 2 .FixedCols = 1 .FixedRows = 1 .Col = 1 .FixedRows = .Row .Row = 0 .Cols = 2 j = 1 For Each C In View.Columns .AddItem (C.Title) x.Caption = C.Title .Col = j .Cols = .Col + 2 .Item(j).Visible = False .Text = C.Title If C.IsHidden = True Then .ColWidth(j) = 0 End If j = j + 1 Next .Cols = j + 3 .Col = j .Text = “处理情况” .Col = j + 1 .Text = “处理原因” .Col = j + 2 .Text = “处理责任人” .ColWidth(2) = 1800 .ColWidth(3) = 1800 Dim Doc As Object NOTESDOCUMENT Set Doc = View.GetFirstDocument .Row = 1 j = 1 Dim Str As String Do Until Doc Is Nothing .Col = 1 .Text= Doc.GetItemValue(“登记号”)(0) .Col = 2 Str = Doc.GetItemValue(“组卷号”)(0) .Text = Str .Col = 3 .Text= Doc.GetItemValue(“文件字号”)(0) .Col = 4 .Text= Doc.GetItemValue(“文件名”)(0) Set Doc=View.GetNextDocument(Doc) If Not Doc Is Nothing Then If j >= .Rows Then .Rows = j + 1 End If .Row = j; j = j + 1 End If Loop .MergeCells = flexMergeRestrictColumns 'MergeCells = 2 .MergeCol(0) = True .MergeCol(1) = True .MergeCol(2) = True .MergeCol(3) = True .Redraw = True End With End Sub 上面的代码中,调用initialize方法产生一个NotesSession 对象,它的方法有点类似VBA中调用Word的方法,如果采用 IsOpen可以判断是否已经打开对话框,函数GetDatabase()打开Notes数据库, 其中取得一个数据的函数用法有点特别: .Text = Doc.GetItemValue(“登记号”)(0) 使用两个连续的括号似乎Visual Basic不允许,其实Domino中允许多值域,所以函数GetItemValue()返回的实质上是一个数组,第一个元素从0开始。 按键盘F5开始运行,就可以看到输出结果。 VB操作Domino COM的优缺点 VB操作Domino COM具有以下优点: ● VB应用程序不需要调用Lotus Notes客户端就可以访问Notes的函数; ● 程序员可以在设计时使用早期绑定,其速度比晚绑定快,最主要的是可以利用VB6的智能语法提示功能; ● COM的运行速度比Lotus Script快; ● 可以独立于Lotus Notes客户端进行应用程序分发。 遗憾的是Domino的COM与VBA等相比,还有一些明显缺点: ● 目前Lotus只支持后台的Domino对象,即session,对于UIWorkSpace 并不支持(如果支持,就意味Lotus客户端可以被用户或第三方程序取代); ● 由于COM只被Windows所支持,目前Unix还不能使用本文所论述的方法; ● 由于安全原因,Louts目前不支持DCOM技术; ● Lotus 提供的COM并不支持“ref”内存指针,标准COM提供三种内存指针:“ref”、“unique”和“ptr”,其中“ref”开销最小。 结 论 采用COM作为VB与Domino的桥梁,既可以发挥Domino的强大的文档处理能力,又可以发挥VB友好的可视化功能。文中例子是笔者实际工作中使用过的,该设计采用R5.05和VB6开发工具,在Win98、NT和Win2000下均工作正常。
  相关软件
  相关文章
下载帮助 发布软件 自助友情 友情链接 网站导航 广告服务 法律声明 联系我们
六世下载 版权所有 ©2005-2007
本站的数据收集于网络,版权归原作者及出版社所有 如果您觉得侵犯了您的版权请来信告诉我们,我们会尽快删除其内容!
鲁ICP备05050400号