Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция округления в запросе / 6 сообщений из 6, страница 1 из 1
26.01.2016, 16:21
    #39155773
pirat_new
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция округления в запросе
В модуле прописал функцию для округления.
Далее ввожу в формулу в запросе и получаю ошибку: "Неверное число аргументов в выражении запроса"

Код: vbnet
1.
IIf([kodstat]=1000 or [kodstat]=1110 or [kodstat]=1500 or [kodstat]=1501 or [kodstat]=3000,(Round97([syma]*0.036)),IIf([kodstat]=6000,(Round97([syma]*0.02)),IIf([kodstat]=1100 or [kodstat]=2500 Or [kodstat]=5000 Or [kodstat]=7200 Or [kodstat]=4000  Or [kodstat]=4500 Or [kodstat]=5500,0,Null))) AS es



Подскажите, где ошибка?
...
Рейтинг: 0 / 0
26.01.2016, 17:51
    #39155884
Quiet333
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция округления в запросе
Не знаю что такое round97. А для Round надо указывать количество знаков
типа Round([syma]*0.036;2)
...
Рейтинг: 0 / 0
26.01.2016, 18:11
    #39155900
pirat_new
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция округления в запросе
Quiet333,

Код: vbnet
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.
35.
36.
37.
38.
Public Function Round97(ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
'Here 's the version I recently wrote that solves that last issue. I've
'sent this in to Advisor to post as an errata. I think this will work
'now... <g> -- Ken
Dim dblPower As Double
Dim varTemp As Variant
Dim intSgn As Integer

If Not IsNumeric(Number) Then
' Raise an error indicating that
' you've supplied an invalid parameter.
' Err.Raise 5
Exit Function
End If
dblPower = 10 ^ NumDigits
' Do the major calculation.
varTemp = CDec(Number) * dblPower + 0.5

' Now round to nearest even, if necessary.
If UseBankersRounding Then
' Is this a negative number, or not?
' intSgn will contain -1, 0, or 1.
intSgn = Sgn(Number)
varTemp = Abs(varTemp)
If Int(varTemp) = varTemp Then
If varTemp Mod 2 = 1 Then
' If working with a negative number,
' add 1. If working with a
' positive number, subtract one.
' That's what "- intSgn" will do.
varTemp = intSgn * (varTemp - intSgn)
End If
End If
End If
' Finish the calculation.
Round97 = Int(varTemp) / dblPower
End Function
...
Рейтинг: 0 / 0
26.01.2016, 18:22
    #39155914
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция округления в запросе
pirat_new,

IIf([kodstat]=1000 or [kodstat]=1110 or [kodstat]=1500 or [kodstat]=1501 or [kodstat]=3000,
(Round97([syma]*0.036)),
IIf([kodstat]=6000,(Round97([syma]*0.02)),
IIf([kodstat]=1100 or [kodstat]=2500 Or [kodstat]=5000 Or [kodstat]=7200 Or [kodstat]=4000 Or [kodstat]=4500 Or [kodstat]=5500,0,Null))) AS es

у round97 здесь 1 параметр

Код: vbnet
1.
2.
3.
Public Function Round97(ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
 



а здесь 2 обязательных(вариант и лонг) и 1 необязательный
...
Рейтинг: 0 / 0
26.01.2016, 18:39
    #39155935
pirat_new
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция округления в запросе
Спасибо!
...
Рейтинг: 0 / 0
27.01.2016, 13:44
    #39156518
Функция округления в запросе
pirat_newIIf([kodstat]=1100 or [kodstat]=2500 Or [kodstat]=5000 Or [kodstat]=7200 Or [kodstat]=4000 Or [kodstat]=4500 Or [kodstat]=5500,... Кстати, в запросе эту конструкцию можно с успехом заменить на:
Код: vbnet
1.
IIf([kodstat] In (1100,2500,5000,7200,4000,4500,5500),...
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Функция округления в запросе / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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