Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема при добавлении записей 
V
    Опции темы
Dark Wanderer
Дата 5.4.2006, 19:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



У меня есть две таблицы. Связь между ними один ко многим, в качестве БД использую Access, доступ осуществляется при помощи ADO. Создал форму для занесения данных счёт-фактуры(плательщик,банк...). В первую таблицу надо занести данные о фирмах(master), во вторую товары(detail). Проблема состоит в том, что товары я не могу добавлять до того, пока я не окончу редактировать первую таблицу
т.к. вторая таблица должна получить код первой таблицы. Необходимо именно синхронно вносить записи.
--------------------
  
PM MAIL   Вверх
Vit
Дата 5.4.2006, 22:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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
PM MAIL WWW ICQ   Вверх
Dark Wanderer
Дата 5.4.2006, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



Цитата

писать как для клиент-сервера

Т.е. использовать clientdataset?
Прошу прощения за мою тупость, но каким образом при нажатии на кнопку "сохранить" (см. рисунок) добавить данные и в master(не могу понять почему код не генерируется в состоянии insert), а потом в detail.

Это сообщение отредактировал(а) Dark Wanderer - 6.4.2006, 14:24

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  1.gif 48,81 Kb
--------------------
  
PM MAIL   Вверх
Vit
Дата 6.4.2006, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Цитата(Dark Wanderer @ 5.4.2006, 13:07 Найти цитируемый пост)
.е. использовать clientdataset?


Не обязательно, clientdataset это трёхзвенная архитектура. Обычные компоненты...

Цитата(Dark Wanderer @ 5.4.2006, 13:07 Найти цитируемый пост)
но каким образом при нажатии на кнопку "сохранить" (см. рисунок) добавить данные и в master(не могу понять почему код не генерируется в состоянии insert), а потом в detail.


Путём выполнения 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
PM MAIL WWW ICQ   Вверх
Dark Wanderer
Дата 6.4.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



А можно простой пример запроса по моей теме?
таблица А (ID_A,NAME) ID_A - ключевое (master)
таблица B (ID_B,ID_A,NUMBER) ID_B- ключевое (detail)
Связь- один ко многим.
Я заполняю свои edit'ы и grid, нажимаю "сохранить"...
Как может выглядеть такой запрос запрос?
--------------------
  
PM MAIL   Вверх
Dark Wanderer
Дата 7.4.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



Ну кто-нибудь. Пожайлуста...
--------------------
  
PM MAIL   Вверх
Alex
Дата 15.4.2006, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Мда... Sql мил человек нужно учить...

Пример добавления:
Код

-- Мастер таблица
Insert into таблица_А (ID_A,NAME) values (1, 'имя');

-- Детайл таблица
Insert into таблица_B (ID_B,ID_A,NUMBER) values (2, 1, 3);


Каждый и з приведенных запросов должен выполняться в AdoQuery отдельно. А если идти в обще правильно, то они должны выполняться в рамках отдельной транзакции, которая открывается перед выполнением запроса на добавление в master таблицу и подтверждается после успешного добавления в detail, в случаи возникновения ошибки отменяются изменения внесенные в результате добавления. Единственное я не знаю как Access работает с транзакциями (нет у меня опыта работы с этой БД).

Что касается предложения Вита не использовать db компоненты для ввода информации это с моей точки зрение 100% правильное решение, т.к. по мимо описанной вами ситуации существует понятие грамотной обработки ошибок, как ее построить на DB компонентах лично для меня остается загадкой до сих пор.


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Dark Wanderer
Дата 15.4.2006, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 25.10.2004
Где: Кишинёв

Репутация: нет
Всего: нет



Alex, за запрос- спасибо!
Цитата

не использовать db компоненты для ввода информации

Понял. Тему можно считать закрытой.
--------------------
  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0506 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.