我有一个应用程序在通过无线网络访问MDB数据库时遇到问题。
一个快速的解决方案是在所有工作站上都有一个本地MDB文件,将其所有表链接到SQL Server数据库吗?
这是一种避免在应用程序中重写所有数据访问代码的方法吗?
是的,这会做得很好。我们有许多客户通过这种方式联系在一起
然而,这不是一项容易的任务。不确定所需的所有努力是否会得到回报
还有一些新的维护和部署问题。
接下来的步骤是:
1)将表迁移到SQLServer
2)创建用于连接后端数据库的ODBC数据源
3)连接您的表
4)重命名连接的表以删除模式限定符(例如"dbo_"),使链接的表与以前同名。
现在是测试所有代码的时候了
希望您不必重写任何内容。
真正的问题在于客户端PC,您需要创建一个与原始数据源匹配的ODBC数据源。此外,如果重新分发前端数据库,则可能需要从客户端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