Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция Now() - вернуть одну строку или как добавить изящества запросу / 13 сообщений из 13, страница 1 из 1
09.04.2004, 14:58
    #32475656
swerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
В SQL-server я могу получить текущую дату

select getdate()

В Access не могу вызвать функцию Now() таким же способом мне приходится указывать название какой-нибудь таблицы (сейчас я использую sysobjects)

select Now() as curtime from MSysobjects GROUP BY Now()
или
select Now() as curtime, count(*) from MSysobjects

Я не хочу качать несколько строк и приходится использовать GROUP BY или использовать агрегатную функцию count для возврата одной строки.
Может быть есть лучше решение?
...
Рейтинг: 0 / 0
09.04.2004, 15:00
    #32475663
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
Я не хочу качать несколько строк и приходится использовать GROUP BY или использовать агрегатную функцию count для возврата одной строки.
А что, Select Top 1 уже отменили?
...
Рейтинг: 0 / 0
09.04.2004, 15:04
    #32475675
swerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
Может возможно как-нибудь обойтись без указания таблицы (напрмер ссылаться на какой-нибудь NULL-объект)?
...
Рейтинг: 0 / 0
09.04.2004, 15:10
    #32475689
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
может все-таки попытаться читать форум перед тем как писать?\r
или чукча не читатель, чукча писатель?\r
/topic/85858\r
первый же ответ
...
Рейтинг: 0 / 0
09.04.2004, 20:53
    #32476213
swerg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
Уважаемый, вы наверно имеете в виду это:

Код: plaintext
SELECT  "a"  AS a ,  "b"  AS b FROM msysobjects WHERE id= 0 


Я вас огорчу, в моей базе в таблице msysobjects нет записи с id=0.
Речь идет о поиске универсального решения.
...
Рейтинг: 0 / 0
09.04.2004, 21:22
    #32476221
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
А как насчет проверить остальные предложенные ответы?

Лох Позорный, сегодня, 15:00А что, Select Top 1 уже отменили?
Лох Позорный, сегодня, 15:10 - ссылка на Victosha, сегодня, 13:30заведи таблу _null ( обычно ее зовут dummy) и вставь в нее одну строку. из нее и select
...
Рейтинг: 0 / 0
09.04.2004, 22:34
    #32476254
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
Саныч, вообще-то я имел в виду вот эту часть ответа Виктоши:
Victoshaесли acess > 97 то убери from и просто считай.
...
Рейтинг: 0 / 0
09.04.2004, 22:39
    #32476257
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
А я выделил более универсальную часть ответа. А то опять заявит, что наши ответы не работают.
...
Рейтинг: 0 / 0
09.04.2004, 23:34
    #32476285
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
авторА я выделил более универсальную часть ответа. А то опять заявит, что наши ответы не работают.
Ну вообще-то автор топика спросил как это сделать без таблицы:
авторМожет возможно как-нибудь обойтись без указания таблицы
Под этот ответ попадает лишь "убери from и просто считай."
Но, к сожалению, очень ограничены возможности считать это значение.
Например, DlookUp даст ошибку. Включение этого запроса в другие тоже.
Но Recordset подобное спокойно проглатывает
?currentdb.openrecordset("SELECT now() AS b")!b
10.04.04 1:32:32
...
Рейтинг: 0 / 0
10.04.2004, 01:51
    #32476312
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
авторНо, к сожалению, очень ограничены возможности считать это значение.
Например, DlookUp даст ошибку.

в целом это и правда и неправда ( точнее, вторая часть утверждения - неточность в изложении, приводящая к неправде, а первая - правда, по поводу которой хочется дать пояснение).

начнем со второй части - dlookup.
как бы это сказать по русски - она - dlookup - функция (при этом, это НЕ VBA-функция,и даже не собственно Access-а, а (судя по всему) чистая Jet-функция (допустимо, что брежу в детали, но утверждение важно в контексте)). Из ее 3х параметров 2 первых обязательные. пропустить домен - нельзя ДВАЖДЫ - 1) при явном пропуске будет ошибка ПЕРЕДАЧИ ПАРАМЕТРОВ - т.е. неправильный вызов функции. 2) при передаче пустой строки, описание возвращаемой ошибки классифицирует dlookup как "статистистическую функцию на подмножестве", явно намекая на имплицитный GROUP BY по содержимому "строки домена" (как и прочие функции категории D(Max,Min,Sum,Avg,Var,Lookup- не помню кто еще), другими словами внутри D... - не скалярные вычисления - посему подай домен. Правильно сформированный dlookup "нормально" работает в запросе (как и прочие D...) в ACCESS-е (выделенное цветом критически важно).
например (Борей,2000), создав в конструкторе запрос

Код: plaintext
SELECT DLookUp( "ЕдиницаИзмерения" , "Товары" , "Марка="  "Pavlova" "") AS Выражение1;


видим результат:"32 коробок по 500 г"
то есть НЕПРАВДА - правильно сформированный dlookup - правильно и работает (в вычислительном запросе Access-а).

теперь выделим правду.
Код: plaintext
очень ограничены возможности считать это значение. 


здесь правда состоит в том, что для работы запросов типа
SELECT now()
SELECT dlookup(...)
небходимо, чтобы задействованные функции были поддержаны "database engine-ом" ( либо хотя бы локальным поставщиком данных). Отсюда берется мое утверждение/предположение, что dlookup - функция Jet ( ну на край ее OLEDB-провайдера). То есть в формате файла 2000 "вычислительный"
select myFavouriteAccessFunc(Param1,Param2) НЕ сработает, поскольку ни джет (ни провайдер) о ней (myFavouriteAccessFunc) ничего не зают.
в формате XP поставщиком данных для Access может быть объявлен сам Access, и, как я ожидаю (не пробовал), "пурпурный" запрос "вычислится" нормально. ( если опять не все попутал - Гетса на сей счет "параграф" имеется)

ТО ЕСТЬ возможности вычисления действительно ограничены вычислительными возможностями database engine, с максимальным расширением до драйвера-поставщика.

ЗЫ
В былые времена (вплоть до 97 версии) приличный писатель книжек про аксесс считал для себя обязательным поместить в приложение список фунций, исполняемых джетом. Как неточно помню, он почти 100-процентно пересекается со списком функций, доступных в (тогдашнем) vbs. Поскольку у нас сии книжки были изданы мало прилично (клеенные), у меня они уже давно разлетелись по листочкам и даже без "правильного" применения. К сожалению, не припомню такого списка в современных "Гетсах". Озаботившись списком (и не получив ответа в форуме) полез в саппорт. Полного списка не нашел (по контексту стало понятно, что его и так все знают и помнют от зубов и писать об этом нечего - один я, не то чтобы забыл, а и не знал), но нашел список "опасных" функций типа dir(), rmdir,mkdir() ... исполнение которых джетом можно включать и отключать, манипулируя реестром. за бессмысленностью в данную секунду результата, плюнул и даже ссылку не сохранил.

----------------------
вот и весь комментарий
----------------------
...
Рейтинг: 0 / 0
10.04.2004, 09:32
    #32476347
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
2 Victosha
Перечитал несколько раз, признаюсь не все сразу дошло до моего разумения :(

авторто есть НЕПРАВДА - правильно сформированный dlookup - правильно и работает (в вычислительном запросе Access-а).


На третье перечитывание я понял, что хотел сказать автор.
И понял, что виноват сам - плохо выразил свою мысль.
Я не говорил о применении DLookUp в запросе (инструкции SQL).
Я говорил об использовании DLookUp для получения результата запроса.
Т.е., например, есть запрос qryTest, SQL инструкция которого "SELECT now() As b", дык, DlookUp("b","qryTest") даст Run-time error '3067' "Query Input must contain at least one table or query"

По поводу кому принадлежат функции по подмножеству, мне важно, что (TypeLibInfo) они члены класса Access.Application.

В добавление к своему предыдущему сообщению, замечу, что
currentdb.openrecordset("SELECT now() AS b")!b
не cрабатывает в Access 97.
...
Рейтинг: 0 / 0
10.04.2004, 11:50
    #32476374
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
эхь, вот все мысли в кучку у мене в ночи все-таки не собрались - чичас под пиво продолжаю:

авторcurrentdb.openrecordset("SELECT now() AS b")!b
не cрабатывает в Access 97.

вот как бы и не должны срабатывать. В 97нет чистых "ВЫЧИСЛИТЕЛЬНЫХ" запросов, а есть ВЫЧИСЛЕНИЯ в запросах. ( это когда, например, from dummy - см выше ссылку на соседний топик). Это есть в любых весиях и до и после. При этом вычисления в запросе практически полностью (с очень специфическими оговорками) снимают тему "мощности" вычислителя database engine - все (почти), что может вычислить аксесс, будет вычислено в "запросе с вычислениями" при условии, ЧТО ОН ИЗ ПОД АКСЕССА ЖЕ И ЗАПУЩЕН. То есть снимаются ограничения на пользовательские функции.

Тонкость момента заключается в том, что этого счастья лишены "не аксессные клиенты". То есть, ежели какой-нибудь Дельфийный клиент, подсоединившись к mdb, попробует "пускануть" такой запрос ( с использованием vba-шных user-функкций, живущих в этом же mdb) - очевидно ли, какой он получит результат? Вот в связи с этим как раз и интересен "список функций" - как инструмент отделения мухов от котлетов и фотографичесокго проявления "собственной мощности" вычислителя Jet database engine - а она (мощьность) НЕ ШИБКО МАЛЕНЬКАЯ, хоть и ограниченная, естественным образом.

PS про DLookup я пытался сказать только следующее:
попытка обращения к нему ка Dlookup("5+5") так и Dlookup("5+5","")
НЕКОРРЕКТНА В ПРИНЦИПЕ.
...
Рейтинг: 0 / 0
10.04.2004, 12:21
    #32476386
Victosha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция Now() - вернуть одну строку или как добавить изящества запросу
во блин - только что дошло, что функции Jet - это те, которые в конструкторе выражений запросов числятся как "встроенные". Это же, действительно, знает каждый. ( как всегда кроме меня)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция Now() - вернуть одну строку или как добавить изящества запросу / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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