|
|
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Аксесс97. Сетевая база. В одной из программ запуск серии запросов на обновление организовал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. В ошибку процедура не сваливается(проверял). Если убрать вообще транзакцию, то все летает и блокировка не появляется. Ест-нно пользователь просит убрать эти прибамбасы с откатами, ему удобство важнее. А т.к. этих запросов на изменение в серии несколько и срабатывать они должны по принципу "все или ни один", то приходится рисковать, работая без откатов. Золотая середина есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:16:27 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Не надо так открывать транзакцию - Акс так почему-то не понимает (на форуме это вроде было) Делай так: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:48:29 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
папаримский, ты чему людей учишь? у датабазы нету метода BeginTrans сей метод есть у воркспейса кстати, все аксес понимает. у меня по крайней мере всегда понимал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:52:33 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
ЛПпапаримский, ты чему людей учишь? у датабазы нету метода BeginTrans сей метод есть у воркспейса кстати, все аксес понимает. у меня по крайней мере всегда понимал. Пардона прошу - заработался БЛИН!!! Действительно не воркспасе Но вот про понимает - это надо проверять (у мну не работает - Акс 97) Типа пример из хелпа (кстати в примере тоже не работают на прямую!!!): авторВ следующем примере в таблице «Сотрудники» изменяются названия должностей всех сотрудников, являющихся представителями. Метод BeginTrans начинает транзакцию, изолирующую все изменения в таблице «Сотрудники», а метод CommitTrans сохраняет внесенные изменения. Метод Rollback служит для отмены изменений, сохраненных с помощью метода Update. В примере также показано, как установить флаг для корректной обработки ошибок, возникающих во время транзакции. Пока пользователь решает, сохранять ли ему изменения или нет, одна или несколько страниц таблицы остаются заблокированными. Поэтому, нижеследующую процедуру не рекомендуется применять на практике, она приведена только в качестве примера. Sub ChangeTitle() Dim wsp As Workspace, dbs As Database, rst As Recordset Dim strName As String, strMessage As String, strPrompt As String Dim fInTrans As Boolean On Error GoTo ChangeTitleErr fInTrans = False strPrompt = "Изменить должность на 'Менеджер по продажам'?" ' Возвращает ссылку на заданный по умолчанию объект Workspace. Set wsp = DBEngine.Workspaces(0) ' Возвращает ссылку на текущую базу данных. Set dbs = CurrentDb ' Создает табличный объект Recordset. Set rst = dbs.OpenRecordset("Сотрудники", dbOpenTable) ' Начало транзакции. wsp.BeginTrans fInTrans = True rst.MoveFirst Do Until rst.EOF If rst!Должность = "Представитель" Then strName = rst!Фамилия & ", " & rst!Имя strMessage = "Сотрудник: " & strName & vbCrLf & vbCrLf If MsgBox(strMessage & strPrompt, vbQuestion + vbYesNo, _ "Изменить должность") = vbYes Then ' Разрешает редактирование. rst.Edit rst!Должность = "Менеджер по продажам" ' Сохраняет изменения. rst.Update End If End If ' Переходит к следующей записи. rst.MoveNext Loop If MsgBox("Сохранить все изменения?", vbQuestion + vbYesNo, _ " Сохранение изменений") = vbYes Then wsp.CommitTrans ' Принимает изменения. Else wsp.Rollback ' Отменяет изменения. End If ChangeTitleExit: rst.Close Set dbs = Nothing Set wsp = Nothing Exit Sub ChangeTitleErr: MsgBox "Ошибка!" If fInTrans Then wsp.Rollback End If Resume ChangeTitleExit End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 16:59:41 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
в примере из хелпа ссылка на DBEngine(0) сохраняется в отдельную переменную типа Workspace. Ну и чудненько, ну и славненько. Однако и без сохранения ссылки - все все равно работает. Я всю жизнь пользовался именно таким синтаксисом - DBEngine(0).BeginTrans и DBEngine(0).CommitTrans Есть случаи, когда без явного сохранения не пашет то, что по идее должно пахать, например работа с TableDefs, но это не тот случай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:03:50 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
кстати, можно писать и так: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:06:04 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Да я пробовал и ссылку сохранять, и так, и эдак - при работе в сети, то и дело программа "задумывается" и надолго, а чаще - мертво вешает блокировку на запись. А вот если перетащить серверную часть на локал - транзакция работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:11:41 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Все понял - был не прав Молчу - молчу - молчу ЗЫ: Но лучше (ИМХО) ссылки всегда сохранять, чтобы не наступить на очередные грабли от мелкомягких! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:13:08 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Ну а мне-то как выпутаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:32:30 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
BenzinНу а мне-то как выпутаться? Наверное надо показать текст функции "ВыполнитьЗапрос" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:33:31 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Вот: Код: 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. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2004, 17:48:55 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
может тормоза из за того что меняется структура базы (создание запроса) внутри транзакции и накладывается что то типа блокировки структуры ... может попробовать что то типа runsql или пробовать ado currentproject.connection и его транзакции и execute ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 11:46:23 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
АлексейК ado currentproject.connection и его транзакции и execute... ага, но только сначала переписать всю программу с А97 на ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 16:32:44 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
еще б 2 аксесс вспомнили .... я уже забыл этого зверя как страшный сон. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 16:45:22 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
Benzin А вот если перетащить серверную часть на локал - транзакция работает. Рой в сторону настроек сети (если новелл - то ключи серверные на количество одновременно открытых-чего-то-там... - всего 4 ключа, кажисть ReсordLocksPer... - т.е. - на юзера| всего| на транзакцию| и еще на что - то). Нароешь еще причины - расскажи (тоже тормоза наблюдаю периодически при переходе на более крутое серверное железо ). Причем не открываю (почти) транзакций сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 16:51:43 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
АлексейКеще б 2 аксесс вспомнили .... я уже забыл этого зверя как страшный сон. ага, не дале как с недели 2 взад пришлось переписвать ранее годами работавший запрос такому вот "зверю" - длина отобранной записи (в зависимости от данных, а не от запроса) приводит зверя к заключению "слишком сложный запрос". Но, собака, открывается на порядок шустрее 97 (и реже валится в системные ошибки). Т.ч., чую, придется еще поподдерживать не переводя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 16:58:57 |
|
||
|
Транзакция здорово тормозит программу.
|
|||
|---|---|---|---|
|
#18+
По поводу приведенной функции ВыполнитьЗапрос Присоветовал бы для начала следующее Фаза 0 В предположении, что внешние транзакционные скобки сохраняются А) жестко избавиться от CurrentDB внутри функции, либо заменив на DBEngine(0)(0), либо передавая переменную типа Database как параметр функции, Б) Жестко избавиться от CreateQueryDef при каждом вызове с пустым именем запроса, заменив либо на один статический QueryDef в функции с проверкой на ничто, либо на переменную уровня модуля. В) QueryDefs я бы тоже прокешировал в локальную переменную… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2004, 18:24:47 |
|
||
|
|

start [/forum/topic.php?fid=45&fpage=1523&tid=1670339]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 354ms |

| 0 / 0 |
