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

时间:2015-02-17 23:34:31

标签: sql-server vba ms-access dsn

我通常不会在MS Access VBA中编程,所以请原谅我的问题,如果它是愚蠢的。

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

我想以编程方式将SQL Server的后端链接到我的MS Access前端。我在DJ Steele's DSN-less connection page阅读了这里,我可以使用他在这里提供的代码作为后端与SQL服务器建立无DSN连接。

所以我将其复制到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服务器链接到数据库,因为这需要我访问人和他们的计算机才能建立链接。 (谁想要那个?大声笑)

在编写这个问题时,我也查看了与我有关的类似问题,this接近我想要的,但它一直给我“编译错误:需要常量表达式”输入:

LinkTable "MS_Access_BackEnd_Test", "Table_1"

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

我再也不熟悉MS Access VBA,所以请原谅这个问题是否蹩脚。

1 个答案:

答案 0 :(得分:0)

看看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 "TESTXP\SQLEXPRESS", "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=TESTXP\SQLEXPRESS;APP=Microsoft Office 2003;WSID=TESTXP;DATABASE=TacsData;Trusted_Connection=Yes