![]() |
|
|
![]()
|
|
| Dark Wanderer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 25.10.2004 Где: Кишинёв Репутация: нет Всего: нет |
У меня есть две таблицы. Связь между ними один ко многим, в качестве БД использую Access, доступ осуществляется при помощи ADO. Создал форму для занесения данных счёт-фактуры(плательщик,банк...). В первую таблицу надо занести данные о фирмах(master), во вторую товары(detail). Проблема состоит в том, что товары я не могу добавлять до того, пока я не окончу редактировать первую таблицу
т.к. вторая таблица должна получить код первой таблицы. Необходимо именно синхронно вносить записи. --------------------
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Никак... По крайней мере используя эту архитектуру. Detail можно добавить лишь когда Master существует. Это закон такой, примерно как "утром-стулья, вечером-деньги, можно и наоборот, но стулья вперёд". Советую отказаться от использования DB компонентов и писать как для клиент-сервера, это значительно упростит такие коллизии, ведь локально вы будете заполнять что угоднои как угодно, а запоминаться всё будет при нажатии кнопки, когда уже все необходимые данные заполнились.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Dark Wanderer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 25.10.2004 Где: Кишинёв Репутация: нет Всего: нет |
Т.е. использовать clientdataset? Прошу прощения за мою тупость, но каким образом при нажатии на кнопку "сохранить" (см. рисунок) добавить данные и в master(не могу понять почему код не генерируется в состоянии insert), а потом в detail. Это сообщение отредактировал(а) Dark Wanderer - 6.4.2006, 14:24 Присоединённый файл ( Кол-во скачиваний: 13 )
1.gif 48,81 Kb--------------------
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Не обязательно, clientdataset это трёхзвенная архитектура. Обычные компоненты... Путём выполнения SQL запросов -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Dark Wanderer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 25.10.2004 Где: Кишинёв Репутация: нет Всего: нет |
А можно простой пример запроса по моей теме?
таблица А (ID_A,NAME) ID_A - ключевое (master) таблица B (ID_B,ID_A,NUMBER) ID_B- ключевое (detail) Связь- один ко многим. Я заполняю свои edit'ы и grid, нажимаю "сохранить"... Как может выглядеть такой запрос запрос? --------------------
|
|||
|
||||
| Dark Wanderer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 25.10.2004 Где: Кишинёв Репутация: нет Всего: нет |
Ну кто-нибудь. Пожайлуста...
--------------------
|
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Мда... Sql мил человек нужно учить...
Пример добавления:
Каждый и з приведенных запросов должен выполняться в AdoQuery отдельно. А если идти в обще правильно, то они должны выполняться в рамках отдельной транзакции, которая открывается перед выполнением запроса на добавление в master таблицу и подтверждается после успешного добавления в detail, в случаи возникновения ошибки отменяются изменения внесенные в результате добавления. Единственное я не знаю как Access работает с транзакциями (нет у меня опыта работы с этой БД). Что касается предложения Вита не использовать db компоненты для ввода информации это с моей точки зрение 100% правильное решение, т.к. по мимо описанной вами ситуации существует понятие грамотной обработки ошибок, как ее построить на DB компонентах лично для меня остается загадкой до сих пор. -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
| Dark Wanderer |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 25.10.2004 Где: Кишинёв Репутация: нет Всего: нет |
Alex, за запрос- спасибо!
Понял. Тему можно считать закрытой. --------------------
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |