powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
4 сообщений из 4, страница 1 из 1
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
    #33401167
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть обновляемый курсор, созданный с помощью SQLExec().
Далее курсор обновляется юзером и выдается TableUpdate(). Если на одной из записей сервер возвращает ошибку (нарушения уникальности, к примеру), то я делаю TableRevert(), обрабатываю ошибку, а потом еще делаю
=SQLExec(conPubs, "rollback")
Но оказывается, что команда rollback на сервер ушла еще во время команды TableUpdate(), и вторая приводит просто к лишнему предупреждению со стороны сервера :).
Вот я себе думаю, а всегда ли в описанной модели взаимодействия умный Фокс выдает на сервер rollback ? Могу ли я смело убрать лишнее, или надо подстраховываться ?
...
Рейтинг: 0 / 0
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
    #33401346
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi strizh!

Что за сервер, каков ПОЛНЫЙ код - ты что сам шлёшь команду открытия
транзакции? Зачем это вообще надо - ведь есть ODBC-ная поддержка транзакций
(для этого наджо переключиться в "ручной" режим управления транзакциями) -
она реализуется посредством функций SQLCOMMIT()/SQLROLLBACK().

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
    #33403277
strizh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сервер - 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
...
Рейтинг: 0 / 0
Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
    #33404679
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi strizh!

1) А что в ручном режиме управления транзакциями не получается сделать как
надо? Смотреть надо конечно со стороны самого сервера - что, как и когда к
нему приходит и как коммититься - думаю инструментарий такой имется - в
крайнем случае просто поэкспериментировать - "сохранить" кучу записей и
потом выполнить SQLROLLBACK().
2) IMHO если уж ТАК писать, то наверное надо все команды в одну строку
собрать (не знаю какой там у вас разделитель - перевод строки, или ; или ещё
что) и выполнить как батч - т.е. цельная единица работы. Конечно при этом
САМИ команды обновления (INSERT/UPDATE/DELETE) надо руками формировать.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Всегда ли выдается rollback на сервер, если TableUpdate() на обновляемый курсор сбойнула?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]