powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Это возможно???
16 сообщений из 16, страница 1 из 1
Это возможно???
    #32151233
ДенисCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу из запроса в Access XP вызвать запрос с параметром. Параметр будет вычисляться и передоваться из первого запроса.
Это возможно?
...
Рейтинг: 0 / 0
Это возможно???
    #32151243
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если это ADP
а в качестве сервера mssql 2000

то наверное речь идет о серверной функции ?

Если это MDB
то в пределах sql-запроса можно
1. использовать пользовательские функции (правильно написанные)
2. подчиненные запросы.
правда и то и другое тормозит жутко.

другое дело если собирать простые запросы программно и тут же их запускать
...
Рейтинг: 0 / 0
Это возможно???
    #32151254
ДенисCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT two.ClientsInf_ID, (SELECT SUM(Trans.Quantity*(Trans.PriceSetUp-Trans.PriceFact)) AS Скидка
 FROM Trans INNER JOIN 
 (
  SELECT yyy.ClientsInf_ID   
  FROM ClientsInf AS yyy
  WHERE 
  yyy.CustCode=(SELECT sss.CustCode FROM ClientsInf sss WHERE sss.ClientsInf_ID = two.ClientsInf_ID) AND
  yyy.DateStart>=(SELECT Min(Trans.PDate)  FROM Trans WHERE Trans.ClientsInf_ID = two.ClientsInf_ID GROUP BY Trans.ClientsInf_ID) And
  yyy.DateStart<=(SELECT Max(Trans.PDate)  FROM Trans WHERE Trans.ClientsInf_ID = two.ClientsInf_ID GROUP BY Trans.ClientsInf_ID)
 ) qqq ON Trans.ClientsInf_ID = qqq.ClientsInf_ID
) AS Выражение1
FROM ClForRep AS two;



Есть вот такой запрос, но он не работает, просит меня определить two.ClientsInf_ID, если я выкидываю один уровень вложенности, все работает.

Думал, можно создать вспомогательный запрос с параметром, но передать его теда я не знаю как.

У меня mdb
1) Использовать подчиненный запрос, я не понял как.
2) Пользовательские функции, это о чем?

Это все потом будет работать на SQL Server, а результат нужен сейчас, и не хочется мучиться потом с преобразованием.
...
Рейтинг: 0 / 0
Это возможно???
    #32151261
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
убегаю, утром напишу

у тебя и есть - подчиненные запросы

а функции -
модуль
в нем

public function MYFUNCTION(MY_ARG)
....
end function

в запросах MDB можно ими пользоваться только
нужно кое что учесть
...
Рейтинг: 0 / 0
Это возможно???
    #32151339
ДенисCh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создал я функцию, но возвращать в запрос могу только одно значение.
Каким типом данных пользоваться, чтобы передать в запрос в вектор?
...
Рейтинг: 0 / 0
Это возможно???
    #32151494
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я думаю что оптимально будет написать две функции отдельно для каждого значения

по следующей причине:
даже если результатом отрабатывания функции является изменение значения глобальной пременной (массива) то отимизатор запросов в версиях MSACC начиная с 2000 игнорирует то что переменная могла быть изменена за время выполнения запроса и берется кэшированное значение.

кроме того хочу заметить что если при вызовах функции в vb было достаточно декларирования функции как числа чтобы присвоить ей исходное значение = 0

и еще если аргумент функции не изменяется , если не ошибаюсь то в ACC 2002
функция не выполняется а берется из кеша

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

Public Function MYFUNC(MYVAR As Variant) As Integer
MYFUNC = 0 ' обязательно сбросить при использовании в запросах
If MYVAR = 1 Then ' в А2002 наблюдалось кеширование если аргумент не меняется
MYFUNC = Rnd * 10 * Timer
End If
End Function
...
Рейтинг: 0 / 0
Это возможно???
    #32151647
alexkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АлексейК прав на все 100 % нужно использовать для каждого возвращаемого значения свою функцию.
Если нужно выполнить сложные действия, то можно вкладивать одну функцию в другу, причем таких вложений можно сделать много. (Главное не напутать : ) )
...
Рейтинг: 0 / 0
Это возможно???
    #32179874
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Замечательно.
Теперь у меня похожий вопрос - пишу сюда же.
Люди, АУ!!!

Есть запрос [Deb1 - Журнал-фильтр] с вычисляемым полем
[РазницаДатОтгрОпл].
В нем нужно сделать подзапрос на таблицу ВидыСроков
такого вида:

(SELECT ВидыСроков.СрокЗадолж FROM ВидыСроков WHERE (((ВидыСроков.С)<=[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]) AND ((ВидыСроков.По)>=[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]))) AS Выражение1

Но SQL ругается на "ссылку" в главный запрос:
[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]

Как это правильно выписать?
(Хочу Ме! из Васика!!!
;)))))))))))))
...
Рейтинг: 0 / 0
Это возможно???
    #32179886
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Forms![Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]

Имеется в виду это?
...
Рейтинг: 0 / 0
Это возможно???
    #32179898
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пиши вместо вот этой лажи
[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]
- DlookUp (хелп в аксесе подробен), если уж так хочется, а вообще-то так не делается, пишутся джойны с запросом в котором критерии (если их несколько, допустим, определённый набор записей по какому-либо критерию - не важно, откуда мы его задаём) и никаких уровней вложенности в пользовательских функциях.

Либо пользуйтесь Where In(Select ***), а во вложенном запросе уже функцию, уровень вложенности забыл, потому как не стоит загружать сервер либо локальную машину большим количеством вложенных выборок, при больших объёмах - ступор обеспечен. Выходов несколько - хранимые процедуры на SQL сервере либо делать темповые таблички в mdb, потом их удалять и компактить базу....
...
Рейтинг: 0 / 0
Это возможно???
    #32179909
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2ВС:
К сожалению, не форма, а расчетное поле именно запроса - главного, -
которое надо передать в подчиненный.
Иначе бы и вопроса не было - с формой все просто
;)

2Hummer:
DlookUp тожа знаю, могу и вместо него функцию на VB наваять ;),
только толку?..

Сейчас написана огромная Select Case'ина, которая классифицирует
сроки.
Хотел перебросить в таблицу со структурой:

КлассСрока С По

для чего и ваялся подзапрос
- выбирать из это таблы КлассСрока для каждой записи
по только что рассчитанному в этой же записи значению...

2All:
Ну что ж это за бред, камрады?..
Параметр родителя нельзя передать дочке?..
Ну и бредятина... 8()
...
Рейтинг: 0 / 0
Это возможно???
    #32179914
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
АААА!!! Дошло. Надо убрать [Deb1 - Журнал-фильтр].
...
Рейтинг: 0 / 0
Это возможно???
    #32179917
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще раз 2Hummer:
Джойны-то и не могу здесь юзать:
в главном запросе в результате расчета получаем дискретины:
1
5
69
458
-56
-89
(дней),
а таблица классов содержит интервалы:
Класс : с : по
До 30 дней : 0 : 30
До 60 дней : 31 : 60

Народ!
Поделитесь, как надо правильно делать такой "классификатор?"
Или все SelectCase' пишут?
;)
...
Рейтинг: 0 / 0
Это возможно???
    #32180189
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexus12
Так уже сказали - "Надо убрать [Deb1 - Журнал-фильтр]."
...
Рейтинг: 0 / 0
Это возможно???
    #32180214
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что самое смешное, все равно не работает.
Ругается выводом более 1 значения, хотя это просто невозможно.
Зато если навесить на запрос с расчетным значением
[РазницаДатОтгрОпл]
новый запрос (где расчетное поле [РазницаДатОтгрОпл] стало статическим,
и оба запроса со сравниваемыми величинами
стали источниками данных, не обращаясь сами на себя ;)
и уже в нем делать Where с таблицей-классификатором,

SELECT [Deb1 - Журнал-фильтр].РазницаДатОтгрОпл, ВидыСроков.СрокЗадолж
FROM ВидыСроков, [Deb1 - Журнал-фильтр]
WHERE (((ВидыСроков.С)<=[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]) AND ((ВидыСроков.По)>=[Deb1 - Журнал-фильтр].[РазницаДатОтгрОпл]));

то все работает как часики.
Вот и получается, что с подчиеннными лучше и не связываться, легче сверху довески написать...

ВС!
Как ваше мнение?
...
Рейтинг: 0 / 0
Это возможно???
    #32180245
Alexus12
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что самое смешное, такая суперконструкция работает ощутимо медленнее
пользовательской функции на Select Case.
8(((
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Это возможно???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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