![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Навигация по НД [D7, XP]
RomanH © (2006-08-01 17:36:00)Мастера подскажите как сделать.Имеется таблица 1 400 000 записей.
Проиндексирована по первичному ключу.
Процедура Locate('tovar_id',10000,[]); работает очень медленно.
Может существуют другие методы навигации по НД
(НД -IBDataSet)
Sergey13 (2006-08-04 16:56:00) [1]Или вообще постороить несколько иерархой с разными начальными условиями и принципами почкования. Интересная задача, кстати.
Sergey13 (2006-08-04 16:49:00) [2]Кстати производителя вполне можно добавить к иерархии категорий последним уровнем например.
Ega23 (2006-08-04 16:42:00) [3]Иерархическую структуру более детализируй. Оптимально - 20-100 записей.
Desdechado (2006-08-04 16:37:00) [4]> Но и по 100 000 записям Locate не уместен
Вводи еще дополнительные ограничения, которые могут послужить фильтром для уменьшения кол-ва показываемых позиций.
Например, ценовой диапазон, наличие на складе, срок гарантии, материал... Тебе виднее по предметной области.
Sergey13 (2006-08-04 16:37:00) [5]> [9] RomanH © (04.08.06 16:32)
Сделай категории более избирательными, тем более, что они у тебя деревянные. Неужели у тебя может быть 100000 разных карбюраторов?
RomanH (2006-08-04 16:32:00) [6]
> Sergey13 ©
Да можно выбирать еще и по производителям товара.Записи клиенту уменьшаются.Но и по 100 000 записям Locate не уместен.Как мне производить навигацию по НД вводя код производителя.
Sergey13 (2006-08-04 13:14:00) [7]> [4] RomanH © (04.08.06 10:53)
Добавь еще табличку "Производители", оформи ее на форме аналогично Категории, и в запрос к Товару добавь второй параметр (возможно с реакцией запроса на NULL в этом параметре).
Ega23 (2006-08-04 11:31:00) [8]Ну, в принципе, ты уже всё решил. Выбрал категорию - подзапрос в базу по товарам данной категории.
Просто категории надо более детально прорабатывать.
RomanH (2006-08-04 11:20:00) [9]
> Ega23 ©
Это не секрет.Справочник по автомобильным зап.частям и комплектующим.
По этому когда мы выбираем Масло клиенту не должны высвечиваться стартеры и аммортизаторы.Подскажите пожайлусто как решить задачу(Вы мне не раз уже помогали).
Ega23 (2006-08-04 11:06:00) [10]
> Так вот в обработчике события Category.AfterScroll я обновляю
> Tovar.
Зачем? Про Master-Detail никогда не слышал?
Вообще-то странно предположить такой реестр товаров...
Что это, если не секрет?
RomanH (2006-08-04 10:53:00) [11]Мастера, поясню задачу.(Ни как не могу сообразить как SQL использовать в данном случае.):
Имеется таблица Category(Категория товара) и таблица TTovar(1 400 000 записей)
Category(IBDataSet(select * from category))-отображается в KADaoDBTreeView.
Tovar(IBQuery (select * from tovar where tovar_category_id=:category_id))-
отображается DBGride.
Так вот в обработчике события Category.AfterScroll я обновляю Tovar.
Где выбираются товары выбранной категории.То есть колличество записей уменьшается.
Задача В Edit1 вводим номер производителя товара.Нажимаем Button.
После чего в том же DBGrid'e курсор должен передвинуться на найденную или похожую запись и отобразить остальные записи.
Desdechado (2006-08-01 19:14:00) [12]> отсортировать на стороне сервера
Наверно, отобрать/выбрать.
SELECT * FROM tabl WHERE id=100
это вместо твоего Locate
Ega23 (2006-08-01 19:07:00) [13]Вот. Начинается. А зачем волочь ВСЕ 1400000 записей на клиент? Неужели нельзя отсортировать на стороне сервера?
StriderMan (2006-08-01 17:39:00) [14]Locate по такой огромной таблице это ужасно.
> (НД -IBDataSet)
переделать на IBQuery и делать все запросом