如何在ACCDB项目中设置Application.CurrentProject.Connection()

知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述如何在ACCDB项目中设置Application.CurrentProject.Connection?相关的知识,希望能为你提供帮助。
我们正在将ADP项目转换为ACCDB,因为Office 2013版本不再支持ADP。
我有以下代码来更改ADP中的应用程序连接:

Function ChangeADPConnection(strServerName As String, strDBName As _ String, Optional strUN As String, Optional strPW As String) As Boolean Dim strConnect As String On Error GoTo EH: Application.CurrentProject.CloseConnection 'The Provider, Data Source, and Initial Catalog arguments are required. strConnect = "Provider=SQLOLEDB.1" & _ "; Data Source=" & strServerName & _ "; Initial Catalog=" & strDBName If strUN < > "" Then strConnect = strConnect & "; user id=" & strUN If strPW < > "" Then strConnect = strConnect & "; password=" & strPW End If Else'Try to use integrated security if no username is supplied. strConnect = strConnect & "; integrated security=SSPI" End If Application.CurrentProject.OpenConnection strConnect ChangeADPConnection = True Exit Function EH: MsgBox Err.Number & ": " & Err.Description, vbCritical, "Connection Error" ChangeADPConnection = False End Function

【如何在ACCDB项目中设置Application.CurrentProject.Connection()】但是,我不确定如何更改ACCDB中的当前项目连接?
我使用链接表与SQL Server作为后端
这是我尝试过的:
Public Function ChangeACCDBConnection(strServerName As String, strDBName As _ String, Optional strUN As String, Optional strPW As String) As BooleanDim strConnect As String Dim cnn As ADODB.Connection Application.CurrentProject.Connection.Close On Error GoTo EH: strConnect = "XXXXX" Set Con = New ADODB.Connection Con.ConnectionString = strConnect CurrentProject.OpenConnection strConnect // Error here ChangeConnection = True Exit FunctionEH: MsgBox Err.Number & ": " & Err.Description, vbCritical, "Connection Error" ChangeConnection = False End Function

我收到错误,更改当前项目连接。连接字符串很好,并且成功连接到数据库。
唯一的问题是如何设置与Application.CurrentProject的连接,以便在整个应用程序中使用它。
任何帮助非常感谢..
答案据我所知,在标准的Access数据库应用程序(不是ADP)中,您只能以这些方式操作您的连接:
  1. 删除链接表并使用代码重新创建这些链接。如果您正确执行此操作,则可以链接/重新链接到任何有效的数据源。这对任何ADO连接都没有影响。链接表实际上使用DAO和ODBC的组合作为数据访问层。
  2. 在代码模块中将ADO连接对象创建为全局变量。当您想要切换数据源时,编写函数来更改其连接。 (你也可以将所有这些包装在一个类中。)
我不认为非ADP应用程序具有像ADP这样的内置全局ADO连接,因此您必须使用上面列出的方法。
另一答案您的代码可以继续使用currentProject.connection,但您无法更改它。
实际上,currentproject连接将始终解析为您当前的前端数据库。
但是,这意味着使用此连接对象的现有代码将继续工作。
所以,如果你有这个:
Dim rs As New ADODB.Recordsetrs.Open ("select * from tblHotels"), CurrentProject.Connection Do While rs.EOF = False Debug.Print rs!FirstName rs.MoveNext Loop rs.Close Set rs = Nothing

幕后发生的事情是上面解决了我们的字体结束,然后解决了tblHotels(一个链接表到sql server)。因此,Access将使用CURRENT前端数据库作为当前连接。它解析为该表,但该表链接(指向)sql server,因此访问将使用链接表中的信息为您解析此连接。
我不能再强调当前项目连接因此解析为本地对象(链接表)。由于该表指向sql server,然后访问将使用链接表中的信息,你就可以了。
因此,在概念层面:继续使用当前项目。您永远不会更改,触摸或编辑或修改访问返回的当前项目连接。
在实际层面:要指向或更改sql表resoles的sql server,你必须重新链接表并将它们指向新的/不同的数据库。
因此,只需更改整个应用程序连接,您只需调用重新链接表代码即可。完成此重新链接后,您可以继续在代码中使用当前项目连接对象。所以这里唯一真正的区别是你不能(从不)改变连接对象,但你只需重新链接表以指向正确的数据库。
在一天结束时,这个窗台意味着你永远不必在代码中处理连接字符串,除了重新链接例程。
请注意,您的重新链接代码也应该更改/设置您拥有的任何PT查询。
因此,要使用PT查询,您可以:
Dim rstAs DAO.RecordsetWith CurrentDb.QueryDefs("qryPassR") .SQL = "select * from tblBooking where id = " & BookingID Set rst = .OpenRecordset() End With

请记住,上面是发送到SQL Server的原始T-SQL。
或者,要调用存储过程,您可以:
Dim rstAs DAO.RecordsetWith CurrentDb.QueryDefs("qryPassR") .SQL = "exec MyStoredProc " & BookingID .Execute End With

注意在上面我们没有处理代码中的连接字符串,我们甚至不必处理连接对象。 (我们甚至不必创建连接对象来调用SQL Server存储过程。如果存储过程是返回记录,那么我们当然会使用第一种语法:
Dim rstAs DAO.RecordsetWith CurrentDb.QueryDefs("qryPassR") .SQL = "exec MyStoredProc " & BookingIDSet rst = .OpenRecordset() End With

如果您有基于参数的表单,那么现在将表单DIRECTLY绑定到链接表。
要传递(限制)表单数据集,您可以使用它
Docmd.OpenForm“frmBooking”,,,“id =”&bookingID
上面将加载表单,并且只能从sql server中拉出ONE记录,尽管表单直接绑定到链接表。
因此,表单的参数(限制拉取的记录)应该使用open form命令的上述“simple”where子句。
因此,您不需要一些新的全局连接对象,但可以继续使用currentproject连接。

    推荐阅读