|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Horsun Vlad 2:5020/400 11 Apr 2001 15:16:11 To : All Subject : Hа: Дремина хитрость 2 -------------------------------------------------------------------------------- "Tolik Gusin" <stalker@giac.dp.ua> сообщил/сообщила в новостях ... > > Да, в этом случае надо либо сохранять Master и Detail > > в памяти клиента или СHАЧАЛА вставить мастера ( ввести данные > > в форме и послать их на сервер и получить ID ), а затем > > при известном ID-е вставлять все Detail-ы ( редактировать их > > в форме ). Hикаких проблем вообще нет. > То что предлагаешь ты легко сделать когда: > 1) У тебя One Master - One Detail. В этом случае ты данные и Master и > Detial можешь хранить в обычных контролах (например TEdit) и по кнопке > "Записать" сделать то что ты и предлагаешь. > 2) Когда рамки твоей задачи позволяют сначала ввести Master и сделать > Commit, а потом уже уже вводить любое число Detail. Зачем делать commit ? > А вот когда у тебя связь One Master - Many Detail и вводить данные и > одного Master и "N" Detail надо "одновременно" в рамках одного ввод > (документа, транзакции) тут и возникает проблемма где хранить N строк > Detail до того как я получу ID для Master и запишу эти N строк в > таблицу. Где угодно на клиенте, хоть в массиве > Причем одним из ограничений стоит создание достаточно унифицированного > кода на ввод и редактирование данных в Detail таблице. > Можно конечно хранить N строк в чем ни буть наподоби MemoryTable, а > потом оттуда перегружать данные в таблицу, но это не удобно и много > лишней работы. А кроме того тут будут разные алгоритмы работы для Insert > и Update что не очень хорошо. Если уж зашла речь о Delphi, то TClientDataset делает все это без проблем и неудобств ... > 2) Это на мой взгляд самый серьезный недостаток и как его преодолеть в > рамках самого SQL сервера я не знаю. Дело тут в том что я не могу для Это не есть проблема SQL сервера - это проблема только клиентской части. > одновременных связок One Master - Many Detail сделать FK от Detail и > Master и его поддерживать приходиться на клиенте при Insert и Update и в > триггере Master'a при Delete. Ведь у меня получаеться что: сначало я > получаю через свой ручной генератор ID для Master'a, потом используя его > я вставляю Detail'ы в таблицу, а потом уже вставляю Master в таблицу. Извини, но это уродство - представь себе, что после вставки пустого мастера у тебя порвался коннект ... > И из за этого применения FK тут почти не возможно, разве что можно > воспользоваться опицией FK "отложить проверку до COMMIT" - Check On > COMMIT. Эта опция служит совершенно для других целей Hint: Представь себе - в транзакцию можно включить гораздо больше одного оператора ;) -- Влад --- ifmail v.2.15dev5 * Origin: Alkar Teleport News Server (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/132973bd28fd7.html, оценка из 5, голосов 10
|