我想在Delphi中的两个不同数据库之间进行数据传输。我无法使用TBachmove,因为要转移的列由用户选择。
我尝试集成此代码,但我不知道如何使用不同的数据库对其进行整数。
INSERT INTO table_destination ( colonne1, colonne2, colonne3, ..., colonneN )
SELECT
colonne3,
colonne8,
NULL,
...,
colonne137,
...,
colonneN
FROM table_source;
答案 0 :(得分:2)
我无法使用TBachmove,因为要转移的列是由用户选择的。
实际上,即使在D7中,只要不涉及Blob列,您就可以非常轻松地完成此操作。步骤进行:
创建指向MySQL目标数据库的ODBC系统DSN。
使用TTable创建一个Delphi项目,Table1打开你的Paradox表,一个TQuery,Query1,它使用与你的Paradox Table1相同的BDE别名, TTable Table2,它使用步骤1中的ODBC别名和BatchMove组件。给Table2一个TableName,这就是你想要调用MySQL表的地方。
为用户提供gui方法,以选择要复制的列。
当用户选择要复制的列时,创建一个SQL语句以从paradox表中选择这些列,将其加载到Query1并在其上调用Open。
将Query1设置为BatchMove1的源,将Table2设置为Destination,将BatchMove模式设置为batCopy
。
调用BatchMove1.Execute。
应该这样做。
我第一次尝试使用" FishFacts"中的Biolife.Db表进行测试。演示失败,因为我有一个例外抱怨无效的blob大小。我的第二次尝试,使用Customer.Db表工作正常。
就blob-size问题而言,尽管自从我使用BDE以来它已经是15年以上,ISTR有一个最大的blob-size配置参数,可以通过BDE管理员调整,并且有将其设置为"无最大值"的方法,可能将其设置为-1。
当前版本的Delphi包括FireDAC数据访问组件,其中包括现代版本的#34; BatchMove组件不依赖于BDE,但我认为 FireDAC仅包含在XE8中的Delphi中。