БД и отключение электроэнергии

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

БД и отключение электроэнергии

Сообщение gjghjc » 06.08.2003 (Ср) 23:44

У меня возникла такая проблема.
Написал я программку для работы с БД и заметил такую вещь что если в процессе работы моей программы отключают электроэнергию или машина повисает, то иногда БД сохраняет изменения а иногда нет.
Поясните если можно в чем здесь дело и как сделать так чтобы все изменения сохранялись.
Утро добрым не бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.08.2003 (Чт) 9:10

Начинаешь транзакцию, делаешь изменения, завершаешь транзакцию.
Если в течении этого процесса (после начала транзакции и до ее завершения) что-то произошло, то изменения не сохраняться.
Что-бы все изменения сохранялись сделать невозможно, это может привести к нарушению целостности базы. Лучше выполняй транзакции вручную, чтобы быть уверенным, что информация будет сохранена логическими блоками информации.
Lasciate ogni speranza, voi ch'entrate.

gjghjc
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 659
Зарегистрирован: 13.10.2002 (Вс) 8:28
Откуда: БАЛАКЛАВА!!

Сообщение gjghjc » 07.08.2003 (Чт) 9:37

Код: Выделить всё
If lstFlat.ListCount = 0 Or lstFlat.ListIndex < 0 Then Exit Sub

Adodc1.Recordset.AbsolutePosition = lstFlat.ListIndex + 1
Oplata = Adodc1.Recordset.Fields("oplata")
Date1 = DateAdd("m", 1, Oplata)
Adodc1.Recordset.Fields("oplata") = FormatDateTime(Date1, vbShortDate)
Adodc1.Recordset.UpdateBatch adAffectCurrent
pos = lstFlat.ListIndex
TempStr = Replace(lstFlat.Text, Oplata, Date1)
lstFlat.RemoveItem pos
lstFlat.AddItem TempStr, pos

Где здесь начало транзакции и где конец :?: :oops:
Эта процедура изменяет оплату абонента.
Если изменить одному то изменения несохраняются, а если двум то все ОК (больше не пробовал винта жалко так как эмуляцию отключения питания делал через RESET)
:shock: :shock:
Утро добрым не бывает!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.08.2003 (Чт) 10:07

С контролом ADODC не работал, как в нем делать не знаю. Видимо транзакции реализованы внутри контрола. А кодом это делается так:
Код: Выделить всё
cnn.BeginTrans 'начать транзакцию
...
cnn.CommitTrans 'завершить транзакцию

Здесь cnn это объект ADODB.Connection (Dim cnn As ADODB.Connection)
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 232

    TopList