delphi Ado(mdb)更新记录

时间:2010-04-15 20:45:49

标签: delphi ado records

我正在尝试从一个主表和另外两个子表中复制数据。当我在主表中选择一个记录时,我将该表中的所有字段复制到另一个表中。 (表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

感谢

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。)。