我有一个带有ODBC连接的sql服务器数据库。我希望能够将表从 sqlserver 导入访问数据库。
我已经能够将一个表导入访问,然后将其导出到另一个访问文件中。
这样:
DoCmd.TransferDatabase acImport, "ODBC Database", _
"ODBC connectionstring" _
, acTable, "SOURCE1", "DEST1", False, True
DoCmd.TransferDatabase acExport, "Microsoft Access", _
"P:Main-Copy.accdb" _
, acTable, "DEST1", "DEST2"
是否有可能一步完成而不是两步?
甚至考虑一个纯 SQL 解决方案,其中在同一操作查询中连接到 SQL Server 数据库和远程访问数据库。以下示例假设 MSSQL 和 MS Office 安装在同一位版本(32/64 位(上,以便通过 DAO 进行适当连接。
追加查询 (假设所有字段在两个表之间对齐,否则选择特定列(
INSERT INTO [P:Main-Copy.accdb].DEST2
SELECT *
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCEmyServer;database=dbName;UID=XX;PWD=***].SOURCE1;
生成表查询(假设不存在先前的表,否则需要DROP TABLE ...
(
SELECT *
INTO [P:Main-Copy.accdb].DEST2
FROM [ODBC;DRIVER={SQL Server};Server=INSTANCEmyServer;database=dbName;UID=XX;PWD=***].SOURCE1;
Robert,
是否要复制数据?如果不是,那么简单地将表附加到第二个数据库(在您的示例中(是一种选择吗?在这种情况下,数据永远不会移动到 Access 数据库中,而是在请求时提取(即双击数据库容器中的表(。如果表附加到第二个数据库中,则可以运行"生成表"查询将数据带到本地,这将是一个步骤。
您还可以将数据从 SQL Server 推送到数据库,前提是 SQL Server 可以访问正确的数据库路径。
我以稍微圆润的方式解决了这个问题
在第一个数据库中使用它。在外部数据库中调用 sub
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "DATABASE PATH", False
appAccess.Run "ImportTableToExternalDB", "Clients"
Set appAccess = Nothing
以及外部数据库中的此方法。哪个进行实际转移
Public Sub ImportTableToExternalDB(TableName As String)
DoCmd.TransferDatabase acImport, "ODBC Database", _
"ODBC Connection String" _
, acTable, TableName, TableName, False, True
End Sub
感谢大家的帮助
编辑:我决定采用Parfait的答案,因为它在各个方面都更简单,更高效。