powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как преобразовать текст в выражение
14 сообщений из 14, страница 1 из 1
Как преобразовать текст в выражение
    #39199680
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть функция:
Код: 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.
Public Function fncПроверка(strВидПроверки As String) As Boolean
    Select Case fncКодПроверки(strВидПроверки)
        Case 1                                                                  'Некорректный символ
            If InStr(1, strКлавиатура, strНекорректныйСимвол) <> 0 Then
                fncПроверка = True
            End If
        Case 4                                                                  'Серийные уже есть
            strЗапрос = "SELECT u.СерийныйНомер FROM u WHERE u.КодТовара =" _
                & frmФорма!ПолеАртикул                                        
            Set rst = dbТекущая.OpenRecordset(strЗапрос, dbOpenDynaset)
                If rst.EOF = False Then
                    fncПроверка = True
                    ВставитьКоммент 7
                End If
        Case 10                                                              
                If strКлавиатура = "00001" Then                              
                    fncПроверка = True
                    ВставитьКоммент 14
                End If
        Case 11                                                                 'Разная длина штрих-кодов
                If Len(frmФорма!ПолеFrom) <> Len(frmФорма!ПолеTo) Then
                    fncПроверка = True
                    ВставитьКоммент 15
                End If


Функция выполняет одну из проверок и возвращает ИСТИНА/ЛОЖЬ. Но вариантов проверки предполагается несколько сотен, в итоге текст самой функции станет не читаемым.
ХОЧЕТСЯ, чтобы функция получила условие проверки в виде текстовой строки, поняла, что это логическое выражение и выполнила его.Что-то вроде этого:
Код: vbnet
1.
2.
3.
4.
5.
                a="Len(frmФорма!ПолеFrom) <> Len(frmФорма!ПолеTo)"
If  Then
                    fncПроверка = True
                    ВставитьКоммент 15
                End If
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39199695
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прошу прощение, отправил не доделанный текст
Есть функция:
Код: 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.
Public Function fncПроверка(strВидПроверки As String) As Boolean
    Select Case fncКодПроверки(strВидПроверки)
        Case 1                                                                  'Некорректный символ
            If InStr(1, strКлавиатура, strНекорректныйСимвол) <> 0 Then
                fncПроверка = True
            End If
        Case 4                                                                  'Серийные уже есть
            strЗапрос = "SELECT u.СерийныйНомер FROM u WHERE u.КодТовара =" _
                & frmФорма!ПолеАртикул                                        
            Set rst = dbТекущая.OpenRecordset(strЗапрос, dbOpenDynaset)
                If rst.EOF = False Then
                    fncПроверка = True
                    ВставитьКоммент 7
                End If
        Case 10                                                              
                If strКлавиатура = "00001" Then                              
                    fncПроверка = True
                    ВставитьКоммент 14
                End If
        Case 11                                                                 'Разная длина штрих-кодов
                If Len(frmФорма!ПолеFrom) <> Len(frmФорма!ПолеTo) Then
                    fncПроверка = True
                    ВставитьКоммент 15
                End If


Функция выполняет одну из проверок и возвращает ИСТИНА/ЛОЖЬ. Но вариантов проверки предполагается несколько сотен, в итоге текст самой функции станет не читаемым.
ХОЧЕТСЯ, чтобы функция получила условие проверки в виде текстовой строки, поняла, что это логическое выражение и выполнила его.Что-то вроде этого:
Код: vbnet
1.
2.
3.
4.
5.
                a="Len(frmФорма!ПолеFrom) <> Len(frmФорма!ПолеTo)"
               If какаяТоФункция(а) Then
                    fncПроверка = True
                    ВставитьКоммент 15
                End If


Это возможно?
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39199734
MrShin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Eval попробуйте. Она, правда, не все выражения поддерживает.
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39199745
l-evgeneХОЧЕТСЯ, чтобы функция получила условие проверки в виде текстовой строки, поняла, что это логическое выражение и выполнила его.Что-то вроде этого:
Код: vbnet
1.
2.
3.
4.
5.
                a="Len(frmФорма!ПолеFrom) <> Len(frmФорма!ПолеTo)"
               If какаяТоФункция(а) Then
                    fncПроверка = True
                    ВставитьКоммент 15
                End If


Это возможно? В Аксе есть функция EVal. Как раз она и возвращает результат выражения в строке. Например:
Код: vbnet
1.
2.
3.
4.
?EVal("Len(""ABC"") <> Len(""ABCD"")")
-1 
?EVal("Len(""ABC"") <> Len(""ABC"")")
 0 

Функция также понимает полные ссылки на поля открытой формы. Т.е. в вашем случае вместо frmФорма!ПолеFrom нужно Forms![Имя формы!ПолеFrom
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39199749
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgeneвариантов проверки предполагается несколько сотен, в итоге текст самой функции станет не читаемым.
Выносите по мере отладки сами варианты проверки в функции. Какие проблемы? А в этой функции останется только объединяющий скелет.
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39199954
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,

Если не секрет - а что это за штрих-код (тип) куда нужно засунуть код товара, его серийный номер, артикул, может ещё чего, ну и естественно - зачем? Может енто всё лишнее, типа масло-масляное... (настораживает несколько раз по 100 проверок)
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200015
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,

где объявлены
--переменные
strКлавиатура
strНекорректныйСимвол
rst

--функция
ВставитьКоммент 7

как вызывается fncПроверка
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200419
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКАl-evgene,

где объявлены
--переменные
strКлавиатура
strНекорректныйСимвол
rst

--функция
ВставитьКоммент 7

как вызывается fncПроверка
Все объявлено на уровне модуля. rst формируется перед каждой проверкой (если нужно) и объявлен на уровне процедуры
Код: 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.
Option Compare Database
Option Explicit

Public frmФорма As Form, strФорма As String
Public strКлавиатура As String, longKeyAscii As Long
Public Const strНекорректныйСимвол = "&@^*"

Public Function fncПроверка(strВидПроверки As String) As Boolean
Dim strЗапрос As String
Dim rst As Recordset

...................
        Case 4                                                                  'Серийные уже есть
            strЗапрос = "SELECT u.СерийныйНомер FROM u WHERE u.КодТовараНаОтгрузку=" _
                & frmФорма!ПолеАртикул                                          
            Set rst = dbТекущая.OpenRecordset(strЗапрос, dbOpenDynaset)
                If rst.EOF = False Then
                    fncПроверка = True
                    ВставитьКоммент 7
                End If
................
End Function

.................

Public Sub ВставитьКоммент(longКодКоммента As Long)
.................
End Sub



Вызов функции:
Код: vbnet
1.
2.
3.
4.
5.
    If fncПроверка("Некорректный символ") Then                             'если в штрих-коде есть НекорректныйСимвол
    ElseIf fncПроверка("Заявка не сохранена") Then                        'если есть не сохраненная заявка, работать можно только с ней
    ...................
     ElseIf fncПроверка("Перевести заявку в редактирование") Then        'если заявка находится в сохраненных, ее надо перевести в режим редактирования
.............



Задачу удалось решить при помощи eval, спасибо MrShin, Анатолий ( Киев ).
Правда, получилось не очень красиво. Если есть варианты, буду признателен.
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200487
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
l-evgene,

чтобы найти один из нескольких символов
Код: vbnet
1.
Public Const strНекорректныйСимвол = "&@^*"


надо пускать для каждого символа
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
dim j1,j1k
j1k=len(strНекорректныйСимвол)
j1=0
do while j1<j1k
j1=j1+1
If InStr(1, strКлавиатура, mid(strНекорректныйСимвол,j1,1) > 0 Then
msgbox "НекорректныйСимвол"
exit do
endif
loop
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200531
Lockpickup
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для решения таких задач специально придуманы регулярные выражения. См. объект RegExp
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200564
l-evgene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
Здесь другая задача. Переменная strКлавиатура содержит текст, считанный сканером штрих-кода. Сканер последовательно считывает символы штрих-кода и эмулирует нажатие клавиш. Символы последовательно добавляются в переменную. Если попадается недопустимый символ, вместо него добавляется дикий набор, которого в жизни быть не может. По окончании ввода, прога анализирует полученный текст и при наличии недопустимого символа не записывает его в таблицу.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub ПолеФокус_KeyPress(KeyAscii As Integer)                             'обработка нажатия клавиш
    If KeyAscii < 127 Then                                                      'Разбираем только символы от 0 до 127
        strКлавиатура = strКлавиатура & Chr(KeyAscii)
    Else
        strКлавиатура = strКлавиатура & strНекорректныйСимвол                   'вместо остальных добавляем НекорректныйСимвол
    End If
End Sub
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200565
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКАl-evgene,

чтобы найти один из нескольких символов
Код: vbnet
1.
Public Const strНекорректныйСимвол = "&@^*"


надо пускать для каждого символа
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
dim j1,j1k
j1k=len(strНекорректныйСимвол)
j1=0
do while j1<j1k
j1=j1+1
If InStr(1, strКлавиатура, mid(strНекорректныйСимвол,j1,1) > 0 Then
msgbox "НекорректныйСимвол"
exit do
endif
loop

В данном случае было бы достаточно
Код: sql
1.
If strКлавиатура Like "*" & [&@^*] & "*" Then
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200578
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, еще попроще
Код: vbnet
1.
If strКлавиатура Like "*[&@^*]*" Then   

Хотя, если нужно использовать константу strНекорректныйСимвол, то так
Код: vbnet
1.
If strКлавиатура Like "*" strНекорректныйСимвол & "*" Then   
...
Рейтинг: 0 / 0
Как преобразовать текст в выражение
    #39200587
Фотография __Michelle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__MichelleПрошу прощения, еще попроще
Код: vbnet
1.
If strКлавиатура Like "*[&@^*]*" Then   

Хотя, если нужно использовать константу strНекорректныйСимвол, то так
Код: vbnet
1.
If strКлавиатура Like "*[" strНекорректныйСимвол & "]*" Then   

Поправила.)))
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как преобразовать текст в выражение
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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