Форум программистов, компьютерный форум, киберфорум
Наши страницы

MS Access

Войти
Регистрация
Восстановить пароль
 
 
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
#1

Сложный поиск в форме Access Средствами VBA - MS Access

19.05.2018, 19:28. Просмотров 271. Ответов 15
Метки нет (Все метки)

Здравствуйте, подскажите если есть возможность. Ситуация такая, есть форма, на ней отображаются данные одной записи, переход между записями есть по кнопкам, но возникла потребность организовать поиск по записям. Т.е. есть Поле куда вбиваешь информацию и кнопка после нажатия которой по информации из поля находилась бы запись и в форме к ней осуществлялся переход. Перепробовал несколько способов и через ADODB и через DAO нечего не выходит пока. Сам в VBA новичок, только пытаюсь разбираться.
Желательно что бы поиск осуществлялся по всем столбцам , но если получится хотя бы по одному будет уже круто (поля в этом столбце не уникальные)
Прилагаю код мутанта который не работает:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Найти_Click()
Dim rst As ADODB.Recordset
 
Set rst = New ADODB.Recordset
'Set rst = CurrentDb.OpenRecordset("Услуга", dbOpenDynaset)
'With rst
  'rst.MoveFirst
  rst.Find "ФИО_пациента ='" & Me.Поиск.Value & "'"
  ', , adSearchForward
 ' If .NotMatch Then
 ' MsgBox "Не найдено!"
'  End If
'End With
Set rst = Nothing
 
End Sub
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2018, 19:28
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сложный поиск в форме Access Средствами VBA (MS Access):

Поиск значения в ленточной форме средствами VBA - MS Access
Есть ленточная форма со списком товаров и их количеством. В одно поле формы считывается штрих код, далее необходимо, что бы происходил...

Добавление и удаление полей в форме средствами VBA - MS Access
Есть запрос Есть форма, созданная на основании этого запроса Форма открывается в табличном виде Нужно средставами VBA...

Создание .xml средствами VBA Access - MS Access
Подскажите как создать файл экселевский с помощью VBA в среде Access!!!

Назначение принтера отчету средствами VBA Access - MS Access
Есть отчет его нужно распечатать на принтере по умолчанию и принтере doPDF. Как прописать код VBA что-бы при нажатии кнопки отчет улетал на...

Импорт листа из экселя в отчет access средствами vba - MS Access
Всем привет. Подскажите как написать программу, которая при нажатии на кнопку в форме access-а выводила в отчет accessa информацию(весь...

Отсортировать Excel от я до а по столбу из Access средствами VBA перед импортом - MS Access
Доброго времени суток. Возникла проблемка. Необходимо сделать сортировку в Excel перед его импортом в Access. Access ругаеться на...

15
Capi
1537 / 777 / 137
Регистрация: 12.06.2016
Сообщений: 1,615
19.05.2018, 19:40 #2
Цитата Сообщение от Folkan13 Посмотреть сообщение
Visual Basic
1
rst.Find "ФИО_пациента ='" & Me.Поиск.Value & "'"
Visual Basic
1
2
3
4
5
6
Witn Me.Recordset
  .FindFirst "ФИО_пациента ='" & Me.Поиск & "'"
  If .NotMatch Then
    MsgBox "Не найдено!"
  End If
End With
0
mobile
Эксперт MS Access
22444 / 12762 / 2596
Регистрация: 28.04.2012
Сообщений: 13,953
19.05.2018, 19:48 #3
Если в форме есть поля с нужной инфой, то гораздо проще и эффективней делать поиск в рекордсете формы. При успешном поиске запись автоматом встанет на найденную запись
Visual Basic
1
2
3
4
5
6
with Me.recordset
  .findfirst "ФИО_пациента ='" & Me.Поиск & "'"
  if .NoMatch then
    MsgBox "Не найдено!"
  end if
end with
Добавлено через 1 минуту
Аппаздал
1
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
19.05.2018, 19:53  [ТС] #4
mobile, По Вашему варианту пробовал ранее пишет "Ошибка синтаксиса (пропущен оператор) в выражении
Форма выглядит вот так https://i.gyazo.com/0eccb79547428f57c5012eb142ac7439.png
0
shanemac51
Модератор
Эксперт MS Access
7730 / 2948 / 418
Регистрация: 07.08.2010
Сообщений: 8,044
Записей в блоге: 1
19.05.2018, 20:06 #5
без примера базы не видно совпадают ли возвращаемое значение в строке поиска и таблице
и нужны ли там кавычки

--в таблице у вас текстовое поле
--в поле поиска --поле со списком и неясно, что оно возвращает
0
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
19.05.2018, 20:35  [ТС] #6
Таблица выглядит вот так, форма к ней
https://i.gyazo.com/fae86034f067bdd025b968b7f864dae8.png
https://i.gyazo.com/8d963fde8bba57ad3decb760470d4468.png

Поле со списком сделал для удобства в нем отображается запрос уникальных значений столбца "ФИО пациента".
0
shanemac51
Модератор
Эксперт MS Access
7730 / 2948 / 418
Регистрация: 07.08.2010
Сообщений: 8,044
Записей в блоге: 1
19.05.2018, 20:56 #7
увы, без базы волшебный шар ошибковидения не работает

какой тип вашей базы
--производственный
--студенческий

а также
--есть ли в таблицах поля подстановки
--сколько услуг может быть на 1-го пациента или все оплачиваются разными чеками
0
Capi
1537 / 777 / 137
Регистрация: 12.06.2016
Сообщений: 1,615
19.05.2018, 21:09 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
.....в нем отображается запрос уникальных значений столбца "ФИО пациента".
Значит, нужно искать не в ФИО_пациента, а в [ФИО пациента].
Visual Basic
1
  .FindFirst "[ФИО пациента]='" & Me.Поиск & "'"
2
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
19.05.2018, 21:37  [ТС] #9
Capi спасибо! ЗАработало! Но такой момент, так как ФИО в таблице значение не уникальное, и одному ФИО может соответствовать несколько записей, как бы дописать программу что бы она скажем при повторном нажатии осуществляла переход на следующую запись относящуюся к тому же ФИО?
0
Capi
1537 / 777 / 137
Регистрация: 12.06.2016
Сообщений: 1,615
19.05.2018, 22:33 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Visual Basic
1
  . FindNext "[ФИО пациента]='" & Me.Поиск & "'"
Пожалуйста.
Но для "спасибо" здесь есть также специальная кнопочка.

Добавлено через 11 минут
Пробел между точкой и FindNext образовался случайно.
Он не нужен.
2
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
20.05.2018, 13:53  [ТС] #11
Спасибо еще раз (специальную кнопочку вроде нажал)!
Получилось примерно так
Visual Basic
1
2
3
4
5
6
7
8
9
With Me.Recordset
If Me.ФИО_пациента.Value = Me.Поиск.Value Then
    .FindNext "[ФИО пациента] ='" & Me.Поиск.Value & "'"
 Else: .FindFirst "[ФИО пациента] ='" & Me.Поиск.Value & "'"
  If .NoMatch Then
    MsgBox "Не найдено!"
  End If
  End If
End With
0
Capi
1537 / 777 / 137
Регистрация: 12.06.2016
Сообщений: 1,615
20.05.2018, 17:11 #12
Folkan13,

У Вас проверка на NoMatch выполняется только при первом поиске (для FindFirst),
а при последующих (для FindNext) ее нет.
Это так и задумано?
0
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
20.05.2018, 17:52  [ТС] #13
Ну смотрите если ФИО найдено то при следующем нажатии кнопки условие FindNext выполняется и мы идем дальше уже по этому же ФИО (Если есть еще записи по тому же ФИО). А когда эти записи заканчиваются, нажатие просто ни к чему не приводит. По сути проверка на NoMatch нужна только в самом начале если FindFirst ничего не найдет.
Единственное что сейчас до меня дошло, не плохо было бы что бы после нахождения последнего значения через FindNext он не упирался в конец таблицы, а уходил к первой записи. Что бы по сути с одним критерием поиска, при многочисленных нажатиях кнопки "Найти" циклично просматривались бы все подходящие записи.
0
Capi
1537 / 777 / 137
Регистрация: 12.06.2016
Сообщений: 1,615
20.05.2018, 18:03 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Folkan13,

Для такого "зацикливания" попробуйте так (показываю условно):
После FindNext -> If NoMatch Then FindFirst с тем же условием.
1
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
20.05.2018, 18:22  [ТС] #15
Capi,
Да сработало!
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
With Me.Recordset
If Me.ФИО_пациента.Value = Me.Поиск.Value Then
    .FindNext "[ФИО пациента] ='" & Me.Поиск.Value & "'"
    If .NoMatch Then
    .FindFirst "[ФИО пациента] ='" & Me.Поиск.Value & "'"
    End If
Else: .FindFirst "[ФИО пациента] ='" & Me.Поиск.Value & "'"
If .NoMatch Then
    MsgBox "Не найдено!"
  End If
  End If
End With
Вот так работает.
0
20.05.2018, 18:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2018, 18:22
Привет! Вот еще темы с ответами:

Поиск по нескольким параметрам без использования VBA (только средствами SQL) - MS Access
Есть БД недвижимости и договоров. Нужно сделать многофакторный поиск по объектам, который ищет по нескольким факторам (цена, площадь и т...

Access + VBA: итоговая сумма по подчиненной форме - MS Access
Привет всем форумчанам и гуру в VBA + Access, кто сможет подсказать и помочь много тем не охота создавать. Общим вопрос такой, на...

Посимвольный поиск в форме, VBA. Усовершествование кода - MS Access
День добрый коллеги! Пользуюсь в форме вот таким рабочим кодом. Есть минусы: - не работают пробелы (нужно при поиске контрагента -...

Access 2003 VBA поиск - MS Access
Дали задание создать VBA поиск по 3 значениям. В базе sport_club поиск в форме "poskuk", выводит лишь первые 2 поля вместо 3-х,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru