|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。dom|odbc|数据|数据库
使用ODBC完成Domino和干系数据库的互操纵
LotusDomino是现今办公主动化体系的支流开辟平台之一,Domino自带一个非干系型数据库――文档型数据库,而今朝年夜部分企业的信息都贮存在诸如SQLServer等干系型数据库中,因而,在开辟办公主动化体系过程当中必将要触及Domino和干系数据库的数据互换成绩。
1、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的文档型数据库中了。
2、程序存在的成绩及办理
可是利用下面的代码在举行实践数据库内容转换的时分,我们发明Notes经由过程ODBC数据源毗连干系数据库时,没法辨认中笔墨段名。假如干系数据库的字段是中文名字,那末ODBCResultSet将为空,办理的举措是将干系数据库中的一切字段都改成英文名字。
在实践数据库的转换过程当中同时发明的成绩另有:该程序实行完一次后不克不及把干系型数据库中的内容全体掏出来。经由过程调试LotusScript剧本并屡次单步跟踪剧本的实行情形,发明每次都是实行到统一条数据库纪录时,ODBCRe-sultSet就以为数据集已到头了,上面的纪录就都丢了。因而利用干系数据库软件翻开数据库,并将个中的字段削减多少条后,就能够一次读掏出全体纪录。至于必要削减几个字段才干一次读掏出全体纪录跟本来的干系型数据库的布局有关,必要详细情形详细实行。
3、LotusDomino中的日期处置
下面程序中有以下一段程序:
IfIsdate(value)Then
Ifvalue=Datevalue("0:00:00")Then
value=""
Else
value=Format(value,"mm-dd-yyyy")
EndIf
Setitem=doc.AppendItemValue(field,value)
Endif
这一段代码的感化是:判别从干系库中读掏出来的字段是不是为日期型字段,假如是,那末判别这天期型字段的值,看它是不是为空,假如为空则在写进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日”这个日子了。
4、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工具中。实行Calldoc.Save()函数以后,一切内存中的NotesItem工具被存进相干联的表单中。
在研讨怎样处置空日期的过程当中,最后的设法是间接将空字符串写进NotesItem中,可是在检察匡助并单步跟踪剧本的实行后发明上述办法行欠亨。缘故原由在于NotesItem的Text属性是只读的,基本没法为其赋值,同时也没有响应的赋值函数,明显函数doc.AppendItemValue(fieldname,value)是专门给Text属性赋值的函数。
5、Notes中视图与表单的联系关系
在开辟过程当中,因为一次毛病,我们不测地发明了Notes中视图与表单的联系关系技能。Notes为每一个表单都设置了称号与别号两个属性,这两个名字都能标识表单。在开辟过程当中,我们所开辟的库有两个表单,分离定名为Form1和Form2,其各自的别号因为忽略都设成了Docu-ment,而每一个表单都有一个视图与之对应。在计划Form2的视图时,固然指定视图中的列都与Form2中的域相干联,可是在运转的时分从视图中双击某条则档欲对其举行编纂时,切换到的表单倒是Form1的,多方查找均不克不及办理这个成绩,因而抱着碰运气的心思改动了表单的别号,分离为Document1和Docu-ment2,了局成绩办理。可是又呈现了Form1的视图没法切换到表单的情形,因而又将Form1的别号改回Document,两个视图均能准确切换到本人的表单上了。
由此发明,Notes在创建视图与表单的联系关系的时分,起首看表单是不是具有别号,假如有,则用别号举行联系关系,一旦对表单的别号举行了改动就得从头计划视图,假如不想从头做视图就不克不及改动表单的别号。固然同时也能够使用这一技能完成从视图中切换到分歧表单的功效。假如表单没有别号,则利用称号举行联系关系。
提供TCP/IP、ODBC和JDBC等多种数据库连接路径。 |
|