我的应用程序在通过无线网络访问MDB数据库时遇到问题。
快速解决方案是在所有将其所有表链接到SQL Server数据库的工作站上都有一个本地MDB文件吗?
这是否可以避免在应用程序中重写所有数据访问代码?
答案 0 :(得分:1)
是的,这样做会很好。我们有很多客户以这种方式联系 然而,这不是一件容易的事。不确定所需的所有努力是否会为自己付出代价 而且您有一些新的维护和部署问题。
要遵循的步骤如下:
1)将表迁移到SQLServer
2)创建将用于连接到后端数据库的ODBC数据源
3)连接你的桌子
4)重命名已连接的表以删除模式限定符(例如" dbo _"),以便链接表具有与以前相同的名称。
现在是测试所有代码的时候了 希望你不必改写任何东西。
真正的问题在于您需要创建与原始数据源匹配的ODBC数据源的客户端PC。此外,如果您重新分发前端数据库,则必须重新连接客户端PC上的所有表。 你需要调用这样的函数:
Public Function UpdateODBCTables() As Boolean
On Error GoTo Exit_On_Error
Dim dbs As DAO.Database
Dim tdf As DAO.TableDef
Dim sDSN As String
Dim sDB As String
Dim sComputer As String
Dim sDesc As String
Dim sApp As String
Dim strConnect As String
sDSN = "YOUR_DSN_NAME"
sDB = "YOUR_DATABASE_NAME"
sComputer = "YOUR_COMPUTER_NAME"
sApp = "YOUR_APP_NAME"
sDesc = "DESCRIPTION_OF_YOUR_APP"
strConnect = "ODBC;DSN=" & sDSN & ";" & _
"DATABASE=" & sDB & ";" & _
"WSID=" & sComputer & ";" & _
"TrustedConnection=Yes;" & _
"Description=" & sDesc & ";" & _
"APP=" & sApp ";"
Set dbs = CurrentDb
' Loop over tabledefs of ODBC type and reconnect
For Each tdf In dbs.TableDefs
If tdf.Connect <> "" And Left(tdf.Connect, 4) = "ODBC" And Left(tdf.Name, 1) <> "~" Then
tdf.Connect = strConnect
tdf.RefreshLink
End If
Next
dbs.TableDefs.Refresh
UpdateODBCTables = True
Exit_On_Return:
Set dbs = Nothing
Exit Function
Exit_On_Error:
MsgBox Err.Description, vbCritical, "YOUR_MESSAGE_TITLE"
Resume Exit_On_Return
End Function