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

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

Обновление TADOTable [D7]


Alex870 ©   (2006-09-28 15:40:00) 

Здравствуйте!
Помогите пожалуйста разобраться, я использую компонент TADOTable, база *.mdb(MS Access). Моя программа производит изменения в этой базе при помощи SQL-запросов. Для отображения содержимого таблицы использую DBGrid. Проблема в следующем: после добавления (удаления) новой строки, мне нужно обновить DBGrid, для этого я не нашел ничего умнее, чем сделать:
ADOTable.Active := False;
ADOTable.Active := True;

однако этот способ работает только после прохождения 4-х секунд с момента исполнения SQL-запроса. Подобный пример видел в интернете - там используют таймер, который запускается после
ADOQuery.ExecSQL;
и через 5 секунд делает
ADOTable.Active := False;
ADOTable.Active := True;
Timer1.Enabled := False;

Меня не устраевает такой способ, может кто расскажет как грамотно и быстро обновить ADOTable и DBGrid.
Спасибо.


ЮЮ   (2006-09-29 10:27:00) [1]


> Sergey13 ©   (28.09.06 16:00) [4]
> А чем не устраивает TADOTable.Insert, TADOTable.Edit и TADOTable.
> Delete?


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

А комбинацию
ADOTable.Active := False;
ADOTable.Active := True;
назначь кнопочке "Обновить" - это потребуется только если хочется увидеть изменения, сделанные другими пользователями.


Alex870   (2006-09-29 09:39:00) [2]


> ты так и не озвучил. что будет, если переоткрыть твой тайбле
> через 2 секунды после апдейта ?

Тогда ничего не происходит, т.е. DBGrid не обновляется, но я засомневался: толи DBGrid обновляется, но получает старые данные, толи в это время что-то не дает переоткрыть таблицу, ведь я не получу эксепшена на операцию Active := false, а если он не стал false по какой-то причине, то и Active := true ошибки не даст, так что есть вариант, что раньше 4 секунд что-то не дает изменить состояние active, хотя это только предположение.


Anatoly Podgoretsky   (2006-09-28 19:24:00) [3]

Зачем нужен ADOTable (особенно для Акцесс) и при этом одновременное использование запросов, ни как не могу понять. А вот осудить могу и осужаю.


ANB   (2006-09-28 18:05:00) [4]


> но для обновления (или для смены состояния Active) необходимо
> 4 сек ничего не делать с ADOTable.

ты так и не озвучил. что будет, если переоткрыть твой тайбле через 2 секунды после апдейта ?


Johnmen   (2006-09-28 17:50:00) [5]

Напр. метод Requery.


zdm   (2006-09-28 17:46:00) [6]


> MsGuns

Не сомневаюсь в твоей компетенции, ну действительно подскажи, интересно.


Alex870   (2006-09-28 17:15:00) [7]


> Есть, и не один

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


Alex870   (2006-09-28 17:12:00) [8]

Спсибо всем!

> Происходит сразу, просто у тебя или запрос 4 сек. выполняется,
>  или данных возвращается столько, что они 4 сек. на клиента
> передаются.

Нет, запрос выполняется быстро, их выполняется море, но для обновления (или для смены состояния Active) необходимо 4 сек ничего не делать с ADOTable. Но раз знатоки говорят, что ни хрена не выйдет, то буду ковырять другой компанент.


MsGuns   (2006-09-28 16:54:00) [9]

>zdm ©   (28.09.06 15:59) [2]
>вряд ли есть другой способ как переоткрытие датасэт

Есть, и не один


sniknik   (2006-09-28 16:06:00) [10]

> А из-за кэширования такой ерунды не может быть ?
коственно... т.к. здесь 100% игнорирование компонента TADOConnection (строки прям у датасетов прописаны...), а так как в этом случае у каждого свой конект->com обьект->кеш то естественны задержки пока они все не синхронизируются.  

> может кто расскажет как грамотно и быстро обновить ADOTable
грамотно ADOTable не обновлять, а спустить в унитаз... а пользоваться и обновлять нормальный ADODataSet.


stone   (2006-09-28 16:04:00) [11]


> ANB ©   (28.09.06 16:00) [3]
>
> > stone ©   (28.09.06 15:44) [1]
>
> А из-за кэширования такой ерунды не может быть ?

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


ANB   (2006-09-28 16:00:00) [12]


> stone ©   (28.09.06 15:44) [1]

А из-за кэширования такой ерунды не может быть ?


Sergey13   (2006-09-28 16:00:00) [13]

> [0] Alex870   (28.09.06 15:40)
А чем не устраивает TADOTable.Insert, TADOTable.Edit и TADOTable.Delete?


zdm   (2006-09-28 15:59:00) [14]

вряд ли есть другой способ как переоткрытие датасэт


stone   (2006-09-28 15:44:00) [15]


> однако этот способ работает только после прохождения 4-х
> секунд с момента исполнения SQL-запроса

Происходит сразу, просто у тебя или запрос 4 сек. выполняется, или данных возвращается столько, что они 4 сек. на клиента передаются.


Наверх

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