知识为进步之母,而进步又为富强之源泉。这篇文章主要讲述如何在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)中,您只能以这些方式操作您的连接:
- 删除链接表并使用代码重新创建这些链接。如果您正确执行此操作,则可以链接/重新链接到任何有效的数据源。这对任何ADO连接都没有影响。链接表实际上使用DAO和ODBC的组合作为数据访问层。
- 在代码模块中将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连接。
推荐阅读
- Android开发 - 通过3G缓慢的互联网连接
- PlayerPrefs没有在android上工作
- Android FileOutputStream位置保存文件
- 恢复android中活动的动态UI元素
- 将Android中的位图保存为外部存储中的JPEG文件夹
- 如何在android中删除包()
- Visual Studio,Android(找出Nuget-packages所需的框架)
- ImportError(没有名为'app'的模块)
- 慢nuget vs2017安装包android