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

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

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

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

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

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


Надо заново перечитать все данные. причем кстати как в случае отката транзакции, так и в случае коммита.
...
Рейтинг: 0 / 0
Проблема с отображением данных после отката транзакции.
    #32977120
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понятно. А кроме жесткого способа Close->Open есть ли еще какой-нибудь вариант? Типа Refresh() или что-то в этом роде...
...
Рейтинг: 0 / 0
Проблема с отображением данных после отката транзакции.
    #32977322
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все сильно зависит от способа доступа и драйверов. Но все перечитать - самое мудрое и правильное, и единственно действенное.
...
Рейтинг: 0 / 0
Проблема с отображением данных после отката транзакции.
    #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
Проблема с отображением данных после отката транзакции.
    #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
Проблема с отображением данных после отката транзакции.
    #32979607
StasX4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
@MasterZiv

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


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

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


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

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

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

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


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


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