Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.03;
Скачать: CL | DM;

Вниз

Обновление TADOTable   Найти похожие ветки 

 
Alex870   (2006-09-28 15:40) [0]

Здравствуйте!
Помогите пожалуйста разобраться, я использую компонент 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.
Спасибо.


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


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

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


 
zdm ©   (2006-09-28 15:59) [2]

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


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


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

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


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

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


 
stone ©   (2006-09-28 16:04) [5]


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

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


 
sniknik ©   (2006-09-28 16:06) [6]

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

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


 
MsGuns ©   (2006-09-28 16:54) [7]

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

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


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

Спсибо всем!

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

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


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


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

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


 
zdm ©   (2006-09-28 17:46) [10]


> MsGuns

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


 
Johnmen ©   (2006-09-28 17:50) [11]

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


 
ANB ©   (2006-09-28 18:05) [12]


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

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


 
Anatoly Podgoretsky ©   (2006-09-28 19:24) [13]

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


 
Alex870   (2006-09-29 09:39) [14]


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

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


 
ЮЮ ©   (2006-09-29 10:27) [15]


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2006.12.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.053 c
4-1153140375
Roobee1
2006-07-17 16:46
2006.12.03
Перехват данных на LPT


15-1163416440
s567
2006-11-13 14:14
2006.12.03
Хэши crc32, md5


15-1163671607
ANT1
2006-11-16 13:06
2006.12.03
Лицензии


15-1163344973
G13MO
2006-11-12 18:22
2006.12.03
Можно ли раскомпилировать .exe файл c помощью Delphi 7


2-1163327804
lsvit
2006-11-12 13:36
2006.12.03
Работа с exe файлами