Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Folkan13
0 / 0 / 0
Регистрация: 19.12.2017
Сообщений: 9
#1

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

19.05.2018, 19:28. Просмотров 838. Ответов 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
Ответы с готовыми решениями:

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

Добавление и удаление полей в форме средствами VBA
Есть запрос Есть форма, созданная на основании этого запроса Форма...

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

Импорт таблиц из Excel в Access средствами VBA
Здравствуйте еще раз, продолжаю разбираться с MS Access и VBA. И появился еще...

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

15
Capi
1610 / 842 / 152
Регистрация: 12.06.2016
Сообщений: 1,806
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
22565 / 12883 / 2633
Регистрация: 28.04.2012
Сообщений: 14,089
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
7789 / 3007 / 427
Регистрация: 07.08.2010
Сообщений: 8,183
Записей в блоге: 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
7789 / 3007 / 427
Регистрация: 07.08.2010
Сообщений: 8,183
Записей в блоге: 1
19.05.2018, 20:56 #7
увы, без базы волшебный шар ошибковидения не работает

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

а также
--есть ли в таблицах поля подстановки
--сколько услуг может быть на 1-го пациента или все оплачиваются разными чеками
0
Capi
1610 / 842 / 152
Регистрация: 12.06.2016
Сообщений: 1,806
19.05.2018, 21:09 #8
Лучший ответ Сообщение было отмечено Folkan13 как решение

Решение

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

Решение

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
1610 / 842 / 152
Регистрация: 12.06.2016
Сообщений: 1,806
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
1610 / 842 / 152
Регистрация: 12.06.2016
Сообщений: 1,806
20.05.2018, 18:03 #14
Лучший ответ Сообщение было отмечено Folkan13 как решение

Решение

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
alvk
Эксперт MS Access
5559 / 3456 / 167
Регистрация: 12.08.2011
Сообщений: 8,759
23.05.2018, 02:58 #16
Фильтр - наше фсё!
1
23.05.2018, 02:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2018, 02:58

Импорт листа из экселя в отчет access средствами vba
Всем привет. Подскажите как написать программу, которая при нажатии на кнопку в...

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

Сверка имен PDF файлов с данными из Excel таблицы средствами Access VBA
Добрый день Уважаемые Форумчане, Помогите пожалуста в следующей задаче:...


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

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

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