Удаление из составной таблицы

Форум посвящён работе с базами данных в .NET.

Модератор: Ramzes

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Удаление из составной таблицы

Сообщение dr.MIG » 16.02.2009 (Пн) 22:22

Чтобы было понятнее приведу упрощённый пример. Есть две таблицы -- Objects (объект) и Materials (материалы, каждый из которых "лежит" на каком-то объекте):

Objects
id | name_object

Materials
id | name_material | id_object

В гриде информация должна отображаться в виде:
Materials.id | Materials.name_material | Objects.name_object

Для этого кидаю на форму DataAdapter, в QueryBuilder'e добавляю обе таблицы, ставлю связь Materials.id_object <---> Objects.id, отмечаю необходимые поля.

В другом гриде отображается таблица Object. Для неё так же создан DataAdapter. Должна быть возможность удалять из неё записи. С этим проблем не возникает. Однако, при удалении записи из таблицы Object надо в таблице Materials грохнуть все записи, id_object которых равен id удаляемой записи.

Как с точки зрения ADO.Net это правильно реализовать?
Код: Выделить всё
'в var_id_object у нас значение id_object удаляемой записи
Dim table As DataTable = MyDataSet.Materials
Dim rows() As DataRow = table.Select("[id_object]=" & var_id_object)
For i As Integer = 0 To rows.GetUpperBound(0)
     'записи перебираем так, удаление, естественно не работает... Какая должна быть DeleteCommand и правильный ли подход к удалению?
     rows(i).Delete()
Next i
Salus populi suprema lex

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Удаление из составной таблицы

Сообщение dr.MIG » 17.02.2009 (Вт) 21:28

Т.е. команду удаления я написал, но понимаю, что что-то не то, а именно -- я написал "DELETE * FROM Materials WHERE id_material=?".
После удаления с помощью этой команды пробую обновить DataAdapter (который для сводной таблицы, для которого как раз и устанавливал эту DeleteCommand). Получаю ошибку "Нарушение параллелизма: DeleteCommand затронула 0 из ожидаемых 1 записей." Впринципе это логично -- как я понимаю, я удалил Materials.id и Materials.name_material, но не затронул Objects.name_object из этого DataAdapter.
Где вообще можно почитать про работу с подобными таблицами, полученными из n-ного количества других таблиц? Неужели придётся напрямую удалять записи, выполняя соответствующие запросы напрямую к базе данных, а потом перегружать таблицы в DataSet?
Salus populi suprema lex

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Re: Удаление из составной таблицы

Сообщение dr.MIG » 18.02.2009 (Ср) 17:19

Решил проблему просто созданием отдельного адаптера для таблицы Materials. Т.е. всего получилось три адаптера -- два отдельных для каждой таблицы и третий, который выводит результирующую таблицу в DataGrid. При удалении просто обновляю два адаптера для отдельных таблиц и перегружаю информацию в результирующий, чтобы изменения отобразились.
Salus populi suprema lex

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4256
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Удаление из составной таблицы

Сообщение iGrok » 18.02.2009 (Ср) 22:20

Похожую траблу на VB6 решал точно так же. И другого способо, честно говоря, не вижу.
label:
cli
jmp label


Вернуться в ADO.NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList