Удаление ADODataSet из объединенной таблицы

#sql #delphi #delphi-2009 #ado #tadodataset

#sql #delphi #delphi-2009 #ado #tadodataset

Вопрос:

У меня есть приложение Delphi, в котором я отображаю список игр, которые были воспроизведены из такого запроса:

 select  g.*, gt.id, gt.descr 
from GAMES g 
inner join game_types gt on gt.id = g.game_type
order by game_date DESC
  

Когда я нажимаю кнопку удаления в DBNavigator, объединенная запись из таблицы game_types также удаляется. Это проблема, потому что многие другие игры могут быть того же типа.

Что мне нужно сделать, чтобы удалить только игру, но не тип игры?

Ответ №1:

Вам необходимо использовать динамическое свойство Unique Table

 ADOQuery1.Properties['Unique Table'].Value := 'GAMES';
  

Из документации MSDN ADO

Если установлено динамическое свойство Unique Table, а набор записей является результатом выполнения операции объединения для нескольких таблиц, то метод Delete удалит только строки из таблицы, имя которой указано в свойстве Unique Table.

Комментарии:

1. Если вам нужно по-настоящему разобраться с вашими обновлениями, вы можете использовать компонент TUpdateSQL и назначить его UpdateObject вашего компонента запроса.

Ответ №2:

Вам необходимо установить свойство TADODataSet «Уникальная таблица» после открытия вашего набора данных.

 ADODataset.Properties['Unique Table'].Value := 'GAMES';