使用VBA将表从SQL Server导出到访问表中

问题描述 投票:0回答:1

我的目标是从sql server导出表以进行访问。到目前为止,这是我的代码,它可以运行,但不执行任何操作。任何帮助,将不胜感激?我在下面的代码中更改了服务器名,但其余部分相同。

选项比较数据库显式选项

Public Sub adotest()

Dim ADOConn As Object
Set ADOConn = CreateObject("ADODB.Connection")
Dim db As Database
Set db = CurrentDb()

On Error Resume Next

ADOConn.ConnectionString = "Driver={SQL 

服务器];服务器=服务器名称;数据库=模型; Trusted_Connection =是;“ADOConn.Open'“ Driver = {SQL Server}; Server =”服务器名称“;数据库=模型; Trusted_Connection =是;”

Debug.Print ADOConn.State

ADOConn.Execute "insert into models (model, bookid) select model, bookid from [odbc;Driver={SQL Server};Server="servername";Database=Model]"
sql-server vba ms-access access-vba access
1个回答
0
投票

嗯,您不能在两个不同的数据库之间使用ADO,因为每个ado对象仅允许一个连接。另一方面,Access无疑可以同时与多个连接一起使用。您也许可以创建两个ADO记录集,并逐行循环(当然也逐列循环)。但是,这太多了。

假设您有正确的连接,例如到sql server的链接表。 (对于测试,最好将表“链接”到该sql服务器。)>

因此,您可以使用以下代码:

Dim strCon        As String
strCon = CurrentDb.QueryDefs("qrypassR").Connect

DoCmd.TransferDatabase acLink, "ODBC Database", strCon, acTable, _
   "tblHotelsServerSide", _
   "tblHotelsClientSide", False, True

Debug.Print "done"

上面将创建一个到sql服务器的全新链接(不传输表)。

但是,如果您要传输数据而不创建链接?然后在“ acLink”上方替换为acImport。

因此,您只需要上述(ODBC)的有效连接字符串。因此,如果您有任何现有的链接表,请在代码中获取/窃取该已知的工作连接。

例如:

 strCon = CurrentDb.TableDefs("Some linked table").Connect

当然,您也可以在代码中分配一个字符串作为连接,而不是“取消”现有连接(如果您没有)。而且,创建链接表是确保您的连接字符串正确的好方法-因此访问可以为您构建+设置链接表,然后按照上述代码示例在代码中使用现有的有效连接。

因此,使用ADO(或DAO对象)很难做到这一点,因为这样的对象往往同时缺乏对两个不同活动连接的支持,而您需要这种能力来轻松地传输数据,或者是手动编码循环等,并处理具有两个不同连接的两个ADO对象,并且几乎没有方法或功能允许在两个ADO对象之间传输数据-因此,使用上述访问功能不仅是一种解决此问题的好方法问题,但启动代码也少得多。

© www.soinside.com 2019 - 2024. All rights reserved.