powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / %SQLGatewayConnection и транзакции
6 сообщений из 6, страница 1 из 1
%SQLGatewayConnection и транзакции
    #34511863
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли использовать транзакции во внешней базе данных, используя %SQLGatewayConnection?
Поясню. Есть следующий код:
S Connection=##class(%SQLGatewayConnection).%New()
S RET=Connection.Connect(DSN,USER,PASSWORD)
S RET=Connection.AllocateStatement(.Statment)
S SQLString="INSERT INTO MYTABLE (F1 , F2) VALUES (? , ?)"

... заполнение Param

S RET=Connection.BindParameters(Statment,Param(1),Param(2),Param(3),Param(4),Param(5))

S RET=Connection.SetParameter(Statment,$LB(V1),1)
S RET=Connection.SetParameter(Statment,$LB(V2),2)

S RET=Connection.Prepare(Statment,SQLString)

S RET=Connection.Execute(Statment)
Set RET=Connection.DropStatement(Statment)
D Connection.Disconnect()

Так вот. Хочу между Connection.Connect(DSN,USER,PASSWORD) и Connection.Disconnect() иметь возможность делать мнежество операций по модификации данных, причем, с возможностью в любой момент сказать внешней базе данных ROLLBACK.

В качестве внешней базы используется oracle
...
Рейтинг: 0 / 0
%SQLGatewayConnection и транзакции
    #34511994
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее в этом классе есть

method Transact(type) returns %Status
Method Transact( type) invokes SQLEndTran. Pass 0 for SQL_COMMIT and 1 for SQL_ROLLBACK.
...
Рейтинг: 0 / 0
%SQLGatewayConnection и транзакции
    #34512412
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яПо идее в этом классе есть

method Transact(type) returns %Status
Method Transact( type) invokes SQLEndTran. Pass 0 for SQL_COMMIT and 1 for SQL_ROLLBACK.
По идее есть. Но не работает..
Делаю D Connection.Transact(1) ошибок не дает, но изменения закоммичены.
С D Connection.Transact(0) результат аналогичен...
Максимум что получается это организовать транзакцию в 1 Execute.
S SQLString="BEGIN INSERT INTO MYTABLE (F1 , F2) VALUES (? , ?); ROLLBACK; END;" и
S SQLString="BEGIN INSERT INTO MYTABLE (F1 , F2) VALUES (? , ?); COMMIT; END;"
Такие конструкции работают, но большого смысла в них нет...
Похоже, что после каждого Execute делается COMMIT...
Хотя очень хочется иметь транзакцию... :(
...
Рейтинг: 0 / 0
%SQLGatewayConnection и транзакции
    #34512567
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оракла под рукой нет, но судя по поведению включен автокоммит. Для ODBC это управляется через SQLSetConnectAttr, в SQLGateway ему соответствует SetConnectOption

method SetConnectOption(opt, val) returns %Status
Method SetConnectOption(opt, val) invokes SQLSetConnectAttr. Only integer values are supported. Integer values for the opt may be taken from sql.h and sqlext.h header files.

Судя по заголовочным sql.h и sqlext.h
#define SQL_AUTOCOMMIT 102
После коннекта я бы попробовал выставить
d Connection.SetConnectOption(102,0)
...
Рейтинг: 0 / 0
%SQLGatewayConnection и транзакции
    #34512627
MaWr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну яно судя по поведению включен автокоммит
.....
После коннекта я бы попробовал выставить
d Connection.SetConnectOption(102,0)
Действительно автокоммит!
Все заработало. Большое спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
%SQLGatewayConnection и транзакции
    #39973659
nikolaborkowski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaWr,
подскажите пожалуйста ,а что будет если использовать ResultSet? что-то пробую вот все что описано, только почему то результат как у вас вначале? все комитится.пробую делать вконце несмотря ни на что RollBack но все равно все сохраняет?
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / %SQLGatewayConnection и транзакции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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