![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| 78125 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Что имеется
Имеется БД Access в которой есть следующие поля МАРКАСТАЛИ, ЦЕНА, КОЛВОНАСКЛАДЕ, ДЛИНА Что требуется Если несколко строк имеют одинаковые параметры МАРКАСТАЛИ, ЦЕНА, ДЛИНА то необходимо оставить только одну в которой будет сумма КОЛВОНАСКЛАДЕ всех строк. Как реализовывал я СПОСОБ1 Проиндексировал поля, при этом по моему мнению строки с повторяющимися поллями стоят рядом После последовательное сравнения ближайших двух строк, если совпали дну удалить, в предыдущую записать сумму масс. Недостаток После индексации не всегда одинаковые строки стоят рядом. СПОСОБ2 Последовательный перебор Недостаток Медленно, на 2000 записей уходит 8-10 минут СПОСОБ3 Пробовал применять фильтр, в отфильтровнном дивпазоне удаляем все строки, кроме одной, в которую пишем сумму масс. Недостаток Фильтр работает только с инедексированными полями, причем поля типа МАРКАСТАЛИ не признает по поводу языка и берет только первую букву М?? Внимание вопрос как реализовать мою задачу? Принимаются любые работающие алгоритмы. --------------------
купим подпись |
|||
|
||||
| Alex101 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 2 Всего: 10 |
Через SQL запрос... Ежели на ходу говорить, то выбираешь все записи, в которых марка стали равна марке в первой записи, затем считаешь сумму, после этого надо удалить такие записи... Не, так плохо.
В общем, структура данных плохая, должна быть еще одна таблица, содержащая марки стали, причем каждая запись должна быть уникальной, тогда вся работа сведется к подсчету суммы в первой таблице записей, отобранных по марке стали из второй таблицы. -------------------- С уважением, А. Фролов. |
|||
|
||||
| 78125 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
Ну что блин и идей больше нет?
--------------------
купим подпись |
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Это ведь какая-то программа в которую вводят данные и т.п.? Надо сделать послдовательный перебор, но 1 раз. А потом при пользовательском вводе проверять его данные.
|
|||
|
||||
| 78125 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
никакая это не программа есть два mdb файла дак вот в файле 1 сидит инфа с повторениями и тд а необходимо в файл 2 перенести без них вот и все те сначала программа по опр параметрам переносит 1 таблицу и рассовывает ее по нескольким разным таблицам в файле 2 (и делает некоторые другие преобразования но это не важно) а уж после смотрит таблицы в базе 2 и ищет повторения --------------------
купим подпись |
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Т.е. критичен параметр - скорость поиска? Если не критичен, то применяй вышеуказаный способ (перебор). Если критичен, то всё равно применяй вышеуказанный способ, т.к. другого нет.
PS: и почему так важна скорость? Если это надо сделать всего 1 раз? |
|||
|
||||
| 78125 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
нет нет сию операцию над файлами надо производить несколько раз в день и скорость имеет значение --------------------
купим подпись |
|||
|
||||
| acp |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 389 Регистрация: 4.2.2003 Где: Владимир Репутация: нет Всего: 2 |
Могу предложить использовать "мультиключ" (не знаю как эта штука называется по правильному). Суть в чём - ключ представляет собой не какое-то значение - уникальный идентификатор, а представляет собой уникальный идентиф. основанный на существующих записях. Т.е. примерно это означает, что ключ = МАРКАСТАЛИ + ЦЕНА + ДЛИНА. Естественно в строковом представлении, или можно было беы реализовать более оптимально введением доп. таблиц с идентификаторами марок. Если в аццесе такое (мультиключ) не поддерживается ( что очень вероятно), то его можно эмулировать путём дорбавления дополнительного поля и сведением в это поле всех твоих данных.
Так вот, к чему я веду, при индексации по такому ключу, одинаковые записи будут находиться рядом... PS: почему эта тема не в форуме "БД"? Это сообщение отредактировал(а) acp - 6.2.2003, 23:10 |
|||
|
||||
| 78125 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 198 Регистрация: 20.1.2003 Где: Санкт-Петербург Репутация: нет Всего: нет |
"мультиключ"
Звучит красиво - попробую. --------------------
купим подпись |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |