Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何使用混合连接将数据从SQL Server转储到MS Access表_Sql Server_Vba_Ms Access_Ado_Dao - Fatal编程技术网

Sql server 如何使用混合连接将数据从SQL Server转储到MS Access表

Sql server 如何使用混合连接将数据从SQL Server转储到MS Access表,sql-server,vba,ms-access,ado,dao,Sql Server,Vba,Ms Access,Ado,Dao,我需要使用一个查询从SQLServer中提取数据,该查询的语句存储在MS access表中,并将数据转储到另一个表中 有两个表,01 MyStoredSQLs和02 tmpTableData 问题是还有两个连接。这就是为什么我叫它混合动力车 我的最终结果是将SQL Server中的数据放入tmpTableData(其语句存储在MyStoredSQLs表中的查询结果) 公共子转储SQLServerData() Dim conn作为ADODB连接 关于错误转到errMSG Set conn=新的AD

我需要使用一个查询从SQLServer中提取数据,该查询的语句存储在MS access表中,并将数据转储到另一个表中

有两个表,
01 MyStoredSQLs
02 tmpTableData

问题是还有两个连接。这就是为什么我叫它混合动力车

我的最终结果是将SQL Server中的数据放入
tmpTableData
(其语句存储在MyStoredSQLs表中的查询结果)

公共子转储SQLServerData()
Dim conn作为ADODB连接
关于错误转到errMSG
Set conn=新的ADODB.连接
conn.ConnectionString=“DSN=myDSN;UID=MyID;Pwd=MyPWd”
康涅狄格州公开赛
Dim数据库作为DAO.Database
Set db=CurrentDb
Dim rs作为DAO.Recordset
'正在检索存储在MyStoredSQLs表中的SQL语句
Set rs=db.OpenRecordset(“从MyStoredSQLs中选择[Statement],其中ID=1”)
将tmpSQL设置为字符串
将tmpINTOSQL设置为字符串
tmpSQL=rs(0)
“混合声明
tmpINTOSQL=“插入tmpTableData”&tmpSQL
连接执行(tmpINTOSQL),dbFailOnError
关闭连接
rs.Close
db.关闭
设置连接=无
设置rs=无
Set db=Nothing
错误消息:
调试.打印错误说明
端接头

您不能指望SQL server能够神奇地访问存储在别处的表

在Access中执行查询,并使用链接表或指定表的位置,例如

INSERT INTO tmpTableData SELECT Something FROM [ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd].Schema.TableInSQLServer
如果要在SQL server而不是Microsoft Access上执行查询,则SQL server需要能够访问Access数据库文件,并使用
OPENROWSET
查询Access表

作为替代方法,您可以创建直通查询,并使用该查询复制表:

Dim qd As DAO.QueryDef
Set qd = db.CreateQueryDef("~tmpQuery")
qd.Connect = "ODBC;DSN=myDSN;UID=MyID;Pwd=MyPWd"
qd.ReturnsRecords = True
qd.SQL = tmpSQL
Set qd = Nothing
db.Execute "INSERT INTO tmpTable SELECT * FROM [~tmpQuery]"
db.QueryDefs.Delete "~tmpQuery"

“使用语句存储在MS access表中的查询”听起来非常危险。如果您正在存储要在Access数据库中运行的SQL语句,我希望在任何人插入它们之前对它们进行很好的验证。实际上,它们是经过验证的。我的另一个选择是使用.SQL文件。但我想这将需要一种不同的方法。有什么问题吗?您还没有描述任何错误,如果您使用链接表,这应该可以正常工作。我希望避免使用链接表。该错误与SQL Server数据库中不存在的对象有关。[Microsoft][SQL Server本机客户端10.0][SQL Server]无效的对象名称tmptabledataquery包含的表超过01个,因此我无法使用“.TableInSQLServer”。SQL语句具有Where条件、左外部联接等。有趣的是,我可以在excel文件中轻松地执行此操作,但在MS Access表中却不能。然后,您需要在所有表前面加上位置前缀,或者链接表。另一种解决方法是使用存储的直通式查询,然后将直通式查询的结果保存到表中。@Luthius我在《如何使用直通式查询》中编辑过我想你给了我一个惊人的线索。我将测试并返回给您。