powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в рекордсете ADO
20 сообщений из 20, страница 1 из 1
Поиск в рекордсете ADO
    #32201467
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В каком виде нужно указывать критерий для поиска в ADO-рекородсете ?
ADP 2000

rstDemand.Find "[DemandDate]='" & Format$(rstDemandImport![DemandDate], "mm\/dd\/yy") & "'", , adSearchForward, 1

Не работает, ругается, что аргументы имеют неверный тип и т.д.

Пробовал апострофы менять на # - то же самое.

При указании даты в WHERE для строки SQL вышеуказанная конструкция работает.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201524
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда работаешь через ADO с MS SQL Server дату в строку SQL можно подставлять в виде: 'yyyy-mm-dd'
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201526
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не уверен что пройдет в конкретном случае но можно попробовать так:

rstDemand.Find "[DemandDate]=" & clng(rstDemandImport![DemandDate]) -2 , , adSearchForward, 1
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201534
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просто небольшое предостережение по поводу преобразования даты в лонг. В случае если в поле хранится дата со временем могут быть некоторые неприятные моменты.
Вот пример на T-SQL:
Код: plaintext
1.
2.
3.
Declare @s varchar( 16 )
Set @s = '2002-02-02 23:40'
select cast(@s as datetime) as f1
, cast(cast(cast(@s as datetime) as int) as datetime)  as f2


ЗЫ: Хотя в данном случае скорей всего это сработает.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201560
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что показывает в Immediate Window
?rstDemand.Fields("DemandDate").Type
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201571
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего не понимаю.
Вот так по отдельности работает
rstDemand.Find "[DemandNum]='П-07-247'", , adSearchForward, 1
rstDemand.Find "[DemandDate]='2003-06-21'", , adSearchForward, 1
но мнне надо
rstDemand.Find "[DemandNum]='П-07-247' AND [DemandDate]='2003-06-21'", , adSearchForward, 1

Так не хочет :(
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201573
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rstDemand.Fields("DemandDate").Type
135
rstDemandImport.Fields("DemandDate").Type
7
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201574
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понимаю.
А это уже в хелп:

Only a single-column name may be specified in criteria. This method does not support multi-column searches.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201590
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И как же тогда в рекордсете ADO искать по нескольким полям ?
Два раза подряд делать rst.Find ?

В DAO можно было.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201592
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как же тогда в рекордсете ADO искать по нескольким полям ?
Два раза подряд делать rst.Find ?


Ага, наверное... Только сначала отсортироваться надо...
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201599
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вариант - Filter
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201601
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как же тогда в рекордсете ADO искать по нескольким полям ?
Соболезную
Используй свойство Filter
Например:
Код: plaintext
1.
2.
3.
4.
5.
rstDemand.Filter=  "[DemandNum]='П-07-247' AND [DemandDate]='2003-06-21'" 
if not  rstDemand.eof then
   'что-то нашли -может быть несколько записей соответствующих критерию
else
  'пусто
end if
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201613
VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку
Можно использовать сочетание Filter и Find
Сначала Filter по одному критерию ,потом Find по другому
перед применением Filter (или после) ставь
rs.Filter="" или rs.filter=adFilterNone 'отменяет предыдущее значение свойства
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201633
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не лучше ли создать хранимую процедуру?

Хотя я может и не знаю всей задачи целиком, но стоит ли в данном случае использовать поиск на клиенте?
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201648
Чумаков А.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем.
Сделал через Filter, все работает.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201666
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен с Senin Viktor
Можно еще и рекордсет сразу с условием открывать.
Действительно задача не известна, но это еще с DAO тянется - для поиска одной нужной записи открыть рекордсет, в нем по условию найти эту запись.

В клиент-серверной технологии нужно экономить с траффиком - открывать только те наборы записей, которые действительно нужны, а не тащить через сетку весь набор, а потом на клиенте в нем что-то искать.
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201685
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В клиент-серверной технологии нужно экономить с траффиком
Нипральна
Экономить с траффиком нужно и в файл-серверной архитектуре тоже.
Но в случае клиент-сервера это сделать можно
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201687
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, incold - а то у меня нужных слов не нашлось :)

Сам сейчас этим "мучаюсь" - все свои Find, Seek переделываю в ХП - занятие более чем увлекательное
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201714
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Необязательно все переделывать, кое-что можно и на рекордсетах оставить, только открывать их сразу с необходимым ограничением.

2 ALL
Может кому пригодится:
иногда нужно вернуть значение из таблицы/запроса по какому-то условию, для этого многие пользуются функциями Dmin() Dmax() Dlookup()
однако эти функции имеют ряд ограничений и по быстродействию оставляют желать лучшего.
Я пользуюсь собственной функцией.
my_lookup(Выражение as String, Таблица_или_текст_запроса as String, Условие as String)

Думаю, что функция внутри делает ясно
Отмечу только, что в текст формируемой строки запроса а добавил TOP 1
...
Рейтинг: 0 / 0
Поиск в рекордсете ADO
    #32201856
am (a_mitin)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, про DLookup (искал искла ссылку, не нашел, хорошо что в другом форуме АлексейЕ подсказал
http://hiprog.com/access/article.asp?id=314

Сейчас ещё скажу что у меня своих Lookupов уже несколько (использую Access 97 mdb) - через DAO, через ADO, с множественным возвратом параметров и т.д. Самый быстрый конечно через ADO (только объект ADODB.Connection надо закешировать - не обязательно соединение открытым держать, главное чтобы объект не создавался заново каждый раз.)
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск в рекордсете ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]