Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.07.2014
Сообщений: 59
1

Очень много IIF - как быть

17.04.2015, 11:44. Показов 1163. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте

недавно столкнулся с такой ситуацией пришлось прописать слишком много условий, до сих пор никак не могу решить,

Суть:

по определенному условию должен формироваться столбец с коэфициентом
Цель (переоценка товара)

SQL
1
 IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=1,0.1,IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=2,0.2,IIf ....  AS Выражение1
и так раз 20 наверное как сократить

искал на форумах не нашел как быть

и как быть?

Видел где то что создают VB

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Private Sub ReconcileNow()
If txtTValue = "" Then
Exit Sub
End If
If C1 = 1 And Minus = 1 Then
    txtTaC1 = CDbl(txtTpC1) - CDbl(txtTValue)
    txtTaC2 = ""
ElseIf C1 = 1 And Minus = 0 Then
    txtTaC1 = CDbl(txtTpC1) + CDbl(txtTValue)
    txtTaC2 = ""
ElseIf C2 = 1 And Minus = 1 Then
    txtTaC2 = CDbl(txtTpC2) - CDbl(txtTValue)
    txtTaC1 = ""
ElseIf C2 = 1 And Minus = 0 Then
    txtTaC2 = CDbl(txtTpC2) + CDbl(txtTValue)
    txtTaC1 = ""
Else
    If Round = 1 And Minus = 1 Then
        txtTaR = CDbl(txtTaR) - CDbl(txtTValue)
    ElseIf Round = 1 And Minus = 0 Then
        txtTaR = CDbl(txtTaR) + CDbl(txtTValue)
    End If
End If
End Sub
Но так не силен в VBA не смог адаптировать под себя
Вложения
Тип файла: rar Database1.rar (292.6 Кб, 6 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2015, 11:44
Ответы с готовыми решениями:

Много параметров в функцие IIF
Всем доброго времени суток! Есть такой вопрос существует запрос на базе которого формируется...

Очень много рекламы в браузере, там где её не должно быть
Помогите, открывается mail.ru поиск вместо Google, много рекламы там где её быть не должно,...

При компиляции проекта в VS c++ 2017 ОЧЕНЬ много ошибок. 5000. Хотя так быть не должно!
В общем. Скачал проект, который написан на VS c++ 15. Открыл в 17-м а там не находит множество...

Фильмы о танцах (где много, ну очень много танцев)
Привет всем! Может кто-нибудь посоветует мне фильмы, где люди много и классно танцуют???

6
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
17.04.2015, 12:18 2
Цитата Сообщение от WEEKEST Посмотреть сообщение
IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=1,0.1,IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=2,0.2,IIf .... AS Выражение1
Непонятно, что в конце этого выражения. А по первым двум - чем не устраивает просто выражение типа
SQL
1
([Оставшийся срок годн мес] MOD [срок год Мес])*0.1
0
4064 / 1445 / 399
Регистрация: 07.08.2013
Сообщений: 3,617
17.04.2015, 13:06 3
вместо выражения можно использовать функцию (самонаписанную) и тогда вот эти iif просто отвалятся (в сторону)
0
0 / 0 / 0
Регистрация: 22.07.2014
Сообщений: 59
17.04.2015, 13:33  [ТС] 4
совсем не так считает ((
SQL
1
([Оставшийся срок годн мес] MOD [срок год Мес])*0.1
и причем я не понимаю принцип ее действия

условий оч много - вот законченный кусок (половина того что надо)

SQL
1
IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=1;0,1;IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=2;0,2;IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=3;0,5;IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=4;0,7;IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=5;0,9;IIf([срок год Мес]>18 AND [Оставшийся срок годн мес]<=6;1;IIf([срок год Мес]=18 AND [Оставшийся срок годн мес]<=1;0,1;IIf([срок год Мес]=18 AND [Оставшийся срок годн мес]<=2;0,25;IIf([срок год Мес]=18 AND [Оставшийся срок годн мес]<=3;0,6;IIf([срок год Мес]=18 AND [Оставшийся срок годн мес]<=4;0,7;IIf([срок год Мес]=18 AND [Оставшийся срок годн мес]<=5;0,8;IIf([срок год Мес]<=12 AND [Оставшийся срок годн мес]<=1;0,1;IIf([срок год Мес]<=12 AND [Оставшийся срок годн мес]<=2;0,3;0)))))))))))))
но условий больше впихнуть некуда -
знаний пока не хватает как то это реализовать

Добавлено через 1 минуту
snipe

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

в идеале я так и хочу
0
Эксперт MS Access
17486 / 7248 / 1651
Регистрация: 21.06.2012
Сообщений: 13,864
17.04.2015, 14:33 5
Ну тогда в пишите публичную функцию, что-то вроде этой (условия у Вас неполные, так что возможны неверная трактовка) и обращаетесь к ней в запросах, ... .
Visual Basic
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
'Предполагается, что срок годности и осталось целые месяцы
Public Function KKK(ByVal SS As Integer, ByVal OO As Integer) As Currency
    If SS > 18 Then
        Select Case OO
        Case 0, 1
            KKK = 0.1
        Case 2
            KKK = 0.2
        Case 3
            KKK = 0.5
        Case 4
            KKK = 0.7
        Case 5
            KKK = 0.9
        Case 6
            KKK = 1
        Case Else
            KKK = 1
        End Select
    ElseIf SS = 18 Then
        Select Case OO
        Case 0, 1, 2
            KKK = 0.25
        Case 3
            KKK = 0.6
        Case 4
            KKK = 0.7
        Case 5
            KKK = 0.8
        Case Else
            KKK = 1
        End Select
    ElseIf SS = 12 Then
        ...
    End If
End Function
0
Эксперт MS Access
26806 / 14485 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
17.04.2015, 22:01 6
Лучший ответ Сообщение было отмечено WEEKEST как решение

Решение

Вообще говоря, задавать такие сложные отношения в коде не очень хорошо. Гораздо лучше делать это в таблице. Легко пополнять, легко менять параметры. А в коде это сплошной экстрим.

WEEKEST, посмотрите вариант с таблицей чисел для каждого срока. Дополнительная таблица называется Сроки. Запрос, вычисляющий нужное выражение - СрокЗапрос
Вложения
Тип файла: rar СрокиГодности.rar (18.4 Кб, 13 просмотров)
0
0 / 0 / 0
Регистрация: 22.07.2014
Сообщений: 59
20.04.2015, 09:51  [ТС] 7
Да пожалуй это более "рабочий" подход
но я уже сделал с кодом.

Но этот вариант обязательно возьму на заметку - очень нравится мне когда все просто)

Большой спасибо
0
20.04.2015, 09:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2015, 09:51
Помогаю со студенческими работами здесь

Очень много ошибок, как их исправить
#include &lt;iostream&gt; #include &lt;cstdlib&gt; //включаем библиотеки using namespace std; //функции...

Как быть если много форм?
Здравствуйте! Есть стартовая форма Данные в нее загружаются с Excel файла. Далее по кнопке...

Программа ест очень-очень много ОЗУ
При запуске - 14-16 МБ! А весь &quot;прикол&quot; в том... что на в ней ничего нет! Лишь одна форма - и все!...

Как разместить на форме очень много GroupBox?
Планирую сделать на форме наполнение элементами управления которое будет меняться в завсисимости от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru