如何在 C# 中使用 Access 2007 链接表管理器
Posted
技术标签:
【中文标题】如何在 C# 中使用 Access 2007 链接表管理器【英文标题】:How do I utilize Access 2007 Linked Table Manager in C# 【发布时间】:2012-03-15 16:04:32 【问题描述】:场景:我有一个前端和一个后端 Access 2007 数据库,它们当前通过链接表管理器数据库工具相互链接。后端数据库将被移动到服务器上的某个位置。每个设施的服务器名称将有所不同,现在大约有 40 个左右,并且全年都会增加。
我需要尝试以编程方式更改链接表。我需要将链接字符串构建为:
\\something\facilitynum(gathered from Environment variable)\c$\somefolder\.
我发现 MSysObjects 中的数据库列包含需要更改的链接字符串。问题变成了,如何获得更改系统表的权限或使用一些 .dll 允许我更改指向新建字符串的链接?
到目前为止,我发现的所有内容总是会导致手动更改 Access 数据库中的链接。
【问题讨论】:
见***.com/questions/7461414/… 谢谢,我想这可能就是我想要的。 这就是我想要的,感谢 Remou 的链接。 @Fionnuala:问题实际上是不同的。那个是关于用 SQL 添加链接表的,这个是关于重新定位前端 Access 应用程序/数据库中已经存在的链接表的。前者做不到,后者可以…… 【参考方案1】:您可以像这样以编程方式从 Access(使用 VBA)中更改链接(这使用 dsn 文件来包含实际的服务器信息)
Private Sub UpdateDSN()
On Error GoTo ErrorHandler
Dim dbPath As String
Dim connStr As String
Dim Tdf As TableDef
dbPath = Application.CodeDb.Name
dbPath = Left(dbPath, InStr(dbPath, Dir(dbPath)) - 1)
For Each Tdf In CurrentDb.TableDefs
connStr = Tdf.Connect
If InStr(1, UCase(connStr), "ODBC") Then
connStr = "odbc; FILEDSN=" & dbPath & "db.dsn;"
Tdf.Connect = connStr
Tdf.RefreshLink
End If
Next
Dim fName As String
Dim fNumber As Integer
Dim InputStr As String
fNumber = FreeFile()
fName = dbPath & "db.dsn"
Dim serverName As String
Open fName For Input As fNumber
Do While Not EOF(fNumber)
Line Input #fNumber, InputStr
If InStr(1, UCase(InputStr), "SERVER=") > 0 Then
serverName = Right(InputStr, Len(InputStr) - _
(InStr(1, InputStr, "SERVER=") + 6))
End If
Loop
ErrorHandler:
On Error GoTo 0
DoCmd.OpenForm "Main"
cap = Forms!main.Caption
If InStr(1, cap, "(") > 1 Then
cap = Left(cap, InStr(1, cap, "("))
End If
Forms!main.Caption = "db" & " (" & serverName & ")"
End Sub
【讨论】:
以上是关于如何在 C# 中使用 Access 2007 链接表管理器的主要内容,如果未能解决你的问题,请参考以下文章
C# MD5 和/或其他加密 oledb (access 2007)