|
|
|
DW Lock + UPDATE
|
|||
|---|---|---|---|
|
#18+
РВ 8.0, SQL Anywhere 9. База данных на сервере. Прога установлена на каждом компьютере локально. На одном окне имеется dw_1. Делаем dw_1.Retrieve(order_number). Теперь, если на другом компе сделать UPDATE из скрипта того заказа, который был выбран на предыдущем компьютере, то происходит зависание до тех пор, пока не закроется окно с dw_1 на первом компе. Это нормально. Вопрос такой: Перед тем, как сделать на втором компьютере Код: plaintext 1. 2. order_number - ключ в таблице t_order. Можно, конечно сохранять все номера заказов, с которыми в данный момент идет работа. Но если есть какая-нибудь проверка на "Lock" было бы лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 13:50 |
|
||
|
DW Lock + UPDATE
|
|||
|---|---|---|---|
|
#18+
RiskaРВ 8.0, SQL Anywhere 9. База данных на сервере. Прога установлена на каждом компьютере локально. На одном окне имеется dw_1. Делаем dw_1.Retrieve(order_number). Теперь, если на другом компе сделать UPDATE из скрипта того заказа, который был выбран на предыдущем компьютере, то происходит зависание до тех пор, пока не закроется окно с dw_1 на первом компе. Это нормально. Вопрос такой: Перед тем, как сделать на втором компьютере Код: plaintext 1. 2. order_number - ключ в таблице t_order. Можно, конечно сохранять все номера заказов, с которыми в данный момент идет работа. Но если есть какая-нибудь проверка на "Lock" было бы лучше. 1. Это вопрос в форум по ASA. 2. Такое поведение Retrieve, если это не сделано специально (напр. указанием подсказке в операторе select) в общем случае есть зло - т.к. мешает многопользовательской работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 14:20 |
|
||
|
DW Lock + UPDATE
|
|||
|---|---|---|---|
|
#18+
Риска, может не совсем то, что тебе надо, но мне кажетса, поменяй where clause у Update. Делай полный запрос, т.е. будет не UPDATE t_order SET MMM = 'NNN' WHERE order_number = :ll_order_number; а UPDATE t_order SET MMM = 'NNN' WHERE order_number = :ll_order_number and mmm = :mmm_original_value_retrieved_from _db; выбрасывай 'Row changed between retrieve and update' или обработай sqldbcode = -3 и выкинь свою мэссагу ... запирать всю базу данных на кто его знает сколько времени ... не солидно ... имхо есть ешё вариант, я использую в одном из процессов, что бы балбесы одновременно не долбили кэш на аккаунт. на таблице апдейта ест; колонка user_skey int null, каждый юзер имеет свой уникальный user_skey, дык вот, как только один из них сделал ретрив, я тут же делаю апдейт этой колонки и втыкаю в неё это самое значение, когда другой усер пытаетса сделать такой же ретрив, в процедуре этой датавинды перед селектом у меня стоит if exists (select * from bla-bla-bla where bla-bla-bla and user_skey is not null) begin RAISERROR ... end и он получает откат, со словами что в эту минуту этим процессом занимаетса другой индивидум, и он может пока покурить ... update колонки user_skey обратно на null, я делаю на закрытии окна. Я конечно всё очень примитивно изложил, но я думаю you got an idea ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2008, 20:33 |
|
||
|
DW Lock + UPDATE
|
|||
|---|---|---|---|
|
#18+
RiskaРВ 8.0, SQL Anywhere 9. База данных на сервере. Прога установлена на каждом компьютере локально. На одном окне имеется dw_1. Делаем dw_1.Retrieve(order_number). Теперь, если на другом компе сделать UPDATE из скрипта того заказа, который был выбран на предыдущем компьютере, то происходит зависание до тех пор, пока не закроется окно с dw_1 на первом компе. Это нормально. Вопрос такой: Перед тем, как сделать на втором компьютере Код: plaintext 1. 2. order_number - ключ в таблице t_order. Можно, конечно сохранять все номера заказов, с которыми в данный момент идет работа. Но если есть какая-нибудь проверка на "Lock" было бы лучше. Commit после dw_1.Retrieve(order_number) поможет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2008, 10:30 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=35496249&tid=1336563]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 398ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...