Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
10.08.2004, 17:45
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
При сохранении данных в 2 связанных таблицах (предок-потомок), я вначале сохраняю главную таблицу, получая ее первичный ключ, затем в цикле прохожусь по datawindow (на подчиненной табл.) и присваиваю этот первичный ключ внешнему ключу, а потом update(). Есть ли другой способ? Конкретно хочется избавиться от цикла. Или это единственный способ ? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
10.08.2004, 20:15
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
Думаю это единственный способ. А нельзя при заполнении таблицы потомка, автоматом заполнять поле внешний ключ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2004, 06:27
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
Вообще-то, на мой взгляд, весьма странная политика сохранения данных. Если я правильно понимаяю, то речь идет об отношении master-detail (master-slave)? Я обычно всегда сохраняю данные в master'e, а потом только перехожу к заполнению detail'a. Если master сохранен, то никто не мешает воспользоваться таким свойстом dataWindow object, как Initial DataWindow Object PropertyDescription The initial value of the column in a newly inserted row. Controls Column controls Syntax PowerBuilder dot notation: dw_control.Object.columnname.Initial Describe and Modify argument: "columnname.Initial { = ' initialvalue ' }" Parameter Description columnname A string containing the name of the column for which you want to get or set its initial property. initialvalue A string containing the initial value of the column. Special values include:Empty — A string of length 0Null — No valueSpaces — All blanksToday — Current date, time, or date and time ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2004, 07:31
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
авторВообще-то, на мой взгляд, весьма странная политика сохранения данных. А по моему ничего странного. У меня примерно то же самое - в визарде пользователь вбивает все данные по документу и потом одной транзакцией на кнопку "Готово" они сохраняются. Соотвествующе все Detail на момент заполнения не знают ключа Master и устанавливают его на момент своей записи в БД, т.е. после того, как визард уже сохранил данные странички с Master. Для удобства я приделал к DataWindow Control функцию, которая выставляет значения по указанным полям для новых записей: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Код: plaintext
P.S. Кстати на всякий пожарный хочу обратить внимание на одну "особенность" PB работы с autoincrement - при первой записи DW в БД он получает его значения для каждой новой записи, однако при следующей записи он его уже не перечитывает. Т.е. возникает ситуация когда например, у нас в визарде успешно сохранился Master (без сброса флагов записей), однако при сохранении Detail возникла ошибка, которая привела к откату транзакции. При повторном сохранении для Master счетчик уже перечитываться не будет, т.е. в БД запись сохраниться с новым id, а в Master останется старый, соотвествующе для Detail будет присвоен неправильный id и СУБД возбудит ошибку целостности данных (конечно же, если у Detail стоит FOREIGN KEY на Master). Так что при сохранении Master желательно так же циклом пробежаться по всем NewModified! и сбросить им поле Identity на NULL, или наследовать функцию UPDATE и дописать там код сброса Identity, чтобы это происходило автоматом. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2004, 09:46
|
|||
---|---|---|---|
|
|||
Выдача вн.ключа потомку |
|||
#18+
В PFC есть Linkage Service (pfc_n_cst_dwsrv_linkage). ИМХО, не использовать PFC есть хождение по граблям и изобретение велосипеда. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2004, 11:49
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
Ясно, значит без цикла никак... ... |
|||
:
Нравится:
Не нравится:
|
|||
|
11.08.2004, 12:42
|
|||
---|---|---|---|
Выдача вн.ключа потомку |
|||
#18+
авторИМХО, не использовать PFC есть хождение по граблям и изобретение велосипеда. Если вся логика реализована на БД и клиентское приложение из себя представляет примитивный набор формочек и DW-шек, то никакого преимущества использования PFC лично я не вижу, зачем мне такая куча классов, сервисов и иерархий, проблемы с интернационализацией, их багами и совместимости версий для PB, когда можно обойтись одним десятком собственных базовых обьектов с включенными в них примитивами базовой функциональности. И из за парочки решений PFC, которые для такого приложения полезны, тащить ее всю с собой, особого смысла не имеет. В таком случае гораздо иногда полезнее просто посмотреть, как сделано у них, чтобы не наступить на грабли. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=15&mobile=1&tid=1338955]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
26ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 132ms |
0 / 0 |