![]() |
|
|
![]()
|
|
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Проблема следующая. Есть форма с гридом и MainFIBDataSet'ом.Transation = MainFIBTransaction, у которого 4 колонки. Данные в этот грид вносятся не напрямую, а через модальную форму с четырьмя Edit'ами. Все эти четыри Edot'a напрямую с колонками грида не связаны, это сделано за тем, чтобы вводимые пользователем данные в Edit'ы не отображались сразу же в колонках. После нажатия кнопки OK модальной формы выполняется запрос(update или insert) в отдельном TFIBDataSet'e, у которого в качестве транзакции используется такая же транзакия, что и у MainFIBDataSet'ом, а MainTransaction.
После закрытия модального окна внесенные данные сразу в строке грида не отображаются и приходится делать:
Если записей в гриде много ~>10000 MainFIBDataSet.Locate - приводит к торможению. Поэтому возникает вопрос - как сделать так чтобы данные внесенные в мод. форму сразу после нажатия "OK" отображались в гриде. Все это позволит избежать использования MainFIBDataSet.Close; MainFIBDataSet.Open; MainFIBDataSet.Locate(KeyName, KeyValue, []). Желательно без CacheUpdate так как мои FIBs их не поддерживают должным образом. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
наверное только так, как ты и делаешь, только ты неправильно делаешь, что выводишь в грид все 10 тысяч записей, выбирай по определенному условию: по дате, например.
|
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
убил свой предыдущий пост, показалось - неправильно понял вопрос.... и всё таки попробуй
само по себе это здорово ускорит переоткрытие на нескольких десятках тысяч записей. если оно не ускорит, то надо иметь в виду, что сам по себе любой запрос открывается мгновенно, даже если он содержит миллионы записей. открытие будет медленным только в том случае, если запросе используются агреггиррованные функции, какие-то сортировки и пр. - что-то, что заставляет СУБД фетчить его весь при первом же открытии. тупой "select" - всегда отработает моментально и без проблем. поэтому для ускорения переоткрытия имеет смысл переделать сам запрос. как вариант - поиграться с просмотром, который хранится в СУБД в уже откомпилированном виде. Это сообщение отредактировал(а) x77 - 6.12.2006, 13:05 -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Процер уходит на сотку именно на: MainFIBDataSet.Locate(KeyName, KeyValue, []) Locate я использую именно для того, чтобы вставь на предыдущую запись. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Delphist, насколько я понял, MainFIBDataset, как раз, и привязан к гриду. если визуализация контролов не отключена - её надо обязательно отключить. Locate должен работать быстрее, тем более, что ключевое поле всегда индексировано.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Да и так я ставлю MainFIBDataset.DisableControl и MainFIBDataset.DisableScrollEvents; Все равно медленно -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
да вы сами подумайте - 10 тысяч записей загрузить и искать среди них. А памяти сколько сжирают они...
Как по мне, так это неправильная реализация. Нужно показывать меньше записей. |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Вообщем это нормальное явления, когда на 10000 записях проявляются торможения. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
ставь проц помощнее и памяти побольше, и винт побыстрее
|
|||
|
||||
| Alex |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4147 Регистрация: 25.3.2002 Где: Москва Репутация: 17 Всего: 162 |
Многие ответ сочтут грубым, но Delphist, перечитай мануалы по FIB+ и тутже поймешь, что ты изобретаешь велосипед, люди не просто так дают тебе для DataSet задать две транзакции, читающую и пишущую, не просто так дают тебе кучу настроек поведения DataSet после добавления, удаления и редактирования записей.
PS: Ты уже не первый год пользуешься библиотекой, а взять и элементарно прочитать документацию досихпор не можешь... -------------------- Написать можно все - главное четко представлять, что ты хочешь получить в конце. |
|||
|
||||
![]()
|
| Правила форума "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. |