gpt4 book ai didi

delphi - 绝对数据库批量移动

转载 作者:行者123 更新时间:2023-12-03 15:55:05 25 4
gpt4 key购买 nike

我想使用批处理组件来归档表中的一些旧记录。我查看了 Ace 组件网站上的示例,但我不确定如何使用它。命令是:

DestinationTable.BatchMove(SourceTable,TABSBatchMoveType(bmtAppend));

对于该任务,我打算使用两个日期时间选择器。因此,查询将类似于带有参数:

SELECT * from MYTABLE where DATE BETWEEN :a1 and :a2
ABSTQuery1.Parameters.ParamByName ('a1').AsDate := DateTimePicker1.Date;
ABSTQuery1.Parameters.ParamByName ('a2').AsDate := DateTimePicker2.Date;
ABSQuery.ExecSql;

如何将查询与batchmove 命令合并?我希望所有检索到的记录从源表移动到目标表。

最佳答案

Absolute Database 的 BatchMove 似乎是根据旧的 BDE TBatchMove 建模的,它需要两个 TTable 组件; IIRC,它不适用于 TQuery,但我可能记错了。 (BDE 已被弃用十多年了,自 Delphi 1 以来我就没有使用过它。)

不过,您不需要BatchMove。您可以使用单个查询来完成这一切(为简洁起见,省略了异常处理):

// Copy rows into destination
ABSTQuery1.SQL.Text := 'INSERT INTO DestTable'#32 +
'(SELECT * from MYTABLE where DATE BETWEEN :a1 and :a2)';
ABSTQuery1.Parameters.ParamByName ('a1').AsDate := DateTimePicker1.Date;
ABSTQuery1.Parameters.ParamByName ('a2').AsDate := DateTimePicker2.Date;
ABSTQuery1.ExecSql;
ABSTQuery1.Close;

// Remove them from source (you said "move", after all)
ABSTQuery1.SQL.Text := 'DELETE FROM MyTable'#32 +
`WHERE Date BETWEEN :a1 and :a2';
ABSTQuery1.Parameters.ParamByName ('a1').AsDate := DateTimePicker1.Date;
ABSTQuery1.Parameters.ParamByName ('a2').AsDate := DateTimePicker2.Date;
ABSTQuery1.ExecSql;
ABSTQuery1.Close;

将第一个 SQL 语句中的 DestTable 替换为目标表的名称。

更多信息请参见绝对数据库on-line manual

我没有使用过绝对数据库,但如果他们的 SQL 支持包括脚本(我将把这项研究留给您 - 上面的文档链接)和多个语句,您可以一次性完成:

// Note addition of `;` at end of each SQL statement
// and change in param names for second statement.
// Some DBs will allow you to just use one pair, and
// set the value for each once. Some require setting
// each twice, and some require unique param names.
// Check the documentation for Absolute DB.
//
ABSTQuery1.SQL.Text := 'INSERT INTO DestTable'#32 +
'(SELECT * from MYTABLE where DATE BETWEEN :a1 and :a2);'
'DELETE FROM MyTable WHERE Date BETWEEN :d1 and :d2;';
ABSTQuery1.Parameters.ParamByName ('a1').AsDate := DateTimePicker1.Date;
ABSTQuery1.Parameters.ParamByName ('a2').AsDate := DateTimePicker2.Date;

// New param names for second pass
ABSTQuery1.Parameters.ParamByName ('d1').AsDate := DateTimePicker1.Date;
ABSTQuery1.Parameters.ParamByName ('d2').AsDate := DateTimePicker2.Date;
ABSTQuery1.ExecSQL;
ABSTQuery1.Close;

关于delphi - 绝对数据库批量移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10906274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com