C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Обновление Грида после добавления полей, InterBase
Lusha
Отправлено: 26.06.2003, 11:02


Не зарегистрирован







Подскажите как обновить Грид после того как к таблице добавлено новое поле. Моя база — InterBase. Вот что я делаю:

DM->IBProduct->Append();
................................................
DM->IBProduct->Post();
DM->IBTransaction->CommitRetaining();
DM->IBPart_Component->Close();//это представление основаное на
DM->IBPart_Component->Open();//таблице IBProduct
Очень уж громоздка такая конструкция, думается есть более элегантное решение и наверное более правильное

У кого какие мысли — высказывайте
Admin
Отправлено: 26.06.2003, 17:53


Владимир

Группа: Администратор
Сообщений: 1190



QUOTE

как к таблице добавлено новое поле


Наверное не новое поле в таблице , а новая запись ?

По-моему все нормально.

Только посмотрите, может поможет свойство ForcedRefresh в true ?
(если используете IBQuery)
"Set ForcedRefresh to True to force the dataset to refresh its data
everytime it posts a record"
если не поможет, оставляйте как есть.

Конечно, это мое личное мнение. cool.gif

Отредактировано Admin — 26 Jun 2003, 17:55
Гость_Lusha
Отправлено: 27.06.2003, 09:46


Не зарегистрирован







Совершенно верно новая запись добавляется, а не поле.
Нет я использую компонент IBTable, так что ваш совет не пригодится
А как вы думаете может мне сменить режим транзакции? А в этом не сильна и оставила все как было по умолчанию.
DefaultAction — TACommit
и еще добрые люди посоветовали параметры транзакции
isc_tpb_read_committed
isc_tpb_nowait
Может тут собака порылась...
Anry
Отправлено: 02.07.2003, 13:42


Дежурный стрелочник

Группа: Участник
Сообщений: 56



Если я правильно понял, то набор данных IBProduct работает в контексте IBTransaction, а IBPart_Component в контексте другой.
Тогда в данном случае по другому никак не сделаешь. Транзакция с параметрами:
isc_tpb_read_committed
isc_tpb_nowait
видит только подтвержденные данные.
По это причине, необходимо обновить набор данных работающий в контексте другой транзакции (чтобы увидеть изменения).
Но я все же советую пользоваться компонентами типа Query, т.к. при использовании Table и методов Append, Post и т.д. (навигационный метод доступа), преимущества SQL-сервера сводятся к нулю.
Lusha
Отправлено: 03.07.2003, 09:48


Не зарегистрирован







У меня и в мыслях не было заставлят работать IBPart_Component в контексте другой транзакции. Все что я от нее хочу, это чтобы данные обновлялись.

А приемуществ Query перед Table я так и не увидела, исключительно дополнительные проблемы
Отказавшись от Table для одной большой таблицы заработала себе головную боль пока писала Select Modify и тп вещи
Кроме того стал возникать ексепшн при попытке скролировать грид в котором эта таблица отображается. Неужто я еще должна и это контролировать....
Сорри, ипользовался компонент IBDataSet,
Только не говорите что это он виноват и мне срочно нужно переходить на другой набор компоненотов и тогда все мои проблемы решатся....
Admin
Отправлено: 03.07.2003, 21:26


Владимир

Группа: Администратор
Сообщений: 1190



Ну, неуметь писать можно на любом наборе компонент. smile.gif

А для максимально удобной работы InterBase/FireBird
конечно нужно переходить на другой набор компонент — FIBPlus

Что касается "ексепшн при попытке скролировать грид". то тут надо
серьезно разбираться в чем дело — никогда не бросайте такое на
пол-пути — мол не получается почему-то, ну и х... с ним

И правильно сказал Anry насчет компонента Query. а я бы сюда
еще обязательно добавил хранимые процедуры, триггеры и другие
возможности сервера.

QUOTE

"заработала себе головную боль пока писала Select"

Если хотите серьезно работать с базами данных изучить язык баз
данных SQL все же придется, он очень простой. а пользы приносит
очень много, конечно можете сначала как следует изучить Table и
работу с ним.

Вернуться в Работа с базами данных в C++Builder