Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Обновление набора данных в TDBGrid после отката трнзакции [D7, MS Access]


Zergling ©   (2003-04-17 12:06:00) 

Всем привет! Назрел у меня такой вопросец. Работю с Access через ADO.

if not ADOConnection.InTransaction then
begin
ADOConnection.BeginTrans;
try
{ Вношу данные в таблицу }
{ данные изменения отображаются и в гриде }
ADOConnection.CommitTrans;
except
{ при возникновении ошибки данные откатываются,
но значения в гриде после отката не обновляются }
ADOConnection.RollBackTrans;
end;
end;

Вопрос в следующем. Как обновить набор данных в DBGrid после завершения ADOConnection.RollBackTrans. Зарнее всем благодарен за любую оказанную помощь.


Zergling   (2003-04-17 14:42:00) [1]

Решение проблемы оказалось оказывается очень простым.
После ADOConnection.RollBackTrans нужно сделать всем таблицам Refresh, которые принимали участие в транзакции.

ВСЕМ СПАСИБО ЗА ОКАЗАННУЮ ПОМОЩЬ И СОВЕТЫ!!!


Zergling   (2003-04-17 14:12:00) [2]

Наверно я немного не верно поставил вопрос. Данные я заношу в 1 таблицу. На основе данных введенных в 1 таблицу, заносятся некоторые данные во 2 таблицу. Так вот, данные в гриде не обновляются для 2 таблицы.

Жук © (17.04.03 13:52)

Стандартные компоненты для дельфи 7.
TADOTable, TDataSource, TDBGrid.
DataSet.Cancel или DataSet.CancelUpdate не помогает.

Может потому, что я начинаю и заканчиваю осуществлять транзакцию в событии OnBeforePost 1 таблицы. Хотя наверно какое ей до этого дело.


Соловьев   (2003-04-17 14:10:00) [3]


> Т.к. я не знаю, каким образом он осуществляет данную операцию,
> то может быть он это осуществляет путем переоткрытия набора
> данных, а может и нет

загляни в исходники... я думаю он переоткрывает.


Жук   (2003-04-17 13:52:00) [4]

Нужно сделать DataSet.Cancel или DataSet.CancelUpdate. Какие у вас компоненты доступа ?


Zergling   (2003-04-17 13:45:00) [5]

Жук © (17.04.03 13:39)

Данные отображаются в гриде которые заносились в секции
Try
...
// сдесь
Except
end;
После отката эти данные не принимают свое прежнне значение в гриде. т.е. они не достоверны.


Жук   (2003-04-17 13:39:00) [6]

А зачем после отката обновлять данные ? Изменений же не произошло...


Zergling   (2003-04-17 13:37:00) [7]

В дельфи 7 есть ActionManadger. У него есть стандартные TAction для работы с набором данных. Среди них есть такой TAction который обновляет набор данных. Вот я задаюсь вопросом, как реализовать это програмно. Т.к. я не знаю, каким образом он осуществляет данную операцию, то может быть он это осуществляет путем переоткрытия набора данных, а может и нет. С переоткрытием данных наверно может возникнуть и другая проблема. При переоткрытии таблиц с большим количеством данных может ути приличное время (хотя я в этом еще не уверен т.к. еще не работал с большими таблицами).


Соловьев   (2003-04-17 13:16:00) [8]


> то каждый раз переоткрывать данные это не серьезно. Всетаки
> необходимо обновить данный в гриде.

ну если ты сможешь не переоткрывая данные их обновлять в гриде , тогда получишь нобелевскую премию по программированию, если такую дают...
Почему не серьезно?


Zergling   (2003-04-17 13:13:00) [9]

А если пользователь наступает на одни и теже грабли несколько раз подряд, то каждый раз переоткрывать данные это не серьезно. Всетаки необходимо обновить данный в гриде.


Соловьев   (2003-04-17 13:05:00) [10]


> Как обновить набор данных в DBGrid

переоткрыть Close; Open;
или что-то не то, или что-то с вопрошающим...


Наверх

Титульная страница Поиск, карта сайта Написать письмо