![]() |
|
|
![]()
|
|
| MrForget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
Такое дело. На форме есть DBGrid с имеющимися данными из таблицы MSAccess. Ежесекундно по таймеру таблица изменяется, например так:
|
|||
|
||||
| The Thing |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 286 Регистрация: 6.9.2004 Репутация: нет Всего: 3 |
Скорее всего ты не правильно выбрал алгоритм обновления данных.
Я так понял, что у тебя переодически обновляется база, в частности таблица. И ты пытаешься ее каждый раз обновить. Попробуй слеждующий подход, самый простой, и сразу приходит на ум: Считываешь к-во записей (таким же интервалом) и если оно изменилось, то производишь обновление. Так ты съэкономишь много времени и памяти (особенно если большая база). Другой вариант, если база очень часто обновляется, при этом как добавляется, так и удаляется из нее информация, т.е. может так совпасть, что одна запись добавилась, а другая удалилась.. в сумме ничего не изменилось. То можно добавить проверку информации. Например: Считать помимо к-во записей, если к-во записейсовпадает, количество каждой первой буквы по алфавиту (к примеру так). 1. Самое главное, чтобы обработка этой проверки и добавления записи занимала меньгше секунды.. иначе сам знаешь что! 2. или перед обработкой останавливай таймер, а после запуска! 3. Любой подходящий алгоритм поиска информации. -------------------- Правильность работы программы зависит от двух велечин. В нужном месте должны стоять нолик и еденичка. |
|||
|
||||
| Юзверь |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 5.2.2006 Где: IF.UA Репутация: нет Всего: нет |
действительно надо сделать другой алгоритм апдейта
а в этом случая код следает немножко изменить procedure TForm1.TimerTimer(Sender: TObject); begin Data.workcompanies.First; // Application.ProcessMessages; Data.disableControls; //отключаем отображение наших действий на форме while not Data.workcompanies.Eof do begin Application.ProcessMessages; Data.Companies.Edit; Data.Companies.FieldByName('UCapital').AsCurrency:=Data.WorkCompanies.FieldByName('UCapital').AsCurrency-1; Data.Companies.Post; Data.companies.Next; Application.ProcessMessages; // это надо делать в цикле иначе толку мало end; Data.enableControls; //включаем отображение наших действий на форме // Application.ProcessMessages; end; Application.ProcessMessages; считывать сообщения сисьемы из очереди и исполняет их, приложение ето делает постоянно но при больших циклах ето делаеть после них и приложения перестають пририсувиватся ... и т.д. Data.enableControls; все контролы (TDBGrig) которые выводять инфо из дата сета не обновляются (при этом значения на пропадають). команди типа next не приводат к изменению положения курсара идеальный вариант этот кусок вывести в отдельный поток. |
|||
|
||||
| MrForget |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 5 Регистрация: 30.4.2006 Репутация: нет Всего: нет |
Спасибо, за код. Очень пригодился. Но прога все равно подвисает. НИчего не могу с ней поделать. Хотелось бы, чтобы юзер мог выделять любую строку в DBGrid.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |