![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обновление 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 сек. на клиента передаются.