Конференція vbstreets - перегляд теми - ms access - як вказати - в якому полі робити пошук

Добрий день.
Потрібно зробити на формі пошук даних в БД за першими літерами прізвища / імені / по батькові. Для цього є 3 радиокнопки, к-ми вибирається - де шукати - в "Прізвище", "Ім'я", "По батькові", поле для введення шуканого фрагмента і кнопка "Знайти далі". Знайшов функції FindRecord і FindNext, але щоб пошук йшов в конкретних полях, а не у всіх, треба вибрати це поле. Як це зробити? У FindRecord можна вказати шукати тільки в поточному полі, але як його зробити поточним?

Використовуй метод Find рекордсета, а не форми.

Lasciate ogni speranza, voi ch'entrate.

Схоже, доведеться використовувати FindFirst, а не FindRecord, так як останній прив'язується до елементу управління, у к-го був фокус.

Використовуй метод Find рекордсета, а не форми.


RecordSet.Find? Спробую, про результати повідомлю.

Код: Виділити все Dim rst As Recordset
Dim strCriteria As String

strCriteria = "# 91; Прізвище # 93; = 'Юр'єва'"
Set rst = CurrentDb.OpenRecordset ( "Надходження і виписка"). 'хворих
rst.Find strCriteria
каже - "Type mismatch" на другому рядку.

Так на FindFirst лається або на Find?

А запит правильно писати так: "SELECT Ім'я, Прізвище FROM [Надходження і виписка]"
І на майбутнє. Називати об'єкти в базі MS Access по-російськи і з пробілами - поганий тон. Але коли назвав, то в запитах бери імена в квадратні дужки.

dormouse писал (а): а чим поганий стандартний пошук акцесса? <.>


Він чудовий, але Вам може знадобитися у Вашій програмі виконати пошук без участі користувача. Або може знадобиться зробити діалог пошуку відразу по декількох полях (мені мільйон разів доводилося). Або навіть класичний приклад - пошук запису в поточній формі за значенням якого-небудь елемента управління - combobox або textbox.

Перепрошую що так довго мовчав, вирішив відкласти. Відклав (яйця) пошук, але все таже проблема з RecordSet'ом:

Код: Виділити все Private Sub Button1_Click ()
Dim RS As Recordset
Dim fldNotes As Field
Dim N As Integer
Set RS = CurrentDb.OpenRecordset ( "# 91; Надходження і виписка # 93;")
Set Field = RS! # 91; Виписка # 93;
Do Until RS.EOF
N = N + 1
RS.MoveNext
Loop
End Sub
пише:

Run-time error '3078':
Ядро бази даних Microsoft Jet не може знайти вхідні таблицю або запит '[Надходження і виписка]'. Перевірте правильність імені.


Перевірив, так і записано. Якщо прибрати лапки, то пише:

Run-time error '2465':
Додатком 'Microsoft Access' не вдається знайти поле '|', вказане в вираженні.


Без квадратних дужок теж щось пише, ось тільки не записав шкода.

Я думаю, проблема в ANSI і UNICODE. Коли я скопіював макрос в блокнот, то на місці українських букв з'явилися вертикальні смужки. Заміна імені таблиці на латинські символи нічого не поміняла.

Dim rst as DAO.Recordset

як варіант з використанням вбудованого пошуку зі стандартним діалогом (Ctrl + F). воно какбе дружелюбно до користувача ..


Ось тільки там можна вибрати - в якому полі шукати.

AndreyMust19 писал (а): Код: Виділити все Set RS = CurrentDb.OpenRecordset ( "# 91; Надходження і виписка # 93;")


треба написати повне вираження в синтаксисі SQL. а одне поле з невідомо якою таблиці - це, як грится, на село до дідуся.

AndreyMust19 писал (а): dormouse

як варіант з використанням вбудованого пошуку зі стандартним діалогом (Ctrl + F). воно какбе дружелюбно до користувача ..


Ось тільки там можна вибрати - в якому полі шукати.

я там же написав, що перед викликом діалогу пошуку, треба виконати команду Поле.SetFocus. А діалог налаштувати на пошук в поточному полі

треба написати повне вираження в синтаксисі SQL. а одне поле з невідомо якою таблиці - це, як грится, на село до дідуся.

треба виконати команду Поле.SetFocus.


Ось, тому що це пошук в серед елементів управління, а не в базі даних - я так вже Пробував. Отже Пошук буде шукати тільки в поточному записі.

По частині Код: Виділити все Dim rst as DAO.Recordset
спочатку спробуй, потім вже заперечуй, посилаючись на приклади.

Ще раз здрастуйте.
Нарешті вирішилась проблема. Лаявся цей Access на все, що я йому писав і незрозуміло - де саме помилка. Значить - помилка не там, де я шукаю. Треба було підключити компонент Microsoft DAO В "Сервіс-> Посилання" і використовувати тип DAO.Recordset. Нарешті все вийшло! З усіх VB і VBA цей - вийшов для мене найскладніший. Спасибі всім за поради, коли дороблю БД, викладу сюди найцікавіше з неї, щоб інші не парилися, а знайшли в пошуку те, що шукали.
Щодо навчання ви маєте рацію - потрібно спочатку навчитися тримати сокиру, перш ніж рубати дрова. Але якщо мені треба зрубати одне дерево, я краще зрубаю його абияк, ніж кілька днів вчитися як рубати дерева, коли я його зрубаю всього за 20 хвилин. Потрібно було тільки розібратися - в чому була помилка в MS Access, не вникаючи в подробиці.