![]() |
|
Модераторы: Akina |
![]()
|
|
| Laky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
В общем-то задача до боли проста: находить запись в таблице, удовлетворяющая условию, а в другую заносить значение какого-либо поля этой записи.
Используем FindFirst с условием для нахождения начинаем цикл Do с условием прекращения: конец файла делаем все, что нам хочется используя FindNext переходим на следующую запись
Все хорошо, и все замечательно, если бы цикл не зацикливался.... на последней строке.... Все необходимые строки выводятся как и положено, но как только появляется последняя строка, данные по ней заносятся во вторую таблицу...а потом еще раз...а потом еще и так до бесконечности. Не отрицаю возможность простой неграмотности в синтаксисе, извините за ошибки), подскажите, что нужно подправить? Просьба не предлагать запрос) задача нужна именно для понимания правильности составления подобного цикла. Заранее говорю большое спасибо |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
И правильно, что зацикливается. Надо справку читать не по диагонали, а всю. Особенно примеры.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| bopoha |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
EOF при поиске будет работать только для библиотеки ADODB.
|
|||
|
||||
| Laky |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Очень много времени ушло в пустых поисках. Если есть хорошая ссылка на примеры (касательно любой области VBA), большая просьба поделиться, ибо много еще предстоит найти и сделать.
Можно ли этот момент поподробнее, ибо как раз хотелось уточнить, что tb.NoMatch действительно очень логично, но почему же конец файла игнорировался... Цикл был усложнен: теперь запись с активностью ищется с конца файла к началу, после нахождения запоминается её номер затем во вложенном цикле в этой же таблице ищется этот номер в другом столбце, и все записи (то есть их значения), у которых этот номер есть, записываются во вторую таблицу. Цикл работает, работает правильно, не циклится. Из-за вложенного цикла пришлось добавить запоминание текущей строки и возвращать, чтобы перейти на следующую запись во внешнем цикле. Во втором цикле tb.EOF......................
Есть ли замечания? Все мысли и комментарии приветствуются, нужны и ценны Это сообщение отредактировал(а) Laky - 16.12.2008, 21:03 |
||||||
|
|||||||
| bopoha |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1283 Регистрация: 10.5.2006 Где: Беларусь, Минск Репутация: 21 Всего: 21 |
Потому что FindFirst ищет всегда сначала, если нужно с текущей, то это FindNext.
Помойму эту задачу можно решить запросом, просто и красиво. И, наверное, быстрее. Добавлено через 3 минуты и 5 секунд Как-то так:
|
||||||
|
|||||||
| Laky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Не понятно, зачем вы это пишете) Конечно, для последовательного нахождения начинаем с помощью FindFirst, в потом продолжаем с помощью FindNext. И, по сути, к FindFirst не обращаемся до следующеговызова. Что касается сделать это запросом.....ну мне, честно, проще кажется делать это аккуратным циклом с тройным вложением (каким он и будет чуть позже) Ибо подготовительные запросы, потом итоговые....да и потом....я делаю поиск в 1 таблице 2 раза...а для этого надо, как вы абсолютно правильно подсказали, таблицу к самой себе inner join если так можно выразиться, простите)) слишком сложный запрос получится, согласитесь Еще раз прошу объяснить: как происходит процесс при поиске с условием когда встречается конец файла. Ведь он же его "видит"? в условии оговорено....встретился конец файла, ну так, прерывай цикл и будь молодцом. Почему же не стопорится? Это сообщение отредактировал(а) Laky - 16.12.2008, 21:54 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 30 Всего: 454 |
MSDN собсно... да и встроенной справки вполне достаточно - NoMatch, например, там описан, и пример есть. А потому что он НЕ ДОСТИГАЕТСЯ! Логика FindNext какая? Искать заданное, если найдено, изменить указатель... а если не найдено? он остается там, где и был! Вот в АДО логика иная - сместить указатель, проверить, если подошло, остановиться и сообщить. Вернее, дело не в АДО/ДАО, а в том, что АДО, если не указано иначе, использует Forward-like, а ДАО - Dynaset-like рекордсеты. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Laky |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 23.6.2007 Репутация: нет Всего: нет |
Спасибо! теперь ясность во всем.
|
|||
|
||||
![]()
|
| Правила форума "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. |