![]() |
Модераторы: Akina |
![]() ![]() ![]() |
|
patq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
Работаю в Access 97.
Возникшую проблему объясню на условном примере. Есть таблица, содержащее пять полей, в которых хранятся данные о приборах. Одно поле числовое – указывает номер подразделения где стоит прибор. Другие текстовые – содержит данные о приборах. Требуется вывести перечень наличия приборов в подразделении. Например: вольтметр В1, В7, генератор Г5, Г8, …и т.д. Для вывода требуемых данных в отдельной форме указывается диапазон подразделений, выводимые поля (одновременно может выводиться любое кол-во полей). Мои алгоритмы решения поставленной задачи: Алгоритм 1: - в запросе 1 по диапазону подразделений выбираю требуемые записи, - в запросе 2 (см. ниже *1) сортирую отфильтрованные записи по возрастанию номера подразделений и содержимого полей. В него вставил написанную функцию (см. ниже *2), куда заносил содержимое полей текущей строки. В функции заносимые значения обрабатывались, лишние отбрасывались, формировался перечень и выдавался в запрос. При начале нового подразделения перечень обнулялся. С каждой записью внутри подразделения содержимое перечень увеличивался, - в запросе 3 группирую отсортированные записи по номеру подразделения и использую функцию Last выводил сформированный перечень Запустил запрос 3: получил не то что хотел. Стал отлаживать и увидел, что запрос посылает в функцию строки не последовательно, как видно при просмотре, а по какому-то непонятному алгоритму. Подскажите: как заставить запрос последовательно вводить строки в функцию. Алгоритм 2: Реализовал все это программно. На маленьком объеме записей (< 100), все работает великолепно. При увеличении кол-ва обрабатываемых записей время работы увеличивается в геометрической прогрессии. При обработке всей таблицы и суток не хватит Подскажите: как ускорить процесс работы программы. !!!!!!! может у Вас есть другие варианты решения этой трудности С уважением ко всем, почтившим меня вниманием. PS. Хотел как быстрее, а получилось как всегда. Подскажите как можно редактировать тему и расширение темы. Еще раз с уважением Это сообщение отредактировал(а) patq - 27.1.2005, 10:05 |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Трёхнуться можно!!! на х... было получать несортированный рекордсет, чтобы потом его сортирить вручную??? на х... было получать все записи, чтобы отбрасывать ненужные вручную??? Одним запросом можно и нужно сразу отобрать нужное, отсортировать в нужном порядке и отобрать нужное количество.
а с чего это ты вдруг решил что он обязан выдать тебе строки в том порядке, в каком ты хочешь? программа - она дура, и делает то что ты сказал, а не то что ты хотел... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
Guest |
|
||||
Unregistered |
Да прав народ, поспешность нужна только при ловле блох. Это я про себя: написал сообщение, предварительно не просмотрев, а увидел в форуме и АХнул (обрезано ... и т.д.).
А теперь по существу
Это делается в запросе, к сожалению он не убрает повторяющиеся поля, и не компонует в удобочитаемом виде. А для каждого человека требуются разные поля из таблицы, и если для каждой комбинации писать запросы, да все увязывать, что б выдаваемые портянки были покороче - это ж какой объем работы, а тут небольшой модулек, принимающий записи, проверяющий установленные флаги и отбрасывающий лишнее.
Наверное к хорошей жизни привыкаю, да и когда использую этот подход при добавлении записей в таблицу запрос работает как надо. |
||||
|
|||||
Akina |
|
||||||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
добавь distinct
ты о чем? запрос готовит данные, а не их вид.
а динамически сформировать SQL-строку и выполнить ее типа не судьба? вообще-то именно так обычно все и делают, не полагаясь на статические запросы...
Это фича, но не алгоритм. Полагаться на нее не следует. В БД не существует порядка физического расположения записей - это надо всегда помнить и никогда на это не надеяться. Для того и существует order by, чтобы на грабли не наступать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||||||
|
|||||||||
patq |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
Этим не уберешь одинаковые поля в разных записях
Так я делал в другой программе, здесь функций поставленная задача решается проще
Да так и подготавливались записи перед подачей данных в функцию. А другие варианты решения есть. С уважением, patq! |
||||||||
|
|||||||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Если речь о том что записи разные, но выбранные поля содержат одинаковые значения - то group by А если честно, то я например до сих пор не понимаю что ты пытаешься сотворить... мутно все как-то... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
patq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
Вопрос: как заставить Access в запросе, содержащем функцию, выдавать в эту функцию содержимое записей в том же порядке, который Access показывает при просмотре этого несчастного запроса на дисплее. Попытки сортировать записи как в запросе с функцией, так и предварительно, без использования сортирови в запросе с функцией дали одинаковый результат. Записи в функцию поступали произвольно. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Почему такое требование? не пофиг в каком порядке их обрабатывать? тогда временная промежуточная таблица (или запрос) адназначна. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
patq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
Назначение функции: вводить содержимое полей, помеченных для вывода в отдельной форме, в итоговую сводную строку. На выходе функции присваивается значение итоговой строки. В функции просматриваются поля записей и сраванивается с аналогичными полями предудущей записи, если поле идентично полю предыдущей записи то оно не выводится в итоговую запись. Здесь важен порядок поступления записей. Для этого я и делаю сортировку записей в запросе. !!!! Претензий к функции нет, она махонькая и работает. |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
Тогда ты ОБЯЗАН сперва ПОЛУЧИТЬ ОТСОРТИРОВАННЫЙ РЕЗУЛЬТАТ ЗАПРОСА, и только потом скармливать его функции.
А ты желаешь дергать функцию в процессе выполнения запроса, когда данные еще не отсортированы и (возможно даже) не отобраны. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
patq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
![]() Мои попытки в этом направлении (об этом было сказано выше, но можа что я не понимаю, поэтому повторюсь): - сортировал в запросе, где установлена функция - сортировал в отдельном запросе. В запросе с функцией вызывал запрос в котором сортировал ![]() |
|||
|
||||
Akina |
|
|||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
не, ты должен сделать сортирующий запрос, получить рекордсет и программненько скармливать его своей функции...
Или попробуй вложенные запросы - внутренний сортирующий и внешний обрабатывающий... но у меня большие сомнения. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
patq |
|
|||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
![]() С уважением, patq |
|||
|
||||
Akina |
|
||||
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
patq |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 27.1.2005 Репутация: нет Всего: нет |
![]()
![]() С уважением! |
||||||||
|
|||||||||
![]() ![]() ![]() |
Правила форума "MS Access" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS Access | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |