' 链接SQL服务器
' ----------------------------------------------
' 定义服务器连接用变量
Dim strLinkServerIP As String
Dim strLinkServerUID As String
Dim strLinkServerPWD As String
Dim strLinkServerDataBase As String
' 定义刷新链接表用变量
Dim myDB As Database
Dim myTable As TableDef
Dim myDB As Database
Dim myTable As TableDef
Dim i As Integer
Dim J As Integer
' 获取SQL服务器的链接参数
strLinkServerIP = SQL服务器IP或名称
strLinkServerUID = 登陆SQL服务器的用户(一般是SA)
strLinkServerPWD = 上述SQL服务器的用户的密码
strLinkServerDataBase = 链接的SQL服务器数据库名称
'连接根据上述值指定的SQL服务器数据库
DoCmd.TransferDatabase acLink, "ODBC", "ODBC;DRIVER=SQL Server;SERVER=" & strLinkServerIP & ";UID=" & strLinkServerUID & ";PWD=" & strLinkServerPWD & ";DATABASE=" & strLinkServerDataBase & "", acTable, "", "", True
'刷新所有链接表
Set myDB = DBEngine.Workspaces(0).Databases(0)
i = myDB.TableDefs.Count 'tables count
For J = 0 To i - 1
Set myTable = myDB.TableDefs(J)
If myTable.Attributes = DB_ATTACHEDODBC Or myTable.Attributes = DB_ATTACHEDODBC + DB_ATTACHSAVEPWD Then
myTable.Connect = "ODBC;DRIVER=SQL Server;SERVER=" & strLinkServerIP & ";UID=" & Nz(strLinkServerUID) & ";PWD=" & strLinkServerPWD & ";DATABASE=" & strLinkServerDataBase & ""
myTable.RefreshLink
Err.Clear
Set rst = myDB.OpenRecordset(myTable.Name, dbOpenDynaset, dbSeeChanges)
rst.Close
If Err <> 0 Then
If MsgBox("表[" & myTable.Name & "]未能连接上!" & vbCrLf & "是否继续链接其他表.", vbYesNo + vbQuestion, gstrMsgCaption) = vbNo Then
Set myDB = Nothing
GoTo Exit_Form_Load
End If
End If
End If
Next
先把所有链接表生成好,把上述代码写入启动窗体就OK了,每次启动程序就会刷新所有链接表一次,第一次启动时会有点慢,以后就不会了.
如果服务器需要改变的话可以把SQL服务器的参数写入到MDB的本地表中,需要使用时调出就可以了.
注意这个方法有点小问题,在不同的局域网中使用(如SQL服务器的名称变更了),生成MDE前最好在新的局域网环境中刷新链接表一次,并不要进行"压缩和修复数据库"操作,否则会出问题的.