Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > update связанной таблицы


Автор: dize 22.10.2009, 17:34
Вопрос может глупый, но все же..
Код

procedure Tgroupz.Button6Click(Sender: TObject);
begin
ADOQ_dell.Close;
ADOQ_dell.SQL.Clear;
ADOQ_dell.SQL.Text:='UPDATE Dengi INNER JOIN groups ON Dengi.id_group=groups.id_group SET Dengi.id_group=null WHERE Dengi.Kod_klienta="'+query[1]+'"';
ADOQ_dell.ExecSQL;

sql:= 'DELETE group FROM groups WHERE groups.group="'+query[1]+'"';
    ADOQ_new.Close;
    ADOQ_new.SQL.Clear;
    ADOQ_new.SQL.Text:=sql;
    ADOQ_new.ExecSQL;
end;

Для удаления группы решил сначала убрать принадлежность входящих в нее элементов, т.е. всех Kod_klienta, путем присвоения полю id_group(связь один ко многим между таблицами groups и Dengi), по которому собственно и идет определение принадлежности к выбираемой группе из комбобокса. А только потом удаление самой группы, дабы не удалилась не только группа, но и все принадлежащие ей записи. 
Вопрос в том, почему эта конструкция не работает? Причем обновления поля id_group в таблице Dengi не происходит, а группы и все их содержимое удаляет.
P.S.: Насколько я знаю, можно это обойти отключением функции "каскадное обновление связанных полей", но интересует именно вариант с обновлением id_group.

Автор: Gudinya 22.10.2009, 17:57
В общем что то типа
Код

ADOQ_dell.SQL.Text:='UPDATE Dengi SET Dengi.id_group=null WHERE  Dengi.id_group in ( select groups.id_group  FROM groups WHERE groups.group="'+query[1]+'")';

Автор: dize 23.10.2009, 14:28
Gudinya, спасибо, заработало оО

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)