powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переменная в операторе ветвления.
44 сообщений из 44, показаны все 2 страниц
Переменная в операторе ветвления.
    #39737121
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В очень многих местах кода используется оператор ветвления с одним и тем же набором условий.
А именно
"Рога", "Справки", "Копыта", "Шапки"

Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
 Case "Рога", "Справки", "Копыта", "Шапки"



подскажите как можно записав эту строку в коде единожды в переменную или ещё во что,
что бы каждый раз не писать этот набор
Код: vbnet
1.
 "Рога", "Справки", "Копыта", "Шапки"


а подставлять короткую замену типа:
Код: vbnet
1.
2.
3.
4.
 
NABOR =  "Рога", "Справки", "Копыта", "Шапки"
Select Case KOGO_VIBRATb
 Case NABOR 



------------------------------------------------------------------------
Спасибо за ответ.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737172
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58,

Где-то в начале:
Код: vbnet
1.
2.
3.
Dim NABOR As String
Dim KOGO_VIBRAT As String
NABOR = "Рога Справки Копыта Шапки"


Потом процедура:
Код: vbnet
1.
2.
3.
4.
5.
6.
Public CHAS58 Function (NABOR As String, VXOD As String) As Long
CHAS58 = 0
On error GoTo er1
CHAS58 = InStr (NABOR, VXOD)
er1:
End  Function


Как пользоваться:
Код: vbnet
1.
2.
3.
4.
5.
If CHAS58 (NABOR, KOGO_VIBRAT) = 0 Then
MsgBox "Не входит в набор"
Else
MsgBox "Входит"
End If


Ну как бы Case тут наверно не в кассу, наверно нужно If -ы использовать типа...
Код: vbnet
1.
2.
3.
NABOR =  "Рога Справки Копыта Шапки"
KOGO_VIBRAT = "Рога"
If CHAS58 (NABOR, KOGO_VIBRAT) > 0 Then ....


Единственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",
если такая вероятность есть, то функцию нужно переделывать (NABOR сделать не строку, а массив или временную табличку со значениями)

Ну или я тебя не понял....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737183
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagесли такая вероятность есть, то функцию нужно переделывать (NABOR сделать не строку, а массив или временную табличку со значениями)
а если ее нет, то тупо используй
Код: vbnet
1.
If InStr (NABOR, KOGO_VIBRAT) > 0 Then....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737184
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

Да "правки" и "Справки" это конечно - да.
Ты советуешь ИФами пользоваться...
Надо подумать.
Слишком до фига этих case, к тому же там ветвления не одного порядка...
потому хотел придумать изврат именно с case...
в любом случае. спасибо за совет.
Надо подумать.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737187
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

А CASE с Instr() - не дружат?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737193
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58потому хотел придумать изврат именно с case...

Если набор будет не строка а строки или элементы массива строк, то можно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
s1 = "Рога"
s2 = "Копыта"
'.....
Select Case KOGO_VIBRAT
Case s1, s2
MsgBox "Да"
Case Else
MsgBox "Нет"
End Select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737195
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
    Dim dct As Object
    Dim KOGO_VIBRATb As String
    Dim Worlds(0 To 2)
    Dim i As Integer, j As Integer
    
    KOGO_VIBRATb = "Усы"
    Worlds(0) = Array("Рога", "Справки", "Копыта", "Шапки")
    Worlds(1) = Array("Усы", "Лапы", "Хвост")
    Worlds(2) = Array("Капуста", "Картошка", "Морковь")
    
    Set dct = CreateObject("Scripting.Dictionary")
    For j = LBound(Worlds) To UBound(Worlds)
        For i = LBound(Worlds(j)) To UBound(Worlds(j))
            dct.Add Worlds(j)(i), j
        Next i
    Next j
    
    If dct.Exists(KOGO_VIBRATb) Then
        Select Case dct.Item(KOGO_VIBRATb)
            Case Is = 0
            Debug.Print 0
        Case Is = 1
            Debug.Print 1
        Case Is = 2
            Debug.Print 2
        End Select
    Else
        Debug.Print "Нету такового!"
    End If
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737196
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58А CASE с Instr() - не дружат?

выход из Instr ноль или число, подумай...
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737197
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если набор будет не строка а строки или элементы массива строк, то можно так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
s1 = "Рога"
s2 = "Копыта"
'.....
Select Case KOGO_VIBRAT
Case s1, s2
MsgBox "Да"
Case Else
MsgBox "Нет"
End Select



Но тада это тоже самое

Код: vbnet
1.
2.
Select Case KOGO_VIBRAT
Case "Рога", "Справки", "Копыта", "Шапки"
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737198
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagчас58А CASE с Instr() - не дружат?

выход из Instr ноль или число, подумай...
чёт башка совсем не варит.
Уже полночь близится.
Надо отложить это до завтра.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737199
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared,

чуть мозг не сгорел...
:)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737200
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared,

Scripting.Dictionary....
Вон как ?!
Высший пилотаж аж.
Надо будет завтра поюзать.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737203
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58,
создал таблицу "tblSpravka", упрощенно
ID_Check Parent Naim1 0 Константы 2 1 Общий, Частный3 1 Рога, Справки, Копыта, Шапки
создал функцию типа
Код: vbnet
1.
2.
3.
4.
5.
6.
Public function FromSprav(Vid&) as string
Dim prov,  str$
prov=Dlookup("[Naim]","tblSpravka", "[ID_Check]=" & Vid)
If isnull(prov) then str=vbnullstring else str=Cstr(prov)
FromSprav=str
exit function


Вызывается так FromSprav(3)
Родитель для создания самообъединения и редактирования.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737204
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmagPredeclared,

чуть мозг не сгорел...
:)
Надо регулярно периодически охлаждать.
Есть вкусный хладогент: Beluga
:)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737205
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Спасибо.
А где тут ветвление CASE ?

мне бы
Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
 Case "Рога", "Справки", "Копыта", "Шапки"



вместо строки
Код: vbnet
1.
 "Рога", "Справки", "Копыта", "Шапки"



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

типа
Код: vbnet
1.
2.
3.
NABOR =  "Рога", "Справки", "Копыта", "Шапки"
Select Case KOGO_VIBRATb
 Case NABOR 
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737208
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
Select case KOGO_VIBRATb
case fromsprav(3)
case fromSprav(2)
...
end select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737211
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Но тогда получается - таблица вроде как и не нужна?
Внутри функции
Код: vbnet
1.
 Public function FromSprav()


организовать своё ветвление на CASE
а в программе, просто обращаться к этой функции
Код: vbnet
1.
2.
 Select Case KOGO_VIBRATb
case fromsprav(3)



или я туплю?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737217
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можно и в функции в чистом виде хранить
но константы нужно заводить в таблицу (если "Шапки" у клиента станут "Фуражками", количество аргументов уменьшится/увеличится, в код лезть будет необязательно)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737220
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если аргументов таки немного то делают так
в шапке модуля где хранится функция записывают
Код: vbnet
1.
2.
3.
4.
5.
Enum V2Sprav
    GolUbors= 3
    Events = 2
End Enum
Public function FromSprav(vid as V2Sprav)


в этом случае при выборе аргумента будет помощь
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737237
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
час58vmag,

А CASE с Instr() - не дружат?
Подружить надо :)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function cl(virez As String)
vi = "один,два,три"
ggg = Mid(vi, IIf(InStr(1, vi, virez) > 0, InStr(1, vi, virez), 1), Len(virez))
Select Case virez
    Case ggg
        MsgBox "входит"
    Case Else
        MsgBox "не входит"
End Select
End Function
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737260
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zimkon, привет!

Твой вариант тоже наткнется на такие грабли:
vmagЕдинственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",

не смотря на большее количество InStr чем в моем примере + Mid + IIF
:)

Выход проще, в моем примере с одним InStr (как и в твоем нужно только причесать данные):
1. Общий пакет (строку) оформлять например так:
"@Рога@Справки@Копыта@Шапки@"
2. Искать в ней например это
"@Рога@" найдется
"@правки@" не найдется
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737261
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче,
Если причесать данные так как выше, то хватит одной строки
Код: plsql
1.
If InStr (NABOR, KOGO_VIBRAT) > 0 Then....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737267
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PredeclaredЕсть вкусный хладогент: BelugaХм... На вкус и цвет... Обычная водяра.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737270
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmagzimkon, привет!

Твой вариант тоже наткнется на такие грабли:
vmagЕдинственное нужно проанализировать варианты типа не сработает ли слово "правки" из-за "Справки",

не смотря на большее количество InStr чем в моем примере + Mid + IIF
:)

Выход проще, в моем примере с одним InStr (как и в твоем нужно только причесать данные):
1. Общий пакет (строку) оформлять например так:
"@Рога@Справки@Копыта@Шапки@"
2. Искать в ней например это
"@Рога@" найдется
"@правки@" не найдется
Привет! Я подумал об этом через минуту после того, как нажал опубликовать. Лень было пост править.
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 Public Function cl(virez As String)
vi = ",один,два,три,"
ggg = Mid(vi, IIf(InStr(1, vi, "," & virez & ",") > 0, InStr(1, vi, "," & virez & ",") - 1, 1), Len(virez))
Select Case virez
    Case ggg
        MsgBox "входит"
    Case Else
        MsgBox "не входит"
End Select
End Function 
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737274
zimkon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очепятка ...не - 1, а + 1
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737314
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko,

Изначально, я не предполагал, что у них так часто будут меняться шапки на фуражки и появляться кепки...
залез в код, раз в год и заменил слова ассортимента.
Теперь вот надо исправлять свой промах.
Слишком много мест править приходится.
Хорошо, если это будет только в одном месте кода, которое подставляется в виде короткой и постоянной строчки типа (NABOR)в качестве условия отбора во все остальные места
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737317
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58alecko,

Изначально, я не предполагал, что у них так часто будут меняться шапки на фуражки и появляться кепки...
залез в код, раз в год и заменил слова ассортимента.
Теперь вот надо исправлять свой промах.
Слишком много мест править приходится.
Хорошо, если это будет только в одном месте кода, которое подставляется в виде короткой и постоянной строчки типа (NABOR)в качестве условия отбора во все остальные места

почему бы не выносить всю эту информацию в базу? Зачем менять код? Сделайте им настройку, пусть сами выбирают.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737321
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОзверинЗачем менять код? Сделайте им настройку, пусть сами выбирают.
А оплачиваемая поддержка?..
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737329
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПанургОзверинЗачем менять код? Сделайте им настройку, пусть сами выбирают.
А оплачиваемая поддержка?..

разработка стоит дороже, чем поддержка. Зачем тратить время на поддержку?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737334
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Поддержка, порой, длится годами....
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737346
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо всем за помощь.
Булевые рулят!
получилось так:

Функция :
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Public Function FUN_NABOR_VIDOV_PAY(PAY_VIDS As String) As Boolean
'проверка принадлежности платежа
FUN_NABOR_VIDOV_PAY = False

Select Case PAY_VIDS

Case "Рога", "Копыта", "Справки", "шапки"
  FUN_NABOR_VIDOV_PAY = True
End Select

End Function



Во всех селектах - обращаемся к этой функции.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Select Case FUN_NABOR_VIDOV_PAY(PAY_VIDS)
    
    Case True
     ' нужное
      FUN_NADA_KTI_YES_NO = True
    Case Else
    ' иное
      FUN_NADA_KTI_YES_NO = False
    End Select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737347
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58, ад какой то ;)
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737349
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно, конечно к этой функции обращаться и по
If ....

Главное, что менять значение строки теперь придётся в одном месте кода.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737350
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Спасибо.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737354
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58Озверин,

Спасибо.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
 Select Case FUN_NABOR_VIDOV_PAY(PAY_VIDS)
    
    Case True
     ' нужное
      FUN_NADA_KTI_YES_NO = True
    Case Else
    ' иное
      FUN_NADA_KTI_YES_NO = False
    End Select



Я не понял, а почему бы просто не вернуть значение ф-ии FUN_NABOR_VIDOV_PAY(PAY_VIDS)? Зачем еще его в select-case загонять?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737360
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Озверин,

Да, ты прав.
Просто это вообще не то вышло, что я пытаюсь сделать.
:-)
Мне надо в многоветвевой отбор селектами, вставить одно из условий в виде
Case NABOR
заменив последовательность слов
Код: vbnet
1.
 "Рога", "Копыта", "Справки", "шапки"


Одним словом NABOR.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Select Case VID

Case  NABOR
.....
Case  NABOR_1
....
Case  NABOR_2
....
 Case Else 
....
End Select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737364
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58, так а зачем из одного select-case делать два?
чем вас не устраивает ситуация

Код: vbnet
1.
2.
3.
4.
select case 
 case "рога", "копыта"
 case "автомобили", "ковши"
end select
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737366
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58, тебе же уже предложили нормальный (для этой ненормальной ситуации) вариант! Который с таблицей. Два поля " ключ-значение ", дёргать длукапом или запросом.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737373
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58, а откуда приходят эти рога и копыта?
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737392
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,
ты прав.
Этот вариант норм.
Только, конечно, без таблицы буду делать.
Просто шарики за ролики заскочили с этим авралом...
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737402
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58Этот вариант норм.
Только, конечно, без таблицы буду делать.Это как?!
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737406
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

в ЛОБ.
в коде строки.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737567
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
час58в ЛОБ.
в коде строки.


Летит тяжелый транспортный самолет в сопровождении двух истребителей.
Лететь долго, и пилотам истребителей стало скучно.
Ну и начали они вы@бываться друг перед другом:
мертвые петли крутят, виражи, восьмерки.
И тут в радиоэфир вклинивается пилот транспортника:
— А спорим, я сейчас сделаю то, чего вы на своих истребителях никогда не сможете.
— Ты? На своем беременном Ил-76, собрался тягаться с нами, лучшими асами страны?
Ну давай, удиви нас. Прошло десять минут, транспортник как летел ровно, так и летит.
Истребителям надоело ждать, и они вызывают пилота Ил-76:
— Ну и? Когда ты начнешь?
— Уже готово.
— И что же ты сделал того, что не можем мы?
— Сходил поссать и выпил кофе.
...
Рейтинг: 0 / 0
Переменная в операторе ветвления.
    #39737576
Фотография час58
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,
:-)
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Переменная в операторе ветвления.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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