繁体   English   中英

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

[英]DSN-less Connection MS Access front end and SQL server backend

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

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

我想以编程方式将SQL Server的后端链接到我的MS Access前端。 我在这里阅读了DJ Steele的无DSN连接页面 ,我可以使用他在这里提供的代码作为后端与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服务器链接到数据库,因为这需要我访问人和他们的计算机才能建立链接。 (谁想要那个?大声笑)

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

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 "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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM