我通常不会在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,所以请原谅这个问题是否蹩脚。
答案 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