Domino采用ODBC与关系数据库集成

    Domino与SQL关系数据库集成的方式有很多,比如JDBC、ODBC、ADO,调用第三方接口webservice、servlet等等,均可实现,如果有第三方系统做集成常常不建议直接操作对方数据库,多采用调用对方接口的方式。当然,在系统运转过程中,由于系统故障、网络故障等原因,常常会出现交互失败的情况,那进行数据修复,则可通过ODBC、JDBC方式修复关系数据库的数据。

    我经历的这个项目就是系统运行了3年多,发现5000多条数据不正确,用户要求修复,而domino服务器部署在wins平台,又没开放web服务,为此则采用ODBC方式修复。

    ODBC对wins平台更方便些,当然linux也可配置ODBC数据源,但没真正实施过,在此只介绍wins的方式。


【操作系统】

    windows

【配置ODBC数据源步骤】

1、“控制面板”à“管理工具”à“数据源”:


2、“添加”数据源,输入“名称”、“SQL服务器IP地址”:

3、点击“下一步”,选择“使用用户输入ID和密码的SQL Server验证(s)”,输入ID及密码:

4、点击“下一步”,“更改默认的数据库”:

5、点击“下一步”à“完成”à“测试数据源”:

至此,数据源配置成功。

【LotusScript代码样例

Option Public
Option Declare
UseLSX "*LSXODBC"
Sub Initialize
	On Error GoTo errhandle
	Dim ss As New NotesSession
	Dim db As NotesDatabase
	Dim curDb As NotesDatabase
	Dim view As NotesView
	Dim doc As NotesDocument
	Dim tmpDoc As NotesDocument
	Dim iCount As Integer
	iCount = 0 
	Dim iCount2 As Integer
	iCount2 = 0
	'日志信息
	Dim sLogInfo As String
	sLogInfo = ""
	
	'日志信息(文号为空)
	Dim sLogInfo2 As String
	sLogInfo2 = ""
	
	Set curDb = ss.Currentdatabase
	Set db = ss.Getdatabase("", "数据库路径")
	Set view = db.getView("ManageFileDocument")
	
	Dim con As Odbcconnection
	Dim qry As Odbcquery
	Dim result As Odbcresultset
	
	Set con=New ODBCConnection
	Set qry=New ODBCQuery
	Set result = New ODBCResultSet
	
	con.Silentmode = true
	Set qry.Connection = con
	Set result.Query = qry
	
	If Not con.Connectto("arcfileTest","sa","pde") Then
		MsgBox "ODBC连接失败!"
		Exit sub
	End If
	
	'如果数据库支持事务则启用事务处理
	If con.IsSupported(DB_SUPP_TRANSACTIONS) Then 
		con.AutoCommit = False	
	End If
	
	MsgBox "开始查询文档:" & CStr(Now())
	
	Set doc = view.Getfirstdocument()
	While Not doc Is Nothing
		Set tmpDoc = view.Getnextdocument(doc)
		'按文号 在中间表查询 是否有记录
		
		If doc.ZH(0)<>"" Then
			qry.SQL = "select * from s_wenshudangan where ZiHao='" & doc.ZH(0) & "'"
			'MsgBox "qry.SQL==" & qry.SQL
			result.Execute
			'不存在此文号,重置状态
			If result.Numrows()=0 Then				
				iCount = iCount +1
				sLogInfo = sLogInfo & "<tr><td>" & doc.FileType(0) & "</td><td>" & doc.ZH(0) & "</td><td></td><td>" & doc.FileFormDate(0) & "</td><td>" & doc.DutyUser(0) & "</td><td>文号找不到</td></tr>"
				'重置标识域,可重新归档
				doc.ReadSuccess = "0"
				Call doc.save(True,False)
			End If
			
			result.Close(DB_CLOSE)
		Else
			iCount2 = iCount2 +1
			sLogInfo = sLogInfo & "<tr><td>" & doc.FileType(0) & "</td><td></td><td>" & doc.FileTitle(0) & "</td><td>" & doc.FileFormDate(0) & "</td><td>" & doc.DutyUser(0) & "</td><td>不存在</td></tr>"
		End If	
		
		Set doc = tmpDoc		
	Wend
	'%END REM
	
	MsgBox "结束查询文档:" & CStr(Now())
	con.Disconnect
	
	Set result = Nothing
	Set qry = Nothing
	Set con = Nothing
	
	'记录日志
	Dim logDoc As NotesDocument
	Dim sDate As String
	'sDate = Cstr(Format(Now,"yyyy-mm-dd"))
	'Set logDoc = fnGetLogDoc(sDate)
	Set logDoc = curDb.CreateDocument()
	logDoc.Form = "UpdateLog"
	logDoc.StDate = CStr(Format(Now,"yyyy-mm-dd"))
	'Msgbox "==" & Cstr(Format(Now,"hh:ss"))
	logDoc.StTime = CStr(Format(Now,"hh:mm"))
	
	Dim item As NotesRichTextItem
	If logDoc.HasItem("Body") Then
		Set item = logDoc.Getfirstitem("Body")
	Else
		Set item = New NotesRichTextItem(logDoc,"Body")
	End If	
	
	'sLogInfo = sLogInfo & "</table>"
	'去掉回车换行符
	sLogInfo=Replace(sLogInfo,Chr(10),"")
	sLogInfo=Replace(sLogInfo,Chr(13),"")	
	Call item.Appendtext(sLogInfo)
		
	logDoc.StCantFind = CStr(iCount)
	logDoc.StNull = CStr(iCount2)
	Call logDoc.Save(True,False)
	
	MsgBox "共查询到:" & CStr(iCount) & "条文档没有导入;文号为空的文档:" & CStr(iCount2)
	Exit Sub
	
errhandle:
	MsgBox ss.Currentagent.name & "出错信息:" & Error() & ",出错行:" & CStr(Erl())
	Exit sub
End Sub

代码中一定要引入:

UseLSX"*LSXODBC"


参考数据库下载链接:点击打开链接

PS:后面我会逐步写domino webservice提供者、webservice使用者的部署方式,以及调用第三方service接口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值