2010-04-15 4 views
0

Я пытаюсь скопировать данные из одной главной таблицы и еще двух дочерних таблиц. Когда я выбираю одну запись в главной таблице, я копирую все поля из этой таблицы для другой. (Table1 копия ADOQuery выбранной записи)delphi Ado (mdb) записи обновления

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, TableChield1 от TableChield_1 и TableChield_2 полей в то же время?

сделать то же самое для дочерних таблиц TableChield < = TableChield_1
TableChield1 < = TableChield_2

благодаря

+0

Непонятно, что вы хотите. Попробуйте показать expexted от и до данных. – BennyBechDk

+0

Одним из наиболее эффективных способов является просто вставить непосредственно из select с помощью инструкций INSERT INTO SELECT. Гораздо более быстрый способ обновления таблиц от другого. – yozey

ответ

1

Поля все будут обновляться одновременно. Фактическое обновление выполняется, когда вы вызываете сообщение (или даже не тогда, это зависит от того, включено или выключено пакетное обновление).

Но, пожалуйста, передумайте свою логику. Было бы гораздо эффективнее использовать операторы 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; 

Вы также можете создать шаблон обновления - Вставить, если данные могут быть скопированы в целевую таблицу.

Like This:

if SQL.ExecSQL = 0 then 
begin 
    // no records were update, do an insert 
end; 

А также признак того, что вы копируете данные из таблицы 1 в таблице 2 может быть признаком ошибки проектирования. Но я не могу сказать это точно, не зная больше. Во всяком случае, дублирование данных никогда не бывает хорошим.

0

Я считаю, что спрашивающий думает о целостности данных, что означает, не гарантировать, что только все таблицы будут обновлены или никто ...

так, как я знаю, для достижения этой цели с безопасностью выполняет все эти обновления (или вставки, aso), используя команды SQL внутри перехода.

Смежные вопросы