我的目标是从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]"
嗯,您不能在两个不同的数据库之间使用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对象之间传输数据-因此,使用上述访问功能不仅是一种解决此问题的好方法问题,但启动代码也少得多。