powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавление записей в связанные таблицы
11 сообщений из 11, страница 1 из 1
Добавление записей в связанные таблицы
    #38524618
Vad74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите разобраться новичку. Задачка стандарная: из формы с гридом основной таблицы по нажатию кнопки "Добавить" открыть форму для добавления записи в основную таблицу и записей в связанную таблицу. Вроде в msdn написано что для этих целей служит команда tableAdapterManager.UpdateAll. Но она работает, только если добавляешь информацию в основную таблицу. Как только сразу заносишь инфу в основную и связанные таблицы - выдает ошибку: "Невозможно добавление или изменение записи. Для обеспечения целостности данных необходимо наличие связанной записи в таблице 'tab1'."
Вроде UpdateAll служит для одновременного обновления связанных таблиц, или на добаление записи он не работает?
Как тогда правильно добавлять записи в связанные таблицы?

Если можно, выложите пример добавления записей в основную и связанные таблицы.
Или подскажите что я делаю не так в свое тестовом проекте (проект во вложении).
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38526491
Vad74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извините если я задал глупый вопрос, но я не пойму: это на столько примитивно что все молчат, или это на столько сложно, что в в кратце не опишешь?
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38526978
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vad74, Почитай книгу "Microsoft ADO.NET", автор Дэвид Сеппа. В ней исключительно подробно и толково расписано.
Я не вижу причин для того, чтобы использовать адаптер для обновлений многих таблиц, а не одной, кроме маниакального стремления запутаться самому и запутать любого, кто заглянет потом внутрь реализации такого адаптера.
Мои советы таковы:
1) делай только адаптеры, которые могут обслужить одну конкретную таблицу (я такие адаптеры создаю при датасете в соответствии с его таблицами)
2) для заполнения датасета создай метод Fill, который будет вызывать последовательно и в нужном тебе порядке методы Fill твоих адаптеров для каждой таблицы датасета, которую необходимо заполнить
3) для связанных обновлений создай для датасета метод Update, который будет вызывать последовательно и в нужном тебе порядке методы Update твоих адаптеров для каждой таблицы датасета, которую необходимо апдейтить
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527189
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vad74Вроде UpdateAll служит для одновременного обновления связанных таблиц, или на добаление записи он не работает?Работает.
Vad74Как тогда правильно добавлять записи в связанные таблицы?"Правильно" - чтобы не нарушались ограничения. В Вашем случае - ссылочная целостность.
Vad74Если можно, выложите пример добавления записей в основную и связанные таблицы.
Или подскажите что я делаю не так в свое тестовом проекте (проект во вложении).У вас мастер-таблица в датасете после сохранения не содержит актуальные значения автоинкрементного первичного ключа, чтобы они могли быть применены в дочерней.

Смотреть тут
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527208
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IAppleVad74, Почитай книгу "Microsoft ADO.NET", автор Дэвид Сеппа. В ней исключительно подробно и толково расписано.
Я не вижу причин для того, чтобы использовать адаптер для обновлений многих таблиц, а не одной, кроме маниакального стремления запутаться самому и запутать любого, кто заглянет потом внутрь реализации такого адаптера.
Мои советы таковы:
1) делай только адаптеры, которые могут обслужить одну конкретную таблицу (я такие адаптеры создаю при датасете в соответствии с его таблицами)
2) для заполнения датасета создай метод Fill, который будет вызывать последовательно и в нужном тебе порядке методы Fill твоих адаптеров для каждой таблицы датасета, которую необходимо заполнить
3) для связанных обновлений создай для датасета метод Update, который будет вызывать последовательно и в нужном тебе порядке методы Update твоих адаптеров для каждой таблицы датасета, которую необходимо апдейтить"Типизированный" датасет так и работает.
Кроме этого, использование TableAdapterManager.UpdateAll() позволяет не беспокоиться каждый раз при сохранении данных о правильном порядке вызова Update для всех связанных адаптеров.

Но при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных.
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527282
Vad74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mvУ вас мастер-таблица в датасете после сохранения не содержит актуальные значения автоинкрементного первичного ключа, чтобы они могли быть применены в дочерней.

Смотреть тут

Т.е. насколько я понял, для работы с БД Access нужно вручную добавить запись в table1, получить значение ключа, и затем подставить его в добавляемую запись в table2?
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527388
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sphinx_mvНо при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных.
А при использовании "нетипизированных" с конкретно базой access этой проблемы нету ?
Можно Ваш пример реализации адаптера для двух связанных талиц посмотреть ? В смысле как там UpdateCommand выглядит.
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527503
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IApplesphinx_mvНо при использовании "типизированных" датсета с конкретно базой access существует проблема с получением обратно в приложение значений автоинкрементных первичных ключей после сохранения данных.
А при использовании "нетипизированных" с конкретно базой access этой проблемы нету ?Адаптеры таблиц, которые создаются в "типизированных" датасетах, НЕ предоставляют доступ к RowUpdated... И для работы "с конкретно базой access" (c) - это, таки, проблема... :)
IAppleМожно Ваш пример реализации адаптера для двух связанных талиц посмотреть ? В смысле как там UpdateCommand выглядит.Я не писал, что "один адаптер создается на несколько таблиц" - я писал про TableAdapterManager , который автоматически создается в дизайнере датасетов и который обрабатывает последовательность вызовов метода Update для адаптеров связанных таблиц.
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527603
Vad74
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, за ответы. Ситуация прояснилась. Для своей Access БД буду вручную получать ключ.
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527838
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vad74, Сеппа для Access советует SELECT @@IDENTITY, которая джолжна б вернуть последнее значение автоинкремента, сгенерированое на данном соединении на пару с использованием события RowUpdating у OleDbDataAdapter.
А что б изменения связанных таблиц в датасете каскадировались "сами" от родительской к дочерней необходимо кроме связей DataRelation в датасете устанавливать связь ForeignKeyConstraint у которого свойство Cascade выставить на Update и Delete.
...
Рейтинг: 0 / 0
Добавление записей в связанные таблицы
    #38527899
sphinx_mv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IAppleVad74, Сеппа для Access советует SELECT @@IDENTITY, которая джолжна б вернуть последнее значение автоинкремента, сгенерированое на данном соединении на пару с использованием события RowUpdating у OleDbDataAdapter.
А что б изменения связанных таблиц в датасете каскадировались "сами" от родительской к дочерней необходимо кроме связей DataRelation в датасете устанавливать связь ForeignKeyConstraint у которого свойство Cascade выставить на Update и Delete.Ниачем... Ваабще...
Потому, что тест-проект ТСа Вы даже не смотрели, а приведеные ссылки не читали - иначе Вам не пришлось бы повторяться в очевидностях.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Добавление записей в связанные таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]