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接口。