|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Есть проект VFP6.0-ODBC-mdb Таблицы подвязаны через Remote Views... Блокирование записи RLOCK() должно работать? Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 13:06 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Работать не будет, VIEW - это копия данных из базы, причем у каждого своя. RLOCK() будет работать только для DBF Чем не устроил встроенный автоинкремент в MDB? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 13:15 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
refregЕсть проект VFP6.0-ODBC-mdb Таблицы подвязаны через Remote Views... Блокирование записи RLOCK() должно работать?Все зависит от Вашего понимания действия этой функции и понимания принципа действия Remote ViewПохоже, что RLOCK() всегда возвращает .t. и нет гарантии, что _next_reg_num у двух пользователей будет разнымУгу. Ибо Remote View - это результат запроса. И блокировка накладывается на этот результат, который на локальной машине и который, разумеется, используется только Вами на локальной машине. То есть Вы совершенно не в ту сторону смотрите и совершенно неприемлемые для клиент-сервера методы используете. На сервере клиент не может по своему усмотрению накладывать блокировки. Он не знает обстановки на сервере. Блокировками рулит сервер. При выполнении запросов. Ваш способ генерации уникального идешника на клиенте - нонсенс. Наверняка уже возникший вопрос - а как правильно? - тема достаточно обширная. И сильно зависит от архитектуры приложения. То есть сначала надо определиться с архитектурой, в которой можно будет использовать правильные методы. При этом имеющуюся сейчас архитектуру вместе с кодом, ее реализующим, придется отправить на помойку. Вы готовы к этому? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 13:18 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Dima TЧем не устроил встроенный автоинкремент в MDB?Тем, что его менять нельзя. Вот от него и хотел избавиться. Как следствие - экспорт-импорт через одно место и еще много чего... Ладно, оставлю как есть пока - мне просто нужно было знать наверняка, что так НЕЛЬЗЯ... проходящий.При этом имеющуюся сейчас архитектуру вместе с кодом, ее реализующим, придется отправить на помойку. Вы готовы к этому?Я то готов, и желание есть... Но, к сожалению, не все желания сбываются ) Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 14:02 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
refregDima TЧем не устроил встроенный автоинкремент в MDB?Тем, что его менять нельзя. Вот от него и хотел избавиться. Как следствие - экспорт-импорт через одно место и еще много чего... Ладно, оставлю как есть пока - мне просто нужно было знать наверняка, что так НЕЛЬЗЯ... ВладимирМ тут пример приводил как сделать счетчик без установки блокировок, пример правда немного для другого, но можно модифицировать под твою задачу. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 14:26 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Хотя чего-то я все усложнил, в MDB вроде транзанкции есть, все гораздо проще через SQLEXEC() Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 14:54 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
можно поступить так, как делают в старшей версии. счетчик на стороне фокса не проставлять, а метить каким-то доп.уникальным ключем. после вставки новой записи, искать ее уже по явному известному доп.ключу, и возвращать назад в фокс значение счетчика. (описан принцип аторефреша ключевого поля в курсорадаптере.) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2010, 15:27 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Большое спасибо за варианты решения проблемы. Сделал так, проверил на 3-х компах - вроде работает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 08:55 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
Ну, Вы же на стандартные "грабли" наступаете. Сделали именно так, как ни в коем случае делать нельзя. Думаете, зачем вообще блокировку пытаются наложить? Именно для того, чтобы между командами Calculate и TableUpdate другой пользователь не начал делать то же самое. - Первый пользователь выполнил Calculate и получил, скажем, 1 - Второй пользователь выполнил Calculate и получил тот же 1 - Первый пользователь успешно записал 1 - Второй пользователь не менее успешно также записал 1 Вот и получили дубль. Варианты, как это обойти Вам уже приводили. Как минимум, нужна отдельная таблица, которая будет хранить последнее использованное (или первое не использованное) значение счетчика. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 10:21 |
|
Блокирование записи у mdb
|
|||
---|---|---|---|
#18+
ВладимирМ, Забыл указать, что reg_num ключ в mdb. Когда второй пользователь будет писать, odbc сообщит о нарушении уникальности. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2010, 10:24 |
|
|
start [/forum/topic.php?fid=41&msg=37029566&tid=1584677]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
95ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 183ms |
0 / 0 |