【问题标题】:MS Access DoCmd.CopyObject to copy a table from another database into the current oneMS Access DoCmd.CopyObject 将表从另一个数据库复制到当前数据库
【发布时间】:2020-12-09 21:02:43
【问题描述】:

MS Access VBA 中 DoCmd.CopyObject 命令的语法是:

CopyObject(DestinationDatabase, NewName, SourceObjectType, 源对象名称)

怎么没有SourceDatabase参数? ?

我在另一个单独的存储数据库中保存了一个表的多个特定副本,每个实例都用一个数字作为名称的后缀来标识。然后我试图能够在需要时将特定实例收回到当前数据库原始表中,但是如果与当前数据库不同,CopyObject 不允许您指定源数据库。

如果 CopyObject 可以将表复制到另一个地方,为什么它不能从您放置它的地方复制回 CurrentDb?就在我自己的设置中,有两个不同的 .accdb 数据库

它工作正常,从远程表中打开一个记录集,如下所示: 设置 rsPrepared = dbsStorage.TableDefs(sTableName).OpenRecordset 其中 dbsStorage 是一个使用 OpenDatabase(..) 初始化的数据库变量,带有存储数据库的路径和名称。但是我无法从记录集中制作表格。请告诉我是否有办法在 SQL INSERT INTO 类型查询的 FROM 子句中使用打开的记录集?

【问题讨论】:

  • 该命令将在当前数据库上运行到外部目标数据库。但是,请重新考虑您的流程。 每个以数字作为名称后缀的实例并不是最佳的数据库设计。您似乎将 MS Access 视为数据转储的应用程序工具(更类似于 Excel),而不是表以标准化参照完整性相关的关系数据库。考虑在单个表中跟踪具有日期/时间字段的数据实例。

标签: sql vba ms-access


【解决方案1】:

MS Access 中的几乎每个操作查询(包括生成表)都允许使用带括号的路径引用以纯 SQL 访问外部 Access 数据库。 (在关系模型中谨慎使用。)

SELECT Col1, Col2, Col3 
INTO [C:\Path\To\External\DB.accdb].[newTable]
FROM mylocalTable
INSERT INTO [C:\Path\To\External\DB.accdb].[externalTable] (Col1, Col2, Col3)
SELECT Col1, Col2, Col3 
FROM mylocalTable
UPDATE [C:\Path\To\External\DB.accdb].[externalTable] tgt
INNER JOIN mylocalTable src
   ON tgt.PK = src.PK
SET tgt.Col1 = src.Col1,
    tgt.Col2 = src.Col2,
    tgt.Col3 = src.Col3 

【讨论】:

  • 这很好,但是你也可以在 FROM 子句中这样做吗?就像我想做 INSERT INTO mylocaltable 选择所有字段 FROM [C:\Path\To\External\DB.accdb].[externalTable]
  • 当然可以!试试看!
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
相关资源
最近更新 更多