无DSN连接MS Access前端和SQL server后端



我通常不使用MS Access VBA进行编程,所以如果我的问题很愚蠢,请原谅。

因此,我使用MS Access 2010作为前端,使用SQL Server 2014作为后端。(我在前端界面中没有选择,所以请不要对其他选项提出建议)。

我想通过程序将SQL服务器的后端链接到我的MS Access前端。我在DJ Steele的无DSN连接页面上读到,我可以使用他在这里提供的代码,将无DSN连接到SQL server作为后端。

所以我把它复制到一个VBA Access模块中,打开另一个模块,运行这个代码来运行DJ Steele代码,试图连接到我制作的一个小型SQL Server数据库:

Option Compare Database
Sub runThis()
FixConnections "AServerNameHere", "MS_Access_BackEnd_Test"
End Sub

据我从VBA调试器中所知,它进入了

Set dbCurrent = DBEngine.Workspaces(0).Databases(0)

那么这个值似乎是空的。我不知道该如何处理,因为据我所知,这是我能找到的为数不多的无DSN连接的完整示例之一。

我不想使用DSN方法将SQL服务器链接到数据库,因为这需要我去访问人们及其计算机才能进行链接。(谁会想这么做?哈哈)

在写这个问题的时候,我也看过与我相关的类似问题,这与我想要的很接近,但它一直给我"编译错误:需要常量表达式"的输入:

LinkTable "MS_Access_BackEnd_Test", "Table_1"

LinkTable "MS_Access_BackEnd_Test", "Table_1", , "AServerNameHere"

再说一次,我不熟悉MS Access VBA,所以如果它很蹩脚,请原谅这个问题。

查看DJ Steele的代码,我发现它可以在行之外工作

' Unfortunately, I'm current unable to test this code,
' but I've been told trying this line of code is failing for most people...
' If it doesn't work for you, just leave it out.
tdfCurrent.Attributes = typNewTables(intLoop).Attributes

我不得不对此发表评论。

使用Set dbCurrent = CurrentDb()基本上与Set dbCurrent = DBEngine.Workspaces(0).Databases(0)相同,但后者的速度要快得多。。。这意味着现在需要10微秒,而不是100∶o

您仍然需要dbCurrent作为对当前Access前端的引用,该前端是链接表对象所在的位置,即使数据来自其他地方。

编辑:为我工作

我添加了一个debug.print行来监视上的情况

' Build a list of all of the connected TableDefs and
' the tables to which they're connected.
For Each tdfCurrent In dbCurrent.TableDefs
    Debug.Print tdfCurrent.Name, tdfCurrent.Connect
    If Len(tdfCurrent.Connect) > 0 Then
      If UCase$(Left$(tdfCurrent.Connect, 5)) = "ODBC;" Then
          ...

然后

? currentdb().TableDefs("dbo_Person").Connect
ODBC;DSN=TacsData;APP=Microsoft Office 2003;WSID=TESTXP;DATABASE=TacsData;Trusted_Connection=Yes;QuotedId=No
FixConnections "TESTXPSQLEXPRESS", "TacsData"
MSysAccessObjects           
MSysAccessXML 
...     
MSysRelationships           
Table1        
dbo_Person    ODBC;DSN=TacsData;APP=Microsoft Office 2003;WSID=TESTXP;DATABASE=TacsData;Trusted_Connection=Yes;QuotedId=No
? currentdb().TableDefs("dbo_Person").Connect
ODBC;DRIVER=sql server;SERVER=TESTXPSQLEXPRESS;APP=Microsoft Office 2003;WSID=TESTXP;DATABASE=TacsData;Trusted_Connection=Yes

最新更新