我正在尝试从一个主表和另外两个子表中复制数据。当我在主表中选择一个记录时,我将该表中的所有字段复制到另一个表中。 (表1从ADOQuery复制所选记录)
procedure TForm1.copyButton7Click(Sender: TObject);
SQL.Clear;
SQL.Add('SELECT * from ADoquery');
SQL.Add('Where numeracao LIKE ''%'+NInterv.text);// locate record selected in Table1 NInterv.text)
Open;
// iniciate copy of record´s
begin
while not tableADoquery.Eof do
begin
Table1.Last;
Table1.Append;// how to append if necessary!!!!!!!!!!
Table1.Edit;
Table1.FieldByName('C').Value := ADoquery.FieldByName('C').Value;
Table1.FieldByName('client').Value := ADoquery.FieldByName('client').Value;
Table1.FieldByName('Cnpj_cpf').Value := ADoquery.FieldByName('Cnpj_cpf').Value;
table1.Post;
table2.next;///
end;
end;
//如何同时从TableChield_1和TableChield_2字段更新TableChield,TableChield1?
对子表执行相同操作
TableChield< = TableChield_1
TableChield1< = TableChield_2
感谢
答案 0 :(得分:1)
这些字段将同时更新。当您调用post时执行实际更新(或者甚至不是,这取决于批量更新是打开还是关闭)。
但请重新考虑你的逻辑。使用SQL语句(INSERT)将数据插入另一个表
会更有效SQL.Clear;
SQL.Add('INSERT INOT TABLE_1(C, client, Cnpj_cpf)');
SQL.Add('VALUES(:C, :client, :Cnpj_cpf)');
然后只需在循环中填充值。
SQL.Parameters.ParamByName('C').Value := ADoquery.FieldByName('C').Value;
SQL.Parameters.ParamByName('client').Value := ADoquery.FieldByName('client').Value;
SQL.Parameters.ParamByName('Cnpj_cpf').Value := ADoquery.FieldByName('Cnpj_cpf').Value;
SQL.ExecSQL;
如果数据可以在目标表格中,您也可以执行更新 - 插入模式。
喜欢这个:
if SQL.ExecSQL = 0 then
begin
// no records were update, do an insert
end;
并且表示您正在将数据从表1复制到表2可能是设计缺陷的标志。但我不能肯定地说,不知道更多。无论如何,数据重复永远不会好。
答案 1 :(得分:0)
我相信提问者正在考虑数据完整性,这意味着,确保只更新所有表或不更新...
我知道通过安全性实现此目的的方法是在转换中使用SQL命令执行所有这些更新(或插入,a.s.o。)。