Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DLookUp с сортировкой / 25 сообщений из 33, страница 1 из 2
15.06.2004, 10:53:53
    #32561120
ThuG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Скажите, пожалуйста, как с помощью DLookUp взять из таблицы БЛИЖАЙШУЮ к найденной дате.

Я понимаю, что надо использовать <, но не факт, что аналог рекордсета для DLookUp упорядочится нужным образом.

То есть с помощью RS это делается так:

Data = Format(Нужная дата с формы, "бла-бла")
strSQL = "SELECT [Дата] FROM [Таблица] WHERE [Дата] <= #" & Data & "# ORDER BY [Дата] ;"
Set rsSource = CurrentDb.OpenRecordset(strSQL)
If Not (rsSource.BOF And rsSource.EOF) Then
rsSource.MoveLast
Temp = rsSource.Fields("[Дата]")

Тогда в Temp будет ближайшая дата к дате "Нужная дата с формы".

Как такое же провернуть с DLookUp?

Data = Format(Нужная дата с формы, "бла-бла")
Temp = DLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "# ORDER BY [Дата]")

Но тогда он возьмет, наоборот, самую дальную дату от указанной.

Или я в чем не прав?
...
Рейтинг: 0 / 0
15.06.2004, 10:55:16
    #32561123
ThuG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Первое предложение, конечно, звучит так:
Скажите, пожалуйста, как с помощью DLookUp взять из таблицы БЛИЖАЙШУЮ к указанной дате. :-)
...
Рейтинг: 0 / 0
15.06.2004, 10:57:36
    #32561128
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
авторКак такое же провернуть с DLookUp?

Data = Format(Нужная дата с формы, "бла-бла")
Temp = DLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "# ORDER BY [Дата]")

Вместо DLookUp используй DMin :)
...
Рейтинг: 0 / 0
15.06.2004, 11:00:15
    #32561137
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
т.е.
Temp = DMin("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "#")


PS
авторrsSource.MoveLast
точно MoveLast, а не MoveFirst?
А то что-то у меня непонятки начались :(
...
Рейтинг: 0 / 0
15.06.2004, 11:01:34
    #32561138
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Если в таблице Первичный ключ по полю Дата, тот должно отработать
Temp = DLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "#"),
в противном случае, напиши свою функцию в которой открой рикордсет
...
Рейтинг: 0 / 0
15.06.2004, 11:04:54
    #32561141
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Rivkin DmitryЕсли в таблице Первичный ключ по полю Дата, тот должно отработать
Temp = DLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "#"),
в противном случае, напиши свою функцию в которой открой рикордсет

Гарантий нет!!! (Даже при ключе)
...
Рейтинг: 0 / 0
15.06.2004, 11:06:13
    #32561144
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Хотя, задача не очень корректна: что значит ближайшая? Что предпочтительнее менше или больше, а если равно? Или все даты заранее меньше?
Я бы сделал
strSQL = "SELECT TOP 1 [Дата] FROM [Таблица] WHERE [Дата] <= #" & Data & "# ORDER BY [Дата];"
Set rsSource = CurrentDb.OpenRecordset(strSQL)
If rsSource.RecordCount > 0 Then
...
...
Рейтинг: 0 / 0
15.06.2004, 11:36:29
    #32561228
маяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Rivkin DmitryХотя, задача не очень корректна: что значит ближайшая? Что предпочтительнее менше или больше, а если равно? Или все даты заранее меньше?Предлагаю такое решение: работать с датами как с числами (если помните, в физическом выражении дата - это число секунд с какой-то очень давней полуночи), и делать dmin(abs(дата1-дата2), ...)
...
Рейтинг: 0 / 0
15.06.2004, 11:44:48
    #32561247
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
DLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "# ORDER BY [Дата]")

должно правильно выдавать
...
Рейтинг: 0 / 0
15.06.2004, 11:49:09
    #32561259
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
АлексейКDLookUp("[Дата]", "[Таблица]", "[Дата] <= #" & Data & "# ORDER BY [Дата]")

должно правильно выдавать

И давно ORDER BY в критерий разрешили вставлять?
...
Рейтинг: 0 / 0
15.06.2004, 11:49:38
    #32561260
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
и еще
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 ' можно в первом параметре указывать выражения от любых столбцов 
 
DLookUp("[Дата] + [поправка]", "[Таблица]", "[Дата] <= #" & Data & "# ORDER BY [Дата]")


 ' во втором параметре можно указвать join
 
 DLookUp("[Таблица].[Дата] + [Таблица2].[Дата]", "[Таблица] inner join [Таблица2] on [Таблица].код = [Таблица2].Код ", "[Дата] <= #" & Data & "# ORDER BY [Дата]")
...
Рейтинг: 0 / 0
15.06.2004, 11:50:44
    #32561264
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
2 paparome
давно видимо
...
Рейтинг: 0 / 0
15.06.2004, 11:52:13
    #32561269
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
АлексейК2 paparome
давно видимо

А попробовать?

Про 1 и 2 параметр не спорю - ибо это правда, а вот с третьим у меня не вышло :(

может я не так делаю?
...
Рейтинг: 0 / 0
15.06.2004, 11:52:42
    #32561271
АлексейК
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
только не забуть Data сконвертировать в американский формат

MM/DD/yyyy - поменять местами месяцы и дни
...
Рейтинг: 0 / 0
15.06.2004, 11:56:01
    #32561279
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Кстатит - у меня и с join не вышло (во втором параметре) :(

PS: Акс97
...
Рейтинг: 0 / 0
15.06.2004, 12:29:52
    #32561352
Аха
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
ORDER BY [...]
не проходят (в параметре 3~WHERE) в 2000, 97
в каком проходят у Вас?
(поменять библиотеку не могу - Access.Application.DLookup

Проверьте пжалста. А то я как последний лох пользую DMin/DMax И прочую устаревшую лабуду
...
Рейтинг: 0 / 0
15.06.2004, 12:29:58
    #32561353
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
маяк Rivkin DmitryХотя, задача не очень корректна: что значит ближайшая? Что предпочтительнее менше или больше, а если равно? Или все даты заранее меньше?Предлагаю такое решение: работать с датами как с числами (если помните, в физическом выражении дата - это число секунд с какой-то очень давней полуночи), и делать dmin(abs(дата1-дата2), ...)

маяк - Гений!!!

Temp = DLookup("[Дата]","[Таблица]","DateDiff(""d"",[Дата], Date()) = " & DMin("DateDiff(""d"",[Дата], Date())","[Таблица]"))
...
Рейтинг: 0 / 0
15.06.2004, 12:47:04
    #32561393
Аха
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
paparome АлексейК2 paparome
давно видимо

А попробовать?

Уважаемый АлексейК, Вы уж не отмалчивайтесь.
А то я в сомнениях.
Думать не могу.
кушать не могу.
сильно нервничаю, да.

_
Задача решается взятием DMin("дата",..., "дата >=датаСравнения") либо DMax("дата",....."дата <=датаСравнения") (либо того и другого и их сравнением).
...
Рейтинг: 0 / 0
15.06.2004, 12:54:32
    #32561411
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
авторЗадача решается взятием DMin("дата",..., "дата >=датаСравнения") либо DMax("дата",....."дата <=датаСравнения") (либо того и другого и их сравнением).

Это совершенно не верно! Запрос найдет первую подходящую дату, но не ближайшую! :(
...
Рейтинг: 0 / 0
15.06.2004, 13:00:24
    #32561422
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
авторЭто совершенно не верно! Запрос найдет первую подходящую дату, но не ближайшую! :(

Что-то не понял вашего утверждения :(
А можно привести пример данных на которых это не сработает?
...
Рейтинг: 0 / 0
15.06.2004, 13:01:33
    #32561423
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Кстати, господа.
А где автор топика?
Ему тут уже на хороший реферат наотвечали, а его все нет :(
...
Рейтинг: 0 / 0
15.06.2004, 13:04:43
    #32561431
маяк
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Rivkin Dmitryмаяк - Гений!!!

Temp = DLookup("[Дата]","[Таблица]","DateDiff(""d"",[Дата], Date()) = " & DMin("DateDiff(""d"",[Дата], Date())","[Таблица]"))ААААА!
Мерси! Очень приятно %)
...
Рейтинг: 0 / 0
15.06.2004, 13:08:53
    #32561445
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
:^) Гению мои поздравлямс.
...
Рейтинг: 0 / 0
15.06.2004, 13:31:14
    #32561500
Rivkin Dmitry
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
paparome авторЭто совершенно не верно! Запрос найдет первую подходящую дату, но не ближайшую! :(

Что-то не понял вашего утверждения :(
А можно привести пример данных на которых это не сработает?

Plz:
create table Dt1 (Date1 Date)

CREATE UNIQUE INDEX ix_Dt1 ON Dt1(Date1) WITH DISALLOW NULL
Date1
01/01/2004
05/01/2004
25/01/2004
25/02/2004
05/03/2004
11/03/2004
21/03/2004
03/04/2004
13/04/2004
20/04/2004
20/05/2004

?DLookup("Date1", "Dt1", "Date1 >= CDate('01/03/2004')")
05/03/2004 - All Right!!!
?DLookup("Date1", "Dt1", "Date1 <= CDate('01/03/2004')")
01/01/2004 - ?????

А без индекса и первый запрос не рсаботает
...
Рейтинг: 0 / 0
15.06.2004, 13:41:55
    #32561532
paparome
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DLookUp с сортировкой
Rivkin Dmitry? DLookup ("Date1", "Dt1", "Date1 >= CDate('01/03/2004')")
05/03/2004 - All Right!!!
? DLookup ("Date1", "Dt1", "Date1 <= CDate('01/03/2004')")
01/01/2004 - ?????

Rivkin Dmitry авторЗадача решается взятием DMin ("дата",..., "дата >=датаСравнения") либо DMax ("дата",....."дата <=датаСравнения") (либо того и другого и их сравнением).

Это совершенно не верно! Запрос найдет первую подходящую дату, но не ближайшую! :(

Dmin/Dmax, а не DLookUp?
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / DLookUp с сортировкой / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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