Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADODataSet и автоматическое обновление / 5 сообщений из 5, страница 1 из 1
24.08.2007, 03:14
    #34749513
Kenonen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODataSet и автоматическое обновление
Здравствуйте!
Ислользую ADODataSet в BCB6.
Данные в ADODataSet получаю запросом от Oracle view, который объединяет несколько таблиц:

Код: plaintext
1.
2.
3.
ADODataSet->CommandText = "SELECT * FROM SOME_VIEW";
ADODataSet->CursorLocation = clUseServer;
ADODataSet->CursorType = ctKeyset;

ADODataSet связан с DBGrib, который занимается отображаением полученных данных.
Данные в процессе работы приложения изменяются с помощью вызова хранимых процедур.
Хотелось бы, чтобы после изменения данных, модифицированные значения полей, сразу же отображались в DBGrid.
Пока что делаю после каждого изменения ADODataSet->Requery(), но такой код IMHO неэффективен :(

Может есть решение этой задачи более правильное и изящное, чем переоткрытие всего набора данных?
...
Рейтинг: 0 / 0
24.08.2007, 09:50
    #34749742
Тныц.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODataSet и автоматическое обновление
Что вы все так ADO любите? :) Поищи по форуму (+ по ветке Delphi) сколько раз возникали проблемы при использовании ADO для доступа к Oracle.
Не знаю, умеет ли что-нибудь подобное ADO (может Resync, но это не совсем то), но нормальные DataSet'ы умеют делать RefreshRecord - т.е. считывается только обновлённая строчка, а не весь набор заново. В ODAC'e, например, можно задать SQLRefresh (как запрос, так и хранимую процедуру) - получение одной строки по певичному либо другому уникальному ключу. Тогда при вызове RefreshRecord будет перечитываться активная запись набора данных.
...
Рейтинг: 0 / 0
25.08.2007, 16:35
    #34752497
Kenonen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODataSet и автоматическое обновление
Не то что любим ADO, но так остается место для маневра в случаем изменения "движка" БД, можно безболезненно и почти без изменений использовать написанный ранее клиент.
По форуму искал включая ветку Delphi - не нашел ничего подходящего.
Пробовал использовать свойства ADO соединения:

Код: plaintext
1.
2.
3.
ADODSProviders->Properties->Item[WideString("Update Resync")]->Value = adResyncAll;
ADODSProviders->Properties->Item[WideString("Unique Table")]->Value = WideString("SOME_VIEW");
ADODSProviders->Properties->Item[WideString("Resync Command")]->Value = WideString("SELECT * FROM SOME_VIEW WHERE RECORD_ID=?");

Но это тоже не помогло.
...
Рейтинг: 0 / 0
26.08.2007, 18:17
    #34753147
Кифирчик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODataSet и автоматическое обновление
сколько бился не нашёл более "работчего" способа обновления
DataSet->Close();
DataSet->Open();
ну можно ещё запоминать где пользователь курсор оставлял через Bookmark
...
Рейтинг: 0 / 0
27.08.2007, 22:29
    #34756448
Kenonen
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODataSet и автоматическое обновление
Спасибо всем за советы.
Придется сейчас все оставить как есть, а на будущее отказаться от использования ADO с Oracle.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ADODataSet и автоматическое обновление / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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