Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Вниз

Совет нужен   Найти похожие ветки 

 
Max Zyuzin   (2002-10-30 14:46) [0]

Приветствую еще раз всех.

Вот задумался я тут над одной штуковиной.
Есть у меня две таблички связаные один к многим. Допустим теперь, что добавляю я запись к мастер-таблице, появляется у меня окошечко...
В нем я бы хотел сделать возможность сразу добавить записи и для связаной таблици. Но дело в том, что пока я не нажму на фомочке кнопочку принять, у меня запись из мастер-таблицы в базу не добавится, и не понятно мне как добавлять записи сразу во вторую таблицу (внешний ключ к чему прикручивать не ясно).
Решение, которое я вижу - создать в мастер-таблице "техническую" запись (которую вообще не отображать при просмотрах), от которой только потребуется его ID, что бы можно было добавлять в связанную таблицу с этим ID. Ну а после нажатия кнопки уже обнавлять записи из связанной таблици с этим "техническим" ID на новый полученый после добавления из мастер-таблицы.
Но этот способ мне не очень нравится главным образом из за этой "левой" записи.
Я почти уверен, почти все сталкивались с подобной проблеммой. Как кто решал, поделитесь?


 
stone   (2002-10-30 14:58) [1]

Объяви начало транзакции
Запиши в базу запись в мастер-таблицу
Потом спокойно пиши хоть во все связанные сразу
После всего завершай транзакцию


 
Johnmen   (2002-10-30 14:59) [2]

Небольшое уточнение -
1. на мастере есть PK и на детейле соответствующий FK ?
2. каковы компоненты доступа ?


 
Max Zyuzin   (2002-10-30 15:03) [3]

>stone © (30.10.02 14:58)
Угу... только после этого придется еще раз апдейтить мастер таблицу... в смысле если по ходу он еще и поля какие заполнит... В общем спасибо, мысль хорошая.

>Johnmen © (30.10.02 14:59)
1. Исественно :) есть
2. IBDataBase, IBTransaction, IBQuery


 
Johnmen   (2002-10-30 15:27) [4]

Общие соображения :
1. Конечно же в рамках одной тр-ии (stone © (30.10.02 14:58))
2. Для редактируемых запросов использовать IBDataSet вместо IBQuery.
Теперь по сути :
вар.1. Тобой указанный.
вар.2. Заполняя детейл НД, не выполняем никаких запросов на изменение данных, и только при нажатии кнопы вставляем мастера и затем детали.
(Оба использую, других, в рамках поставленного вопроса не знаю, да и нет их)


 
Max Zyuzin   (2002-10-30 15:33) [5]

>Johnmen © (30.10.02 15:27)
1. Ну это само сабой разумеющееся.
2. Ну никак не заполнить ведь :( ведь нужно заполнить поле FK хоть чем то, если запонить чем нить не существующим (нулем например), начинает сиьлно ругаться на ссылочную целостность мол нету такой записи у тебя в мастере.

Сейчас реализовываю способ, предложенный stone © (30.10.02 14:58) о результатах сообщю дополнительно :)


 
Johnmen   (2002-10-30 15:50) [6]

>Max Zyuzin © (30.10.02 15:33)

Это не способ решения проблемы (stone © (30.10.02 14:58)), это правильное дополнение (чтобы др.клиенты не видели твоей "технической" записи).
:)


 
Max Zyuzin   (2002-10-30 15:53) [7]

>Johnmen © (30.10.02 15:50)
Да то что надо все делать в одной транзакции я сразу понял, я думал как без создания этой самой записи обойтись :)


 
Johnmen   (2002-10-30 16:31) [8]

Без создания - вар.2. от (30.10.02 15:27)
Хотя он более громоздкий...


 
Max Zyuzin   (2002-10-30 16:44) [9]

>stone © (30.10.02 14:58)
Сделал по вашему совету, у меня получилось... довольно изящно. спасибо :)



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.007 c
1-59203
Erik
2002-11-05 18:35
2002.11.18
Работа с указателем


1-59126
iNew
2002-11-08 12:20
2002.11.18
Можно ли сделать чтобы в MessageDlg вместо Yes, No


1-59152
dimonf
2002-11-08 19:04
2002.11.18
Как обновлять TreeView при добавлении или удалении группы.


1-59272
iNew
2002-11-07 14:50
2002.11.18
Как лучше всего заменить все ‘*’ в строке на ‘%’, можно конечно


1-59210
Pesh
2002-11-06 13:59
2002.11.18
ShBrowseFolder с Initial Dir





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский