我想在 Delphi 中的两个不同数据库之间进行数据传输。我无法使用 TBachmove,因为要传输的列是由用户选择的。
我尝试集成此代码,但我不知道如何将其与不同的数据库集成。
INSERT INTO table_destination ( colonne1, colonne2, colonne3, ..., colonneN )
SELECT
colonne3,
colonne8,
NULL,
...,
colonne137,
...,
colonneN
FROM table_source;
最佳答案
I can not work with TBachmove because the columns that are going to be transferred are selected by the user.
实际上,即使在 D7 中,只要不涉及 Blob 列,您也应该能够很容易地做到这一点。步骤:
创建指向 MySQL 目标数据库的 ODBC 系统 DSN。
使用 TTable Table1 创建一个 Delphi 项目,该项目将打开您的 Paradox 表,创建一个 TQuery Query1,该项目使用与 Paradox Table1 相同的 BDE 别名, 使用步骤 1 中的 ODBC 别名的 TTable Table2 和 BatchMove 组件。为 Table2 指定一个 TableName,这是您希望 MySQL 表的名称。
为用户提供一个 GUI 方法来选择要复制的列。
当用户选择要复制的列时,创建一条 SQL 语句以从 Paradox 表中选择这些列,将其加载到 Query1 中并对其调用 Open。
将 Query1 设置为 BatchMove1 的 Source,将 Table2 设置为 Destination,将 BatchMove 模式设置为
batCopy
。调用 BatchMove1.Execute。
应该可以了。
我第一次尝试使用“FishFacts”演示中的 Biolife.Db 表来测试这一点失败了,因为我收到了一个异常,提示 blob 大小无效。我的第二次尝试使用 Customer.Db 表,效果很好。
就 blob-size 问题而言,虽然我使用 BDE 已经 15 年多了,但 ISTR 发现有一个最大 blob-size 配置参数可以通过 BDE 管理员进行调整,并且有一个一种将其设置为“无最大值”的方法,可能是将其设置为 -1。
当前版本的 Delphi 包括 FireDAC 数据访问组件,其中包括不依赖于 BDE 的“现代”BatchMove 组件,但我认为 FireDAC 仅包含在 XE8 中的 Delphi 中。
关于mysql - 使用Delphi在两个不同数据库之间传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066741/