|
|
|
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
|
|||
|---|---|---|---|
|
#18+
Есть обновляемый курсор, созданный с помощью SQLExec(). Далее курсор обновляется юзером и выдается TableUpdate(). Если на одной из записей сервер возвращает ошибку (нарушения уникальности, к примеру), то я делаю TableRevert(), обрабатываю ошибку, а потом еще делаю =SQLExec(conPubs, "rollback") Но оказывается, что команда rollback на сервер ушла еще во время команды TableUpdate(), и вторая приводит просто к лишнему предупреждению со стороны сервера :). Вот я себе думаю, а всегда ли в описанной модели взаимодействия умный Фокс выдает на сервер rollback ? Могу ли я смело убрать лишнее, или надо подстраховываться ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2005, 21:35:42 |
|
||
|
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
|
|||
|---|---|---|---|
|
#18+
Hi strizh! Что за сервер, каков ПОЛНЫЙ код - ты что сам шлёшь команду открытия транзакции? Зачем это вообще надо - ведь есть ODBC-ная поддержка транзакций (для этого наджо переключиться в "ручной" режим управления транзакциями) - она реализуется посредством функций SQLCOMMIT()/SQLROLLBACK(). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2005, 02:22:42 |
|
||
|
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
|
|||
|---|---|---|---|
|
#18+
Сервер - PostgreSQL. В нем любая команда на модификацию - по умолчанию транзакция. А begin-commit означают работу с транзакционным блоком. Делаю так примерно. conPubs = SQLConnect("myDSN", UserLoginName, UserPassword) iRet = sqlexec(conPubs, "select ... from mytable", "mycursor") if iRet = 1 select mycursor cursorsetprop("buffering", 5) cursorsetprop("UpdatableFieldList", stUpdatableFieldList) cursorsetprop("UpdateNameList", stUpdateNameList) cursorsetprop("KeyFieldList", stKeyFieldList) cursorsetprop("Tables", stTables) cursorsetprop("UpdateType", 1) cursorsetprop("SendUpdates", .t.) cursorsetprop("WhereType", 1) else ... endif Потом идет корректировка юзером данных этого курсора, а по кнопке <Сохранить> такое примерно: =SQLExec(conPubs, "begin") select mycursor if TableUpdate(.t.) =SQLExec(conPubs, "commit") else TableRevert() AError(aErrors) ... =SQLExec(conPubs, "rollback") endif ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2005, 13:26:56 |
|
||
|
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
|
|||
|---|---|---|---|
|
#18+
Hi strizh! 1) А что в ручном режиме управления транзакциями не получается сделать как надо? Смотреть надо конечно со стороны самого сервера - что, как и когда к нему приходит и как коммититься - думаю инструментарий такой имется - в крайнем случае просто поэкспериментировать - "сохранить" кучу записей и потом выполнить SQLROLLBACK(). 2) IMHO если уж ТАК писать, то наверное надо все команды в одну строку собрать (не знаю какой там у вас разделитель - перевод строки, или ; или ещё что) и выполнить как батч - т.е. цельная единица работы. Конечно при этом САМИ команды обновления (INSERT/UPDATE/DELETE) надо руками формировать. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.11.2005, 01:14:12 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33401167&tid=1592920]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
36ms |
get tp. blocked users: |
1ms |
| others: | 205ms |
| total: | 466ms |

| 0 / 0 |
