|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Добрый день! Помогите разобраться новичку. Задачка стандарная: из формы с гридом основной таблицы по нажатию кнопки "Добавить" открыть форму для добавления записи в основную таблицу и записей в связанную таблицу. Вроде в msdn написано что для этих целей служит команда tableAdapterManager.UpdateAll. Но она работает, только если добавляешь информацию в основную таблицу. Как только сразу заносишь инфу в основную и связанные таблицы - выдает ошибку: "Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице 'tab1'." Вроде UpdateAll служит для одновременного обновления связанных таблиц, или на добаление записи он не работает? Как тогда правильно добавлять записи в связанные таблицы? Если можно, выложите пример добавления записей в основную и связанные таблицы. Или подскажите что я делаю не так в свое тестовом проекте (проект во вложении). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2014, 16:06 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Извините если я задал глупый вопрос, но я не пойму: это на столько примитивно что все молчат, или это на столько сложно, что в в кратце не опишешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 08:17 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Vad74, Почитай книгу "Microsoft ADO.NET", автор Дэвид Сеппа. В ней исключительно подробно и толково расписано. Я не вижу причин для того, чтобы использовать адаптер для обновлений многих таблиц, а не одной, кроме маниакального стремления запутаться самому и запутать любого, кто заглянет потом внутрь реализации такого адаптера. Мои советы таковы: 1) делай только адаптеры, которые могут обслужить одну конкретную таблицу (я такие адаптеры создаю при датасете в соответствии с его таблицами) 2) для заполнения датасета создай метод Fill, который будет вызывать последовательно и в нужном тебе порядке методы Fill твоих адаптеров для каждой таблицы датасета, которую необходимо заполнить 3) для связанных обновлений создай для датасета метод Update, который будет вызывать последовательно и в нужном тебе порядке методы Update твоих адаптеров для каждой таблицы датасета, которую необходимо апдейтить ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 14:22 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Vad74Вроде UpdateAll служит для одновременного обновления связанных таблиц, или на добаление записи он не работает?Работает. Vad74Как тогда правильно добавлять записи в связанные таблицы?"Правильно" - чтобы не нарушались ограничения. В Вашем случае - ссылочная целостность. Vad74Если можно, выложите пример добавления записей в основную и связанные таблицы. Или подскажите что я делаю не так в свое тестовом проекте (проект во вложении).У вас мастер-таблица в датасете после сохранения не содержит актуальные значения автоинкрементного первичного ключа, чтобы они могли быть применены в дочерней. Смотреть тут ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 16:16 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
IAppleVad74, Почитай книгу "Microsoft ADO.NET", автор Дэвид Сеппа. В ней исключительно подробно и толково расписано. Я не вижу причин для того, чтобы использовать адаптер для обновлений многих таблиц, а не одной, кроме маниакального стремления запутаться самому и запутать любого, кто заглянет потом внутрь реализации такого адаптера. Мои советы таковы: 1) делай только адаптеры, которые могут обслужить одну конкретную таблицу (я такие адаптеры создаю при датасете в соответствии с его таблицами) 2) для заполнения датасета создай метод Fill, который будет вызывать последовательно и в нужном тебе порядке методы Fill твоих адаптеров для каждой таблицы датасета, которую необходимо заполнить 3) для связанных обновлений создай для датасета метод Update, который будет вызывать последовательно и в нужном тебе порядке методы Update твоих адаптеров для каждой таблицы датасета, которую необходимо апдейтить"Типизированный" датасет так и работает. Кроме этого, использование TableAdapterManager.UpdateAll() позволяет не беспокоиться каждый раз при сохранении данных о правильном порядке вызова Update для всех связанных адаптеров. Но при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 16:24 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
sphinx_mvУ вас мастер-таблица в датасете после сохранения не содержит актуальные значения автоинкрементного первичного ключа, чтобы они могли быть применены в дочерней. Смотреть тут Т.е. насколько я понял, для работы с БД Access нужно вручную добавить запись в table1, получить значение ключа, и затем подставить его в добавляемую запись в table2? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 17:06 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
sphinx_mvНо при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных. А при использовании "нетипизированных" с конкретно базой access этой проблемы нету ? Можно Ваш пример реализации адаптера для двух связанных талиц посмотреть ? В смысле как там UpdateCommand выглядит. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 18:08 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
IApplesphinx_mvНо при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных. А при использовании "нетипизированных" с конкретно базой access этой проблемы нету ?Адаптеры таблиц, которые создаются в "типизированных" датасетах, НЕ предоставляют доступ к RowUpdated... И для работы "с конкретно базой access" (c) - это, таки, проблема... :) IAppleМожно Ваш пример реализации адаптера для двух связанных талиц посмотреть ? В смысле как там UpdateCommand выглядит.Я не писал, что "один адаптер создается на несколько таблиц" - я писал про TableAdapterManager , который автоматически создается в дизайнере датасетов и который обрабатывает последовательность вызовов метода Update для адаптеров связанных таблиц. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 20:19 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Спасибо, за ответы. Ситуация прояснилась. Для своей Access БД буду вручную получать ключ. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2014, 22:47 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
Vad74, Сеппа для Access советует SELECT @@IDENTITY, которая джолжна б вернуть последнее значение автоинкремента, сгенерированое на данном соединении на пару с использованием события RowUpdating у OleDbDataAdapter. А что б изменения связанных таблиц в датасете каскадировались "сами" от родительской к дочерней необходимо кроме связей DataRelation в датасете устанавливать связь ForeignKeyConstraint у которого свойство Cascade выставить на Update и Delete. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 10:35 |
|
Добавление записей в связанные таблицы
|
|||
---|---|---|---|
#18+
IAppleVad74, Сеппа для Access советует SELECT @@IDENTITY, которая джолжна б вернуть последнее значение автоинкремента, сгенерированое на данном соединении на пару с использованием события RowUpdating у OleDbDataAdapter. А что б изменения связанных таблиц в датасете каскадировались "сами" от родительской к дочерней необходимо кроме связей DataRelation в датасете устанавливать связь ForeignKeyConstraint у которого свойство Cascade выставить на Update и Delete.Ниачем... Ваабще... Потому, что тест-проект ТСа Вы даже не смотрели, а приведеные ссылки не читали - иначе Вам не пришлось бы повторяться в очевидностях. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2014, 11:18 |
|
|
start [/forum/topic.php?fid=20&msg=38527899&tid=1403412]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
others: | 318ms |
total: | 471ms |
0 / 0 |