|
|
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Есть три зависимые таблицы: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. данные из этих таблиц. Данные редактируются пользователем, теперь их надо вставить (!) в таблицы. Единственное, что мне пришло в голову, так это создать через Embedded SQL временные таблицы, повторяющие структуру таблиц A, B, C . Далее, через процедуру в цикле курсором делать вставку строки из временной таблицы в A , с помощью @@IDENTITY получить значение поля deposit_type_id , сделать insert в B , ну и т.д. Думаю, смысл идеи ясен. При таком подходе меня сильно удручает мысль о необходимости создания временных таблиц в PowerBuilder и делание построчного инсерта данных в эти таблицы. Как-то мне не очень нравится эта идея. Возможны ли другие варианты реализации? Что посоветуете? PowerBuilder 9.0.1 Build 7236, MS SQL Server 2000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 10:41 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Какие мне видятся варианты: 1. Сразу получать IDENTITY на фукнциях MSSQL через ESQL (не так часто пользователь решается нажать Cancel). 2. При добавлении новых записей в PB вставлять в IDENTITY свой минусовый счетчик и по нему вязать DETAIL, далее при сохранении в DETAIL менять минусовый код на реальный полученный. 3. Вместо IDENTITY использовать тип GUID IMHO предложенные варианты гораздо удобнее и легче в реализации, чем предложенный Вами и самое простое использовать вариант 1 и не париться. Делать из PB времянки и построчно вставлять записи как то не очень выглядит, особенно под MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 11:00 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Что мешает написать хранимую процедуру (процедуры), подключить ее к DW и реализовать сколь угодно сложную логику? Правильно ли я понимаю фразу авторДанные редактируются пользователем, теперь их надо вставить (!) в таблицы, что независимо от действий пользователя в таблицы происходит INSERT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 11:08 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
ASCRUSСразу получать IDENTITY на фукнциях MSSQL через ESQL (не так часто пользователь решается нажать Cancel) Если я правильно понял, то ты предлагаешь следующее. Сделать insert данных из первого DataWindow (таблица A ), потом получить IDENTITY вставленных записей с помощью Embedded SQL и запихать их в дополнительное поле в этом DataWindow . Потом, зная старый IDENTITY записи и новый, можно пробежаться по второму DataWindow (таблица B ), заменить в нем поле deposit_type_id на новое значение, полученное после insert данных в таблицу A . Далее делаем insert из DataWindow (таблица B ), при этом в DataWindow (таблица B ) должно быть поле, которое содержит старый IDENTITY , чтобы корректно связать данные с таблицей C . Ну и т.д. Так? Ну и какого типа должны быть эти DataWindow ? Откуда мне взять дополнительное поле? В таблицу пихать его - плохой тон. Делать DataWindow типа External ? Или как?.. Твой третий вариант не катит, структуру таблиц менять нельзя. Про второй, я честно говоря, не понял... В твоем первом варианте есть что-то ценное, но пока я еще его не уловил... To PL99 Black Savage Далее, через процедуру в цикле курсором делать вставку строки из временной таблицы в A, с помощью @@IDENTITY получить значение поля deposit_type_id, сделать insert в B, ну и т.д Это все делается на стороне сервера. Т.е. из PowerBuilder я вызываю процедуру, которая находится на сервере и она уже начинает обрабатывать данные, которые были переданы во временные таблицы. Да, всегда нужно делать insert данных. С update вопроса вообще не было бы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 11:37 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Для обеспечения вызова insert вместо update самым простым вариантом будет смена статуса строки: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 11:59 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
To Andyn Хорош тупить! Суть проблемы в обеспечении целостности данных после инсерта. Почитай, о чем я спрашивал то! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 12:12 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Ладно... Покумекали мы тут и решили сделать все несколько иначе, а то такая система получается слишком сложной, в смысле контроля целостности данных. Вообщем, вопрос снят... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 12:24 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
Black Savage ASCRUSСразу получать IDENTITY на фукнциях MSSQL через ESQL (не так часто пользователь решается нажать Cancel) Если я правильно понял, то ты предлагаешь следующее. Сделать insert данных из первого DataWindow (таблица A ), потом получить IDENTITY вставленных записей с помощью Embedded SQL и запихать их в дополнительное поле в этом DataWindow . Потом, зная старый IDENTITY записи и новый, можно пробежаться по второму DataWindow (таблица B ), заменить в нем поле deposit_type_id на новое значение, полученное после insert данных в таблицу A . Далее делаем insert из DataWindow (таблица B ), при этом в DataWindow (таблица B ) должно быть поле, которое содержит старый IDENTITY , чтобы корректно связать данные с таблицей C . Ну и т.д. Так? Ну и какого типа должны быть эти DataWindow ? Откуда мне взять дополнительное поле? В таблицу пихать его - плохой тон. Делать DataWindow типа External ? Или как?.. Твой третий вариант не катит, структуру таблиц менять нельзя. Про второй, я честно говоря, не понял... В твоем первом варианте есть что-то ценное, но пока я еще его не уловил... Уфф - большое большое сорри. Насчет первого моего предложенного варианта - полная лажа, видимо я слишком забыл MSSQL - вариант прокатывает для ASA, но никак не катит под MSSQL, так как в нем нельзя просто так вставлять значения полей IDENTITY при вставке (если тока опцию не включать) и нет аналога ASA-шной функции GET_IDENTITY() :( Предлагаю рассмотреть второй вариант. Смысл его в том, что ты при вставлении в DW новой записи сразу ей присваивашь в дополнительное поле (аналог ключевого) код -1, следующей -2 и т.д. В итоге ты на эти кода можешь DETAIL вешать и с существующими записями перехлеста не будет. Далее при сохранении этого DW ты в поле IDENTITY получишь правильное значение и будет достаточно пройтись по DETAIL и в FK поле поменять тот же -1 на правильное значение. Далее и его уже можно будет сохранять. Насчет DW External для того, чтобы сделать доп. поле смысла не вижу. Это легче организовать прямо в Design SQL, типа: Код: plaintext 1. P.S. Еще раз каюсь за первый совет, видимо я удачно и полностью забыл MSSQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 12:40 |
|
||
|
Insert into dependent tables with identity columns
|
|||
|---|---|---|---|
|
#18+
To ASCRUS Счастливый человек, тот который об MS SQL Server может себе позволить забыть Как я уже написал выше, решили всеже напрячь юзеро-зверей и дать им дополнительную работу, облегчив жизнь себе. Так что, рассмотрение предложенного тобой варианта не имеет смысла. Спасибо всем, кто нашел в себе силы немного подумать.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2005, 12:52 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=32922986&tid=1338528]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
73ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 409ms |

| 0 / 0 |
