Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Навигация по НД [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 и делать все запросом


Наверх

Титульная страница Поиск, карта сайта Написать письмо