ODBC实现Domino和关系数据库的互操作.doc_第1页
ODBC实现Domino和关系数据库的互操作.doc_第2页
ODBC实现Domino和关系数据库的互操作.doc_第3页
ODBC实现Domino和关系数据库的互操作.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ODBC实现Domino和关系数据库的互操作 一、Lotus Domino与关系数据库的互操作在Lotus Domino R5中提供了三个Lotus Notes扩展类: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 砽sxodbc / 使用Lotus Script 扩展ODBC类第5步:选中“Declare”事件,在其中写入:Dim session As NotesSessionDim db As NotesDataBaseDim doc As NotesDocumentDim qry As ODBCQueryDim result As ODBCResultSetDim con As ODBCConnection第6步:选中“Click”事件,在其中写入:Sub Click(Source As Button) Set New ValueSet session=New NotesSessionSet con=New ODBCConnectionSet qry=New ODBCQuerySet result=New ODBCResultSet Get Current DatabaseSet db=session.CurrentDataBaseSet doc=New NotesDocument(db)doc.form=connectionCall con.Disconnect()If con.ConnectTo(test) ThenSet qry.connection=conqry.SQL=SELECT FROM Table1Set result.Query=qryCall result.Execute()columns=result.ColumnsDoCall result.NextRow()For i=1 To result.Numcolumnsfield=result.FieldName(i)value=result.GetValue(field)If Isdate(value) ThenIf value=Datevalue(0:00:00) Thenvalue= Elsevalue=Format(value,mm-dd-yyyy)End IfEnd IfSet item=doc.AppendItemValue(field,val-ue)NextCall doc.save(True,True)Set db=session.CurrentDataBaseSet doc=New NotesDocument(db)doc.form=testLoop Until result.IsEndOfDataCall con.Disconnect()ElseMessagebox(Could not connect to server)End IfEnd Sub最后,保存表单并运行,用鼠标点击Read操作后,关系数据库中的内容就被取到Notes的文档型数据库中了。二、程序存在的问题及解决但是使用上面的代码在进行实际数据库内容转换的时候,我们发现Notes 通过ODBC数据源连接关系数据库时,无法识别中文字段名。如果关系数据库的字段是中文名字,那么ODBCResultSet将为空,解决的办法是将关系数据库中的所有字段都改为英文名字。在实际数据库的转换过程中同时发现的问题还有:该程序执行完一次后不能把关系型数据库中的内容全部取出来。通过调试Lotus Script脚本并多次单步跟踪脚本的执行情况,发现每次都是执行到同一条数据库记录时,ODBCRe-sultSet就认为数据集已经到头了,下面的记 录就都丢了。于是使用关系数据库软件打开数据库,并将其中的字段减少若干条后,就可以一次读取出全部记录。至于需要减少多少个字段才能一次读取出全部记录 跟原先的关系型数据库的结构有关,需要具体情况具体实验。三、Lotus Domino中的日期处理上面程序中有如下一段程序:If Isdate(value) ThenIf value=Datevalue(0:00:00) Thenvalue= Elsevalue=Format(value,mm-dd-yyyy)End IfSet 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日”这个日子了。四、NotesItemNotesItem是可以代表所有表单元素的对象,简单地说就是所有可放置在表单上的元素,在Lotus Script程序中都可以用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的视图无法切换到表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论