Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / %SQLGatewayConnection и транзакции / 6 сообщений из 6, страница 1 из 1
08.05.2007, 11:38
    #34511863
MaWr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%SQLGatewayConnection и транзакции
Можно ли использовать транзакции во внешней базе данных, используя %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
08.05.2007, 12:05
    #34511994
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%SQLGatewayConnection и транзакции
По идее в этом классе есть

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

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
08.05.2007, 13:39
    #34512567
ну я
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%SQLGatewayConnection и транзакции
Оракла под рукой нет, но судя по поведению включен автокоммит. Для 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
08.05.2007, 13:50
    #34512627
MaWr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%SQLGatewayConnection и транзакции
ну яно судя по поведению включен автокоммит
.....
После коннекта я бы попробовал выставить
d Connection.SetConnectOption(102,0)
Действительно автокоммит!
Все заработало. Большое спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
26.06.2020, 19:47
    #39973659
nikolaborkowski
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
%SQLGatewayConnection и транзакции
MaWr,
подскажите пожалуйста ,а что будет если использовать ResultSet? что-то пробую вот все что описано, только почему то результат как у вас вначале? все комитится.пробую делать вконце несмотря ни на что RollBack но все равно все сохраняет?
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / %SQLGatewayConnection и транзакции / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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