利用ODBC实现Domino和关系的互操作
2008-04-27 23:52
363 查看
利用ODBC实现Domino和关系数据库的互操作
LotusDomino是当今办公自动化系统的主流开发平台之一,Domino自带一个非关系型数据库——文档型数据库,而目前大部分企业的信息都储存在诸如等关系型数据库中,因此,在开发办公自动化系统过程中势必要涉及Domino和关系数据库的数据交换问题。
一、LotusDomino与关系数据库的互操作
在LotusDominoR5中提供了三个LotusNotes扩展类:ODBCConnection(ODBC连接)、ODBCQuery(ODBC查询)以及ODBCResultSet(ODBC结果集)。应用这三个类并辅以LotusScript语言就能实现与关系数据库的互操作问题。
具体解决方法如下:
第1步:在控制面板→32位ODBC数据源中建立用户数据源Test;
第2步:在DominoR5中新建一个数据库Try,并建立一个空白表单Con-nection,此表单没有任何内容,然后在表单上创建一个“操作”,起名为“Read”;
第3步:在“Read”操作的窗口中选择编程语言为LotusScript;
第4步:在编程窗口的对象窗口中点击“Option”事件,并写入如下脚本:
Uselsx"lsxODBC"//使用LotusScript扩展ODBC类
第5步:选中“Declare”事件,在其中写入:
DimsessionAsNotesSession
DimdbAsNotesDataBase
DimdocAsNotesDocument
DimqryAsODBCQuery
DimresultAsODBCResultSet
DimconAsODBCConnection
第6步:选中“Click”事件,在其中写入:
SubClick(SourceAsButton)
′SetNewValue
Setsession=NewNotesSession
Setcon=NewODBCConnection
Setqry=NewODBCQuery
Setresult=NewODBCResultSet
′GetCurrentDatabase
Setdb=session.CurrentDataBase
Setdoc=NewNotesDocument(db)
doc.form="connection"
Callcon.Disconnect()
Ifcon.ConnectTo("test")Then
Setqry.connection=con
qry.SQL="SELECTFROMTable1"
Setresult.Query=qry
Callresult.Execute()
columns=result.Columns
Do
Callresult.NextRow()
Fori=1Toresult.Numcolumns
field=result.FieldName(i)
value=result.GetValue(field)
IfIsdate(value)Then
Ifvalue=Datevalue("0:00:00")Then
value=""
Else
value=Format(value,"mm-dd-yyyy")
EndIf
EndIf
Setitem=doc.AppendItemValue(field,val-ue)
Next
Calldoc.save(True,True)
Setdb=session.CurrentDataBase
Setdoc=NewNotesDocument(db)
doc.form="test"
LoopUntilresult.IsEndOfData
Callcon.Disconnect()
Else
Messagebox("Couldnotconnecttoserver")
EndIf
EndSub
最后,保存表单并运行,用鼠标点击Read操作后,关系数据库中的内容就被取到Notes的文档型数据库中了。
二、程序存在的问题及解决
但是使用上面的代码在进行实际数据库内容转换的时候,我们发现Notes通过ODBC数据源连接关系数据库时,无法识别中文字段名。如果关系数据库的字段是中文名字,那么ODBCResultSet将为空,解决的办法是将关系数据库中的所有字段都改为英文名字。
在实际数据库的转换过程中同时发现的问题还有:该程序执行完一次后不能把关系型数据库中的内容全部取出来。通过调试LotusScript脚本并多次单步跟踪脚本的执行情况,发现每次都是执行到同一条数据库记录时,ODBCRe-sultSet就认为数据集已经到头了,下面的记录就都丢了。于是使用关系数据库打开数据库,并将其中的字段减少若干条后,就可以一次读取出全部记录。至于需要减少多少个字段才能一次读取出全部记录跟原先的关系型数据库的结构有关,需要具体情况具体实验。共3页 第1页
LotusDomino是当今办公自动化系统的主流开发平台之一,Domino自带一个非关系型数据库——文档型数据库,而目前大部分企业的信息都储存在诸如等关系型数据库中,因此,在开发办公自动化系统过程中势必要涉及Domino和关系数据库的数据交换问题。
一、LotusDomino与关系数据库的互操作
在LotusDominoR5中提供了三个LotusNotes扩展类:ODBCConnection(ODBC连接)、ODBCQuery(ODBC查询)以及ODBCResultSet(ODBC结果集)。应用这三个类并辅以LotusScript语言就能实现与关系数据库的互操作问题。
具体解决方法如下:
第1步:在控制面板→32位ODBC数据源中建立用户数据源Test;
第2步:在DominoR5中新建一个数据库Try,并建立一个空白表单Con-nection,此表单没有任何内容,然后在表单上创建一个“操作”,起名为“Read”;
第3步:在“Read”操作的窗口中选择编程语言为LotusScript;
第4步:在编程窗口的对象窗口中点击“Option”事件,并写入如下脚本:
Uselsx"lsxODBC"//使用LotusScript扩展ODBC类
第5步:选中“Declare”事件,在其中写入:
DimsessionAsNotesSession
DimdbAsNotesDataBase
DimdocAsNotesDocument
DimqryAsODBCQuery
DimresultAsODBCResultSet
DimconAsODBCConnection
第6步:选中“Click”事件,在其中写入:
SubClick(SourceAsButton)
′SetNewValue
Setsession=NewNotesSession
Setcon=NewODBCConnection
Setqry=NewODBCQuery
Setresult=NewODBCResultSet
′GetCurrentDatabase
Setdb=session.CurrentDataBase
Setdoc=NewNotesDocument(db)
doc.form="connection"
Callcon.Disconnect()
Ifcon.ConnectTo("test")Then
Setqry.connection=con
qry.SQL="SELECTFROMTable1"
Setresult.Query=qry
Callresult.Execute()
columns=result.Columns
Do
Callresult.NextRow()
Fori=1Toresult.Numcolumns
field=result.FieldName(i)
value=result.GetValue(field)
IfIsdate(value)Then
Ifvalue=Datevalue("0:00:00")Then
value=""
Else
value=Format(value,"mm-dd-yyyy")
EndIf
EndIf
Setitem=doc.AppendItemValue(field,val-ue)
Next
Calldoc.save(True,True)
Setdb=session.CurrentDataBase
Setdoc=NewNotesDocument(db)
doc.form="test"
LoopUntilresult.IsEndOfData
Callcon.Disconnect()
Else
Messagebox("Couldnotconnecttoserver")
EndIf
EndSub
最后,保存表单并运行,用鼠标点击Read操作后,关系数据库中的内容就被取到Notes的文档型数据库中了。
二、程序存在的问题及解决
但是使用上面的代码在进行实际数据库内容转换的时候,我们发现Notes通过ODBC数据源连接关系数据库时,无法识别中文字段名。如果关系数据库的字段是中文名字,那么ODBCResultSet将为空,解决的办法是将关系数据库中的所有字段都改为英文名字。
在实际数据库的转换过程中同时发现的问题还有:该程序执行完一次后不能把关系型数据库中的内容全部取出来。通过调试LotusScript脚本并多次单步跟踪脚本的执行情况,发现每次都是执行到同一条数据库记录时,ODBCRe-sultSet就认为数据集已经到头了,下面的记录就都丢了。于是使用关系数据库打开数据库,并将其中的字段减少若干条后,就可以一次读取出全部记录。至于需要减少多少个字段才能一次读取出全部记录跟原先的关系型数据库的结构有关,需要具体情况具体实验。共3页 第1页
相关文章推荐
- 利用ODBC实现Domino和关系数据库的互操作
- 利用支持ODBC的CRecordset类实现对数据库的操作
- 利用支持ODBC的CRecordset类实现对数据库的操作
- nginx利用geo模块做限速白名单以及geo实现全局负载均衡的操作记录
- Java程序员从笨鸟到菜鸟之(一百零五)java操作office和pdf文件(三)利用jxl实现数据导出excel报表以及与POI的区别
- 利用c#面向对象实现对数据库的操作
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- Android利用泛型和反射来实现对数据库的操作--SqlHelper
- 【Android游戏开发十六】Android Gesture之【触摸屏手势识别】操作!利用触摸屏手势实现一个简单切换图片的功能!
- JDBC上关于数据库中多表操作一对多关系和多对多关系的实现方法
- Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
- 【廖雪峰 python教程 课后题 切片】利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
- 利用原生js和jQuery实现单选框的勾选和取消操作的方法
- PHP如何利用Python实现对PDF文件的操作
- Django 利用 API 实现 AJAX 操作
- 数据结构与算法:单链表(利用万能指针实现对任意类型数据进行操作)
- 利用Aspose.Word控件实现Word文档的操作
- 利用js实现Ajax操作(不通过数据库传数据)
- 利用python线程编程实现生产者与消费者关系
- 利用Aspose.Word for .NET实现Word文档的操作