Форум: "Базы";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизОбновление 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.043 c