powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Макроподстановка (так сказать...)
25 сообщений из 51, страница 2 из 3
Макроподстановка (так сказать...)
    #32310207
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Синтаксис для поля такой:

MyFun() As MyField

где
MyFun - название функции, которая уже написана
MyField - название поля, как оно должно получиться

А насчет Object required не понял. :^)
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310216
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как вставить функцию в запрос - с эти не проблема. Проблема с вычисляемым именем поля этого же запроса, которое используется в этой функции. А "Object required" - это то ругательство, что мне аксесс выдает
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310226
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь надо это вычисляемое название поля вставить в функцию, а функцию в запрос. Функция и запрос готовы
Название поля? Или все таки его значение?
Если название - бери и вставляй.
Если значение - тоже бери и вставляй. Я уже писал как. Forms![ИмяФормы].Controls(strControlName).Value
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310243
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я наверно плохо объяснила суть проблемы. Сейчас попробую подробно:
Есть запрос, в котором одно из полей есть результат суммы некоторых полей этого же запроса. Какие поля участвуют в расчете, я определяю в функции, которая записана в модуле (не в форме). Вот.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310257
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
На что именно и в какой момент он выдает это ругательство?
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310260
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос, в котором одно из полей есть результат суммы некоторых полей этого же запроса. Какие поля участвуют в расчете, я определяю в функции, которая записана в модуле
Может проще в эту функцию передать значения всех полей, которые могут понадобится, и эта функция сразу вернет результат?
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310277
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я просто напишу в процедуре Sum_1=Sum_1+Fld, где Fld - это строка с именем поля, то пишет "Type mismatch" на эту строку (это понятно суммировать чило со стрингом:)), а если напишу Sum_1=Sum_1+Controls(Fld).Value, то "Sub or Function not defined".
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310283
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Sum_1=Sum_1+Forms!MyForm.Controls(Fld).Value
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310289
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может проще в эту функцию передать значения всех полей, которые могут понадобится, и эта функция сразу вернет результат?

Мне этот запрос потом нужно представить в табличной форме. И запрос у немя не простой, с юнитом. Боюсь, потом начнутся проблемы с выводом...
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310303
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
К тому же этот запрос еще используется в другой форме и репорте... Динамически я его не могу создавать, длинный очень. Поэтому он существует в Queries.
Forms!MyForm. - а если без формы?
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310340
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А если без формы, то откуда должны браться значения ???
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310344
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем более, что если я вставляю Forms!MyForm.Controls(Fld).Value и запускаю запрос из формы, то ругается "You entered an expression that has no value"
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310345
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значения берутся из самого запроса.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310349
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Увы, увы. Моих телепатических способностей хватает только на то, чтобы угадывать желания Лоха. Чтобы угадать, почему не работает программа, мне надо видеть программу. Уж пардон.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310351
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если значения берутся из запроса, то надо сделать так, как сказал Лох: передавать через параметры в функцию значения всех полей.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310379
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может проще в эту функцию передать значения всех полей, которые могут понадобится, и эта функция сразу вернет результат?

Мне этот запрос потом нужно представить в табличной форме. И запрос у немя не простой, с юнитом. Боюсь, потом начнутся проблемы с выводом...


Ну и что с того, что нужно представить? Ну и что с того что юнион?
Тебе в каком-то поле нужно вывести странную сумму каких-то полей. Ну и передавай эти значения полей в какую-то функцию и считай странную сумму в этой функции. Результат работы функции выводи в запросе. В чем сложность-то?
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310381
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть запрос, в котором одно из полей есть результат суммы некоторых полей этого же запроса. Какие поля участвуют в расчете, я определяю в функции, которая записана в модуле (не в форме).

Вариант : "одно из полей" - сделать функцией от всех прочих полей в запросе, каковые могут там побывать. А уж _в функции_ определив, что там у вас учавствует в суммировании, то и употребить через нормальное ветвление (если то-то - добавить ту-то, если иначе - другую переменную).
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310383
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Во. Уже три голоса за то, чтобы передавать все поля.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310532
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда-а, проблемка-с... Дело в том, что и количество полей будет меняться. Это ж как же ж надо все закрутить!!!!!
А так хорошо день начинался....
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310542
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как это у тебя в запросе количество полей будет меняться?
Сдается мне что что-то ты не то делаешь....
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32310623
Sfagnum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>К тому же этот запрос еще используется в другой форме и репорте...

>а если без формы?

>значения берутся из самого запроса.

>Мда-а, проблемка-с... Дело в том, что и количество полей будет меняться.

Ну ни хрена себе закручено...

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

Может попробуешь запрос показать...
Вдруг лучше его понять удасться...

Сделать можно всё!!!
Только бы знать как...
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32311281
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Будет меняться количество полей, которые надо просуммировать.
Сам запрос могу привести (в сокращенном виде)
SELECT
Budget.CostCode AS CostCode,
"1" AS pr,
Sum(Budget.Sum_planned_06_03) AS Sum_planned_06_03,
Sum(Budget.Sum_planned_07_03) AS Sum_planned_07_03,
Sum(Budget.Sum_planned_08_03) AS Sum_planned_08_03,
Sum(Budget.Sum_planned_09_03) AS Sum_planned_09_03,
Sum(Budget.Sum_planned_10_03) AS Sum_planned_10_03,
Sum(Budget.Sum_planned_11_03) AS Sum_planned_11_03,
Sum(Budget.Sum_planned_12_03) AS Sum_planned_12_03,
Sum_Planned() AS Estimated
FROM Budget
Group By CostCode
UNION SELECT
Budget.CostCode AS CostCode,
"2" AS pr,
Sum(Budget.Sum_actual_06_03) AS Sum_actual_06_03,
Sum(Budget.Sum_actual_07_03) AS Sum_actual_07_03,
Sum(Budget.Sum_actual_08_03) AS Sum_actual_08_03,
Sum(Budget.Sum_actual_09_03) AS Sum_actual_09_03,
Sum(Budget.Sum_actual_10_03) AS Sum_actual_10_03,
Sum(Budget.Sum_actual_11_03) AS Sum_actual_11_03,
Sum(Budget.Sum_actual_12_03) AS Sum_actual_12_03,
Sum_Actual() AS Estimated
FROM Budget
Group By CostCode;

Плюс к этому две функции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
Public Function Sum_Actual() As Integer
Dim Mes, Fld As String

Mes = Month(Date)
Sum_Actual =  0 

I =  5 
Do While I < Mes
   I = I +  1 
         
   If Month(Date) >  9  Then Fld =  "Sum_planned_"  & Month(Date) &  "_"  & Mid(Year(Date),  3 ,  2 ) _
   Else Fld =  "Sum_planned_0"  & Month(Date) &  "_"  & Mid(Year(Date),  3 ,  2 )
   
   Sum_Actual = Sum_Actual + Sum_planned_10_03

Loop
End Function

Public Function Sum_Planned() As Integer
Dim Mes, Fld As String

Mes = Month(Date)

Sum_Planned =  0 
I = Mes +  1 
Do While I <=  12 
   I = I +  1 
         
   If Month(Date) >  9  Then Fld =  "Sum_planned_"  & Month(Date) &  "_"  & Mid(Year(Date),  3 ,  2 ) _
   Else Fld =  "Sum_planned_0"  & Month(Date) &  "_"  & Mid(Year(Date),  3 ,  2 )
   
   Sum_Planned = Sum_Planned + Sum_planned_10_03
Loop

End Function

Вполне возможно, что написано где-то не правильно или не красиво. Критикуйте, как считаете нужным.
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32312017
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
У меня много замечаний, из них часть по делу и часть не по делу.

Не по делу:

1. Эти две функции вполне можно заменить на одну с параметрами.
2. Вместо цикла Do будет лучше выглядеть с циклом For.
3. Имя функции в правой части оператора присваивания работать не будет.

По делу:

1. Где в запросе обращения к этим функциям?
2. Где в функциях обращения к полям? (Вижу переменную Fld, но не вижу, где она используется.)
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32314520
Фотография Lola
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения за задержку, пришлось переключиться на другую задачу.
По поводу возникших вопросов-замечаний.
1. В запросе обращение к функциям - это строчки перед "FROM..."
2. В самой функции я написала уже конкретное поле Sum_planned_10_03 (моя опечатка, копировала через клипборд и остался "тренировочный" вариант.
Функция должна выглядеть так (я одну приведу):

Public Function Sum_Planned() As Integer
Dim Mes, Fld As String
Mes = Month(Date)
Sum_Planned = 0
I = Mes + 1
Do While I <= 12
I = I + 1
If Month(Date) > 9 Then Fld = "Sum_planned_" & Month(Date) & "_" & Mid(Year(Date), 3, 2) _
Else Fld = "Sum_planned_0" & Month(Date) & "_" & Mid(Year(Date), 3, 2)
Sum_Planned = Sum_Planned + Fld ' вот здесь и надо праавильно написать обращение к полю
Loop
End Function
...
Рейтинг: 0 / 0
Макроподстановка (так сказать...)
    #32314550
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например можно так:
Код: plaintext
1.
2.
3.
4.
5.
Public Function Sum_Planned(ParamArray flds()) 
    '.............
    skipped
    .............'
    Sum_Planned = Sum_Planned + flds(i) ' Где i - порядковый номер поля (начиная с 0) '
End Function


Ну и в запросе передаешь ей все поля, т.е.
Select ......., Sum_Planned(а здесь перечисляешь все нужные поля через запятую) From ... Where ....

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


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