收藏 分销(赏)

Lotus-Domino与关系数据库的互操作.doc

上传人:仙人****88 文档编号:12024576 上传时间:2025-08-29 格式:DOC 页数:4 大小:29.50KB 下载积分:10 金币
下载 相关 举报
Lotus-Domino与关系数据库的互操作.doc_第1页
第1页 / 共4页
Lotus-Domino与关系数据库的互操作.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
一、Lotus Domino与关系数据库的互操作   在Lotus Domino R5中提供了三个LotusNotes扩展类:ODBCConnection(ODBC连接)、ODBCQuery(ODBC查询)以及ODBCResultSet(ODBC结果集)。应用这三个类并辅以Lotus Script语言就能实现与关系数据库的互操作问题。   具体解决方法如下:   第1步:在控制面板→32位ODBC数据源中建立用户数据源Test;   第2步:在Domino R5中新建一个数据库Try,并建立一个空白表单Con-nection,此表单没有任何内容,然后在表单上创建一个“操作”,起名为“Read”;   第3步:在“Read”操作的编程窗口中选择编程语言为Lotus Script;   第4步:在编程窗口的对象窗口中点击“Option”事件,并写入如下脚本:   Uselsx "lsxodbc" // 使用Lotus Script 扩展ODBC类   第5步:选中“Declare”事件,在其中写入:   Dim session As NotesSession   Dim db As NotesDataBase   Dim doc As NotesDocument   Dim qry As ODBCQuery   Dim result As ODBCResultSet   Dim con As ODBCConnection   第6步:选中“Click”事件,在其中写入:   Sub Click(Source As Button)   ′ Set New Value   Set session=New NotesSession   Set con=New ODBCConnection   Set qry=New ODBCQuery   Set result=New ODBCResultSet   ′ Get Current Database   Set db=session.CurrentDataBase   Set doc=New NotesDocument(db)   doc.form="connection"   Call con.Disconnect()   If con.ConnectTo("test") Then   Set qry.connection=con   qry.SQL="SELECT ?? FROM Table1"   Set result.Query=qry   Call result.Execute()   columns=result.Columns   Do   Call result.NextRow()   For i=1 To result.Numcolumns   field=result.FieldName(i)   value=result.GetValue(field)   If Isdate(value) Then   If value=Datevalue("0:00:00") Then   value=" "   Else   value=Format(value,"mm-dd-yyyy")   End If   End If   Set item=doc.AppendItemValue(field,val-ue)   Next   Call doc.save(True,True)   Set db=session.CurrentDataBase   Set doc=New NotesDocument(db)   doc.form="test"   Loop Until result.IsEndOfData   Call con.Disconnect()   Else   Messagebox("Could not connect to server")   End If   End Sub   最后,保存表单并运行,用鼠标点击Read操作后,关系数据库中的内容就被取到Notes的文档型数据库中了。   二、程序存在的问题及解决   但是使用上面的代码在进行实际数据库内容转换的时候,我们发现Notes 通过ODBC数据源连接关系数据库时,无法识别中文字段名。如果关系数据库的字段是中文名字,那么ODBCResultSet将为空,解决的办法是将关系数据库中的所有字段都改为英文名字。   在实际数据库的转换过程中同时发现的问题还有:该程序执行完一次后不能把关系型数据库中的内容全部取出来。通过调试LotusScript脚本并多次单步跟踪脚本的执行情况,发现每次都是执行到同一条数据库记录时,ODBCRe-sultSet就认为数据集已经到头了,下面的记录就都丢了。于是使用关系数据库软件打开数据库,并将其中的字段减少若干条后,就可以一次读取出全部记录。至于需要减少多少个字段才能一次读取出全部记录跟原先的关系型数据库的结构有关,需要具体情况具体实验。   三、Lotus Domino中的日期处理   上面程序中有如下一段程序:   If Isdate(value) Then   If value=Datevalue("0:00:00") Then   value=" "   Else   value=Format(value,"mm-dd-yyyy")   End If   Set item=doc.AppendItemValue(field,value)   End if   这一段代码的作用是:判断从关系库中读取出来的字段是否为日期型字段,如果是,那么判断此日期型字段的值,看它是否为空,如果为空则在写入Notes库的时候做处理,保证写入的是空日期类型,如果此字段的值不为空则直接写入Notes库;如果此字段不是日期型字段,则不做任何处理。   若是不做上述处理,那么通过ODBCResultSet类取出的日期型字段的值如果为空,则写入Notes库的时候不知什么原因会写入“1899年12月30日”这个日期。   在代码中,使用到了一个DateValue(string)函数,此函数的功能是将字符串参数转换成日期数据类型,如果字符串所表示的内容找不到合法的日期数据与之对应,那么此函数将保留字符串的值不变,而仅仅把其数据类型转换成日期型,即实现了强制类型转换函数的功能。而代码中的“0:00:00”字符串是个特殊字符串,在通过ODBC数据源读取关系数据库的记录时,如果关系库中的日期型字段值为空,那么取出的值就是“0:00:00”形式的日期。使用DateValue(“0:00:00”)语句就可以判断取出的日期型变量的值是否为空,如果为空则将变量Value的值赋成空字符串,然后再写入Notes库中,就可避免出现“1899年12月30日”这个日子了。   四、NotesItem   NotesItem是可以代表所有表单元素的对象,简单地说就是所有可放置在表单上的元素,在LotusScript程序中都可以用NotesItem对象表示并对其进行操作。上面代码中的doc.AppendItemValue(fieldname,value)函数的作用就是根据Value的值为表单追加域(也就是关系库中的字段)。   其实细心的读者一定已经发现了,在上面关于空日期的处理代码中,为什么要先把Value的值赋成空,然后再写入库中呢?为什么不可以直接往库里写值呢?问题的关键就在NotesItem上。   NotesItem有很多属性,其中最重要的两个是Name和Text属性。Name属性存放表单元素的名称(即fieldname),而Text属性存放表单元素的值(value)。在程序执行到doc.AppendItemValue(fieldname,value)函数的时候,Notes将域名(fieldname)和相对应的值(value)写到NotesItem对象中。执行Call doc.Save()函数之后,所有内存中的NotesItem对象被存入相关联的表单中。   在研究如何处理空日期的过程中,最初的想法是直接将空字符串写入NotesItem中,但是在查看帮助并单步跟踪脚本的执行后发现上述方法行不通。原因在于NotesItem的Text属性是只读的,根本无法为其赋值,同时也没有相应的赋值函数,显然函数doc.AppendItemValue(fieldname,value)是专门给Text属性赋值的函数。   五、Notes中视图与表单的关联   在开发过程中,由于一次错误,我们意外地发现了Notes中视图与表单的关联技巧。Notes为每个表单都设置了名称与别名两个属性,这两个名字都能标识表单。在开发过程中,我们所开发的库有两个表单,分别命名为Form1和Form2,其各自的别名由于疏忽都设成了Docu-ment,而每个表单都有一个视图与之对应。在设计Form2的视图时,虽然指定视图中的列都与Form2中的域相关联,但是在运行的时候从视图中双击某条文档欲对其进行编辑时,切换到的表单却是Form1的,多方查找均不能解决这个问题,于是抱着试试看的心理改变了表单的别名,分别为Document1和Docu-ment2,结果问题解决。但是又出现了Form1的视图无法切换到表单的情况,于是又将Form1的别名改回Document,两个视图均能正确切换到自己的表单上了。   由此发现,Notes在建立视图与表单的关联的时候,首先看表单是否具有别名,如果有,则用别名进行关联,一旦对表单的别名进行了改变就得重新设计视图,如果不想重新做视图就不能改变表单的别名。当然同时也可以应用这一技巧实现从视图中切换到不同表单的功能。如果表单没有别名,则使用名称进行关联。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服