簡體   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