![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Совет нужен [D6, IB6.x]
Max Zyuzin © (2002-10-30 14:46:00)Приветствую еще раз всех.
Вот задумался я тут над одной штуковиной.
Есть у меня две таблички связаные один к многим. Допустим теперь, что добавляю я запись к мастер-таблице, появляется у меня окошечко...
В нем я бы хотел сделать возможность сразу добавить записи и для связаной таблици. Но дело в том, что пока я не нажму на фомочке кнопочку принять, у меня запись из мастер-таблицы в базу не добавится, и не понятно мне как добавлять записи сразу во вторую таблицу (внешний ключ к чему прикручивать не ясно).
Решение, которое я вижу - создать в мастер-таблице "техническую" запись (которую вообще не отображать при просмотрах), от которой только потребуется его ID, что бы можно было добавлять в связанную таблицу с этим ID. Ну а после нажатия кнопки уже обнавлять записи из связанной таблици с этим "техническим" ID на новый полученый после добавления из мастер-таблицы.
Но этот способ мне не очень нравится главным образом из за этой "левой" записи.
Я почти уверен, почти все сталкивались с подобной проблеммой. Как кто решал, поделитесь?
Max Zyuzin (2002-10-30 16:44:00) [1]>stone © (30.10.02 14:58)
Сделал по вашему совету, у меня получилось... довольно изящно. спасибо :)
Johnmen (2002-10-30 16:31:00) [2]Без создания - вар.2. от (30.10.02 15:27)
Хотя он более громоздкий...
Max Zyuzin (2002-10-30 15:53:00) [3]>Johnmen © (30.10.02 15:50)
Да то что надо все делать в одной транзакции я сразу понял, я думал как без создания этой самой записи обойтись :)
Johnmen (2002-10-30 15:50:00) [4]>Max Zyuzin © (30.10.02 15:33)
Это не способ решения проблемы (stone © (30.10.02 14:58)), это правильное дополнение (чтобы др.клиенты не видели твоей "технической" записи).
:)
Max Zyuzin (2002-10-30 15:33:00) [5]>Johnmen © (30.10.02 15:27)
1. Ну это само сабой разумеющееся.
2. Ну никак не заполнить ведь :( ведь нужно заполнить поле FK хоть чем то, если запонить чем нить не существующим (нулем например), начинает сиьлно ругаться на ссылочную целостность мол нету такой записи у тебя в мастере.
Сейчас реализовываю способ, предложенный stone © (30.10.02 14:58) о результатах сообщю дополнительно :)
Johnmen (2002-10-30 15:27:00) [6]Общие соображения :
1. Конечно же в рамках одной тр-ии (stone © (30.10.02 14:58))
2. Для редактируемых запросов использовать IBDataSet вместо IBQuery.
Теперь по сути :
вар.1. Тобой указанный.
вар.2. Заполняя детейл НД, не выполняем никаких запросов на изменение данных, и только при нажатии кнопы вставляем мастера и затем детали.
(Оба использую, других, в рамках поставленного вопроса не знаю, да и нет их)
Max Zyuzin (2002-10-30 15:03:00) [7]>stone © (30.10.02 14:58)
Угу... только после этого придется еще раз апдейтить мастер таблицу... в смысле если по ходу он еще и поля какие заполнит... В общем спасибо, мысль хорошая.
>Johnmen © (30.10.02 14:59)
1. Исественно :) есть
2. IBDataBase, IBTransaction, IBQuery
Johnmen (2002-10-30 14:59:00) [8]Небольшое уточнение -
1. на мастере есть PK и на детейле соответствующий FK ?
2. каковы компоненты доступа ?
stone (2002-10-30 14:58:00) [9]Объяви начало транзакции
Запиши в базу запись в мастер-таблицу
Потом спокойно пиши хоть во все связанные сразу
После всего завершай транзакцию