PostgreSQL + DAO транзакция - теряются изменения
|
|
Четверг, 29 Октября 2015 г. 14:56
+ в цитатник
Добрый день, коллеги.
Переезжаем с Аccess на PostgreSQL. Вроде бы всё работает на первый взгляд удовлетворительно, но в одном месте наткнулся на опасную ошибку. При использовании транзакции код отрабатывает без ошибок, но запись в таблице не появляется! Поскольку транзакции используются в коде повсеместно, очень опасная тенденция. Код VBA такой
Set wrkW = DBEngine.Workspaces(0)
wrkW.BeginTrans
On Error GoTo Err_1
'изменение в таблице СчетаДанные
Set tb1 = CurrentDb.OpenRecordset("СчетаДанные")
If Me.OpenArgs = "ADD" Then
NomSF = NextNumId(6)
If NomSF = -1 Then Err.Raise vbObjectError + 513, , "Неверный Id"
tb1.AddNew
tb1!Id = NomSF
Else
tb1.FindFirst "Id=" & Forms("фрмСчетаДанные")!Id
If tb1.NoMatch Then
MsgBox "Ошибка: не найдена запись в таблице СчетаДанные", vbCritical
Exit Sub
End If
tb1.Edit
End If
'Обновление полей аля
'tb1!ЦенаПрайс = ПолеЦенаПрайс
'tb1!ЦенаПрайс2 = ПолеЦенаПрайс2
'tb1!ЦенаПрайс3 = ПолеЦенаПрайс3
tb1.Update
'Если сюда вставить wrkW.CommitTrans то запись в таблице благополучно появится.
'изменение в таблице Счета
CurrentDb.Execute "UPDATE Счета SET UpdateDate=Now(), UpdateUserID=" & GetGeneralParams(1) & " WHERE Id=" & Forms("фрмСчета")!Id, dbFailOnError
wrkW.CommitTrans
wrkW.Close
'После этого комита, запись в таблице Счета обновляется, но записей о добавлении записи в СчетаДанные нет
В этом месте транзакция не критична, но в большинстве других мест это не так. Не понятно, почему пропадает часть изменений и как отследить, что записи не пропадают? Потому как в некоторых местах без специального исследования и не поймёшь, что что-то пошло не так и часть данных пропала по дороге. В другом месте нормально отрабатывали гораздо более длинные транзакции, но там были только рекордсеты, я так понимаю всё портит CurrentDb.Execute... Возможно, там не такой коннект как у СurrentDb.OpenRecordset, но я не уверен
Переписать под ADO единовременно не представляется возможным, ибо данные переносятся по кускам и некоторых таблиц на сервере ещё долго не будет... К тому же никто не гарантирует, что там это не будет работать точно так же.
В общем, мистика и жёпа - на дебаг всех форм и всех транзакции уйдут остатки молодости, нужно искать корень и системное решение.
http://www.sql.ru/forum/1182357/postgresql-dao-tranzakciya-teryautsya-izmeneniya
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-