Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
18.10.2010, 13:55
|
|||
---|---|---|---|
|
|||
заблокировать запись VFPOLEDB |
|||
#18+
помогите. есть таблица tables в которой для каждой таблицы базы хранится последний использованный id записи, потому что в таблицах ключ не автоинкрементный. мне нужно в одну из таблиц добавить запись, назовем эту таблицу "Z". для этого надо: - получить последний использованный id из tables для таблицы Z - увеличить этот полученный id на 1 - добавить запись в Z с новым id - записать новый id в tables и вот чтобы это сделать, мне ж надо заблокировать запись в tables. на фокспро это сделано через RLOCK(), а в делфи через vfpoledb как мне поступить? или как то можно в рамках одного обращения к бд сделать? может так пойдет: adoquery1.sql.add('SELECT gen_id FROM tables WHERE tablename="Z"'); adoquery1.sql.add('вот тут как то увеличить gen_id и записать его например в переменную new_gen_id'); adoquery1.sql.add('INSERT INTO Z (id) VALUES (new_gen_id)'); adoquery1.sql.add('UPDATE tables SET gen_id = new_gen_id WHERE tablename = "Z"'); adoquery1.sql.execsql; как правильно сделать? структуру бд менять не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
18.10.2010, 14:12
|
|||
---|---|---|---|
заблокировать запись VFPOLEDB |
|||
#18+
Можно и без блокировок. Идея заключается в том, что ты сначала считываешь текущее значение у нужной записи, а потом выполняешь модификацию у записи, которая имеет найденное значение. Ну, в синтаксис Delphi сам переведешь, а в псевдо-коде это будет выглядеть так Код: 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.
Основная "фишка" в небольшом "довеске" в команде UPDATE. Если за время между первым Select и командой Update другой пользователь успел изменить значение счетчика, то Update не найдет ту запись, которую надо изменить и мы уйдем на следующий шаг цикла ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=41&tablet=1&tid=1584877]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
2ms |
others: | 298ms |
total: | 417ms |
0 / 0 |