【问题标题】:Insert query result from one MS-Access database to another using ADO使用 ADO 将查询结果从一个 MS-Access 数据库插入另一个
【发布时间】:2017-05-16 11:03:53
【问题描述】:

如果有人给我关于如何将查询结果从一个数据库放到另一个数据库的建议,我将不胜感激。

我可以在一个数据库上执行选择查询,但是如何在另一个数据库中移动/保存该结果(数据)?我在本地 *.mdb 和 *.accdb 数据库上使用 Rad Studio - Delphi 中的 ADO 组件。有小费吗 ?感谢大家的回复。

【问题讨论】:

  • 你能贴出你尝试了什么吗?以及示例数据表结构
  • 目标数据库是否也是 ms-access(我假设是)?目标数据库/表是否存在?它们的结构相同吗?源是否必须首先来自 ADO 数据集/查询?请提供更多详细信息。

标签: database delphi ms-access ado


【解决方案1】:

您可以对用于选择要复制的数据行的 SQL 使用特殊语法来执行此操作,如下所示:

我有第一个数据库d:\aaad7\ado\test.mdb,其中包含一个Access 表ATable,其中包含一个字符列ANAME。我还有第二个空数据库d:\aaad7\ado\dest.mdb

以下代码将表ATable复制到第二个数据库。

  AdoQueryCopy.SQL.Text := 'SELECT * INTO ATable IN "D:\aaad7\ado\dest.mdb" FROM ATable';
  AdoQueryCopy.ExecSql;

其中AdoQueryCopy 是一个TADOQuery,它有一个指向d:\aaad7\ado\test.mdb 的连接字符串。

重要如果要在d:\aaad7\ado\dest.mdb中打开ATable的副本,需要提前关闭AdoQueryCopy正在使用的连接,否则很可能会报错某些 ADO 对象不能返回多个结果集。我不确定,但我认为这可能是因为AdoQueryCopy.ExecSQL 导致使用插入的行创建临时 ADO 数据集。

可以通过添加WHERE 子句来选择复制到第二个数据库中ATable 的行。

【讨论】:

  • 您的建议帮助我解决了我的问题,非常感谢!
  • 在这种情况下,请点击我回答左上角的“勾号”图标“接受”它。
【解决方案2】:

如果您是 delphi 新手 放置一个 TStringgrid TAdo 并将所有数据从 mdb 获取到 Gridcells 稍后关闭来自 mdb.and 的所有 ado 连接并连接到第二个 Db .accdb。 idk为什么是accdb? 并开始从网格到 accdb 的 adotable 插入数据。 如果您的 ado 无法连接 accdb,请创建第一个 mdb 的副本并尝试访问以另存为“.mdb”。 //如果你是专业人士,有一个 //ADOTable1.SaveToFile();

【讨论】:

  • 如果您要逐个字段地复制记录,为什么还要使用可视化组件呢?您可以简单地将每个字段的 Value 从一个数据集复制到另一个数据集。但这仍然给您留下了创建与源表具有相同结构的目标表的问题,您的答案没有解决。
  • @MartynA, “但这仍然给您留下了创建与源表结构相同的目标表的问题” - OP 没有提到这个事实:/据我所知,目标表可能已经存在。由于 OP 没有提供详细信息,我没有动力回答。
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2017-03-30
  • 2018-11-14
  • 2017-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多