Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с отображением данных после отката транзакции. / 16 сообщений из 16, страница 1 из 1
23.03.2005, 16:13
    #32976760
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
Всем привет!!!

Ставлю на форму ADOConnection1, ADOTable1, DataSource1, DBGrid1.

Все это дело настраиваю...

Также на форму помещаю три кнопки с
1) ADOConnection1->BeginTrans();
2) ADOConnection1->CommitTrans();
3) ADOConnection1->RollbackTrans();

Нажимаю на первую. Изменяю данные в гриде... Нажимаю на третью. Данные в гриде не возвращаются обратно в изначальные значения. Закрываю форму и снова открываю. Теперь только отображаются изначальные данные. Т.е. такое ощущение, что после отката данные откатились, но отображаются все равно старые и их нужно самостоятельно обновить... Но как это сделать???

Благодарю за ответ.
...
Рейтинг: 0 / 0
23.03.2005, 16:18
    #32976778
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
авторТ.е. такое ощущение, что после отката данные откатились, но отображаются все равно старые и их нужно самостоятельно обновить... Но как это сделать???
Обновить компонент ADOTable1. Например, Close; Open;
...
Рейтинг: 0 / 0
23.03.2005, 16:22
    #32976798
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
А есть ли более мягкий вариант обновления после отката???
...
Рейтинг: 0 / 0
23.03.2005, 17:45
    #32977049
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
StasX4
Т.е. такое ощущение, что после отката данные откатились, но отображаются все равно старые и их нужно самостоятельно обновить... Но как это сделать???


Надо заново перечитать все данные. причем кстати как в случае отката транзакции, так и в случае коммита.
...
Рейтинг: 0 / 0
23.03.2005, 18:13
    #32977120
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
Понятно. А кроме жесткого способа Close->Open есть ли еще какой-нибудь вариант? Типа Refresh() или что-то в этом роде...
...
Рейтинг: 0 / 0
23.03.2005, 21:55
    #32977322
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
Это все сильно зависит от способа доступа и драйверов. Но все перечитать - самое мудрое и правильное, и единственно действенное.
...
Рейтинг: 0 / 0
23.03.2005, 22:48
    #32977351
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
Вроде бы нашел ответ при использовании TDBGridEh.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
ADOConnection1->BeginTrans();        
}

void __fastcall TForm1::ButtonCommitClick(TObject *Sender)
{
ADOConnection1->CommitTrans();
ADOConnection1->BeginTrans();
}

void __fastcall TForm1::ButtonRollBackClick(TObject *Sender)
{
DBGridEh1->SaveBookmark();
ADOConnection1->RollbackTrans();
ADOTable1->Requery();
DBGridEh1->RestoreBookmark();
ADOConnection1->BeginTrans();
}

@MasterZiv
Поэкспериментировал, и вот не понимаю зачем нужен Requery() при выполнении CommitTrans()?
И что лучше использовать Requery() или Refresh() ?
Как я понял, при использовании Close->Open мой вариант не пройдет. И чем отличается Close->Open от Requery() или Refresh()?

Заранее спасибо за ответ.
...
Рейтинг: 0 / 0
24.03.2005, 18:44
    #32979495
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
StasX4
Поэкспериментировал, и вот не понимаю зачем нужен Requery() при выполнении CommitTrans()?


В смысле, ты понимаешь, зачем он при RollBack, а зачем - при Commit - не понимаешь ? Если ты подумаешь, то поймешь, что на самом деле,
ситуации с RollBack и с Commit мало чем отличаются - и в том и в другом случае ты что-то послал на сервер, и там что-то поменялось. А что, и как - ты никогда не знаешь.

StasX4
И что лучше использовать Requery() или Refresh() ?
Как я понял, при использовании Close->Open мой вариант не пройдет. И чем отличается Close->Open от Requery() или Refresh()?


А я почем знаю ? Это ты в своих дельфях вызнавай. На сколько я помню это г., там Close - Open - это действия по полному повторению получения данных на клиента, т.е. то же самое, что ты сделал бы, если бы закрыл приложение (форму) и открыл бы заново. Именно это и надо делать для обновления данных (за очень редким исключением). Requery() или Refresh() - видимо, как водится в Дельфах, хитрые попытки сделать хитроумным способом то, чего сделать вообще нельзя - обновить только те строки, которые у тебя закачены на клиента. Это может быть сильно завязано на конкретику данной СУБД (а другая СУБД такого вообще не сможет), либо на способ доступа к данным (всяческие хитрые курсоры и пр.). Точнее я не знаю.

Да, еще - никогда не используй TTable. Если используешь - меняй быстрее на TQuery или TProcedure, пока не началось.
...
Рейтинг: 0 / 0
24.03.2005, 19:59
    #32979607
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
@MasterZiv

Спасибо за ответ. ;)
А чем плоха TTable? Глюков немерено? А в TADOTable теже глюки или что?


P.S.
Я пишу на BCB6 SP4
...
Рейтинг: 0 / 0
24.03.2005, 20:21
    #32979634
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
авторСпасибо за ответ. ;)
А чем плоха TTable? Глюков немерено? А в TADOTable теже глюки или что?
Тем, что в любом случае пригонит все данные из таблицы на клиента. Он Вам надо, тащить, к примеру, 100000 записей на клиента? Пользователь в них точно ногу сломит, да еще и будет каждый раз вспоминать программера за его "очень шуструю" программу.
...
Рейтинг: 0 / 0
24.03.2005, 20:22
    #32979635
q
q
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
а еще, а еще!!!! а еще бывает, когда выдаешь коммит, а на самом деле происходит роллбак. например, когда один из участников транзакции не доступен. это так здорово!!!
...
Рейтинг: 0 / 0
24.03.2005, 20:25
    #32979639
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
qа еще, а еще!!!! а еще бывает, когда выдаешь коммит, а на самом деле происходит роллбак. например, когда один из участников транзакции не доступен. это так здорово!!!
Ась?
...
Рейтинг: 0 / 0
25.03.2005, 12:07
    #32980460
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
Гавриленко Сергей Алексеевич qа еще, а еще!!!! а еще бывает, когда выдаешь коммит, а на самом деле происходит роллбак. например, когда один из участников транзакции не доступен. это так здорово!!!
Ась?

Ну чё ась, пральна человек говорит (про рапределенные транзакции). То, что ты commit послал, еще не значит, что он произойдет. А если не произойдет commit, то должен произойти , наоборот, rollback, ибо - транзакция.
...
Рейтинг: 0 / 0
25.03.2005, 12:13
    #32980482
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
StasX4
А чем плоха TTable? Глюков немерено?


Тем же, чем и вся VCL - попыткой сделать то, чего сделать в принципе нельзя.
Умная она слишком, все за тебя пытается сделать (запросы генерировать).
А запросы надо писать самому, иначе будешь у нее в заложниках. Впрочем, наверное , есть случаи , когда TTable вполне должен подходить - напр. для работы с DBF-таблицей.

StasX4
А в TADOTable теже глюки или что?

Я не знаю. Подозреваю, что TADOTable - это та же TTable, только использующая не BDE, а ADO. Тогда - да.
...
Рейтинг: 0 / 0
25.03.2005, 17:24
    #32981572
StasX4
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
А что если я через TADOTable вывожу не таблицу с сервака, а представление(View)? Неужели тоже делать и с TADOQuery?
Т.е. получается что сервак будет обрабатывать два вложенных запроса.

Первый-> Это View
Второй-> Скажем, элементарный select * from MyTable
...
Рейтинг: 0 / 0
30.03.2005, 11:55
    #32988161
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Проблема с отображением данных после отката транзакции.
StasX4
Т.е. получается что сервак будет обрабатывать два вложенных запроса.


Серваку это пофигу. View - это некий запрос, который как запрос подставляется в главный запрос, грубо говоря, в виде текста ( на самом деле, в виде лог. действий, которые надо сделать). Затем это все оптимизируется и выполняется.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с отображением данных после отката транзакции. / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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