|
Значения ключевых полей в связанных таблицах
|
|||
---|---|---|---|
#18+
Добрый день! Форма для ввода/редактирования данных построена на связке 2-х параметрических буферизованных LocalVew, связанных отношением один-ко-многим. Родительская таблица: "customer" с полями customer_id,customer_name Дочерняя: "contract" с полями contract_id,customer_id,contract_name При вводе новой записи значение ключевого поля customer_id в родительской таблице заранее неизвестно, и при добавлении строк в дочернюю 1) для customer_id в "contract" нечего ставить. 2) для contract_id значение тоже пока неизвестно, т.к. возможно на момент сброса буфера это значение изменится (работа на сети) Приращение +1 по ключевым полям идет через функцию, аналогичную NewId (последние значения храняться в служебной таблице) Поэтому, если ставить NewId в default value, выпадает последовательность значений, если юзер передумал сохраняться. В данный момент для "customer" использую временные ключи, а при сбросе буфера генерю уже по NewId, Для "contract" contract_id приходится при добавлении делать MAX(contract_id) и опять при сбросе получать реальный по NewId для вставки в таблицы. Какие-то танцы с бубном. Есть решение поизящней? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 17:33 |
|
Значения ключевых полей в связанных таблицах
|
|||
---|---|---|---|
#18+
В дочерней использовать табличную буферизацию или курсор отдельный. Сначала сохранять запись в родительскую, брать ее ИД, проставлять в дочерней, сохранять дочернюю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 18:16 |
|
Значения ключевых полей в связанных таблицах
|
|||
---|---|---|---|
#18+
Можно еще попробовать сделать так: заранее добавлять в родительскую энное количество записей, и по некоторому полю-признаку считать их "буферными". Т.е. ID в родителе будет уже проставлен, а при необходимости "добавления" - вы не добавляете запись физически, а просто сбрасываете признак у нужной записи. При этом дочерняя может в любой момент запросить "свободный ID" из родительской, просто по полю-признаку. А "буферные" записи добавляются по мере необходимости - например, при обслуживании БД, или при запуске приложения... Неудобство одно - приходится иметь две процедуры для добавления записей в дочернюю - такую, как у вас, и такую, как описано - и выбирать, которая будет отрабатывать. Кстати, заранее добавлять "буферные" записи можно и в дочерние таблицы... ... |
|||
:
Нравится:
Не нравится:
|
|||
27.08.2012, 20:27 |
|
|
start [/forum/topic.php?fid=41&fpage=53&tid=1583479]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 263ms |
total: | 418ms |
0 / 0 |