Текущий архив: 2005.09.25;
Скачать: CL | DM;
Вниз
ADO. Отслеживание изменения БД. Найти похожие ветки
← →
Marser © (2005-08-13 15:58) [0]Ситуация следующая - с помощью одного ADOQuery в БД заносится запись. Другой ADOQuery производит выборку из той же базы и отображает свои результаты в DBGrid.
Если проводить обновление второго ADOQuery непосредственно после завершения выполнения первого, только что добавленная запись отображена не будет. Поэтому приходится использовать TTimer. Я заметил, что использование оптимистической блокировки и динамических курсоров позволяет уменьшить интервал обновления, но фиксированный интервал всё равно ненадёжен.
Каким образом можно отследить изменение базы данных, используя ADOQuery?
З.Ы. В Б я человек новый, потому не взыщите.
← →
Marser © (2005-08-13 16:14) [1]
> В Б я человек новый, потому не взыщите.
В БД :-)
← →
sniknik © (2005-08-13 16:15) [2]не надо следить, надо использовать нормальные (рекомендованные) конструкции/компаненты.
так судя по описаному поведению, можно сказать, что ADOConnectoin-ом ты не пользуешся... вернее ты его не используеш а в программе используется, даже лишнее их количество, на каждый ADOQuery по одному, вместо одного на всех... если бы сам поставил.
ADOQuery, тоже бы желательно заменить на ADODateSet для возвращающих рекордсет команд и ADOCommand для невозвращаюших. и зачем менять чтото отдельной командой если можно непосредственно в том месте где требуется? но ладно, это все, дело идеологии у каждого свое.
а ошибка у тебя как было сказано изза множественных коннектов которые возникли изза нежелания(/незнания что нужно?) использования одного, явно.
← →
Marser © (2005-08-13 16:23) [3]Нет, я использую прямую привязку через ConnectionString к UDL-файлу. ADOConnection пробовал, но здесь не счёл необходимым.
> ADOQuery, тоже бы желательно заменить на ADODateSet
> для возвращающих рекордсет команд и ADOCommand для
> невозвращаюших
Приму к сведению.
> и зачем менять чтото отдельной командой если можно
> непосредственно в том месте где требуется?
Не совсем понял.
> а ошибка у тебя как было сказано изза множественных
> коннектов которые возникли изза нежелания(/незнания
> что нужно?) использования одного, явно.
ADOConnection я не использую ВООБЩЕ, но то, что я ещё слепой котёнок в БД - факт.
← →
Anatoly Podgoretsky © (2005-08-13 16:58) [4]Marser © (13.08.05 16:23) [3]
ADOConnection я не использую ВООБЩЕ, но то, что я ещё слепой котёнок в БД - факт.
И зря, измени подход, используй везде и только один на поток.
← →
Marser © (2005-08-13 17:00) [5]
> И зря, измени подход, используй везде и только один на
> поток.
Спасибо! Я так и понял. Но относительно самого вопроса...
← →
Anatoly Podgoretsky © (2005-08-13 17:02) [6]Так ты попробуй сначала.
← →
Marser © (2005-08-13 17:13) [7]Anatoly Podgoretsky © (13.08.05 17:02) [6]
Спасибо!
Интересен механизм сего чуда. Впрочем, я сам разберусь :-)
← →
sniknik © (2005-08-13 20:02) [8]>> и зачем менять чтото отдельной командой если можно
>> непосредственно в том месте где требуется?
>Не совсем понял.
непосредственно в том рекордсете который отображает / обновляется. зачем в другом компаненте менять данные в этом?
>> а ошибка у тебя как было сказано изза множественных
>> коннектов которые возникли изза нежелания(/незнания
>> что нужно?) использования одного, явно.
> ADOConnection я не использую ВООБЩЕ, но то, что я ещё слепой котёнок в БД - факт.
ты не используеш но само ADO с этим несогласно, и создает отдельный коннект для каждого ADOQuery/...
в итоге всетаки используеш.
← →
Marser © (2005-08-13 20:18) [9]
> непосредственно в том рекордсете который отображает /
> обновляется. зачем в другом компаненте менять данные в
> этом?
При записи вносится UIN активного пользователя. В принципе, можно его и не отображать в гриде, но я сделал так.
> ты не используеш но само ADO с этим несогласно, и
>создает отдельный коннект для каждого ADOQuery/...
> в итоге всетаки используеш.
О! Вот это интересно. "О сколько нам открытий...", ну и так далее. Спасибо!
← →
sniknik © (2005-08-13 21:14) [10]> При записи вносится UIN активного пользователя. В принципе, можно его и не отображать в гриде, но я сделал так.
и раз сделал, и раз после изменения данных в таблице делаеш обновление рекордсета для отображения в гриде (?), то почему бы сразу в нем не менять (не в гриде, в рекорсете)?
если его то нужно показывать то не нужно ну тогда - добавь поля в гриде и делай одно из них (поле с UIN) невидимым (а меняеш в рекордсете. для ниго ничего не изменится). либо через колонки грида, делай - показывать не позывать.
хотя, это дело идеологии, как говорил. хочеш делай как сделано(написано) но только подумай ты записаль одну запись в таблицу так? и тут же перечитываеш всю таблицу, чтобы это поле/запись отобразилось... надо ли это?
> О! Вот это интересно.
а в первом посте (там тоже самое) было ненитересно? ;)
← →
Marser © (2005-08-13 23:41) [11]
>> О! Вот это интересно.
> а в первом посте (там тоже самое) было ненитересно? ;)
Там я не понял, о чём это Вы. Сейчас я почитал соответствующую главу у Кэнту и понял всю глубину своего падения. В сущности, вопрос глупый.
Но всё равно спасибо!
Страницы: 1 вся ветка
Текущий архив: 2005.09.25;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.031 c