Как отфильтровать символы в поле текстового элемента в Oracle Forms?

мы используем формы оракула... мы должны защитить (или) заблокировать поле текстового элемента от специальных символов. как ( !@#$%^&*) пожалуйста, пришлите несколько руководств.... заранее спасибо...

С уважением, Виджай


person Community    schedule 19.02.2009    source источник


Ответы (3)


Когда ваше текстовое поле как введенный текст, у вас должна быть функция, которая проверяет весь ввод.

В этой функции у вас есть диапазон недопустимых значений. Этот диапазон сделан в ASCII.

person rpf    schedule 19.02.2009
comment
Спасибо. Есть ли в Oracle встроенные функции для этого? Или же мы должны сидеть и писать функцию для этого функционала. С уважением, Виджай - person ; 20.02.2009

Вы можете использовать свойство маски формата, например 999,99.

person Bigballs    schedule 19.02.2009

Какая версия форм?

Метод грубой силы:

v_prohibited_chars VARCHAR2(100) := '!@#$%^&*';
v_result           VARCHAR2(4000);
...
-- strip prohibited characters
v_result := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');

-- if anything was stripped, lengths will differ
IF LENGTH(:form_field) <> LENGTH(v_result) THEN
  error...
END IF

Если я правильно понимаю ваш комментарий, вы хотите иметь возможность фильтровать специальные символы из поля формы?

Приведенный выше код делает это и помещает результат в v_result. Таким образом, если у вас есть входное значение «ABC#DEF#», а ваша маска фильтра — «!@#$%^&*», то после выполнения TRANSLATE вашим результатом будет «ABCDEF». Затем вы можете переназначить это значение в поле формы. Если вы просто хотите убрать символ без вывода сообщений, вы можете пропустить проверку LENGTH и просто назначить вывод TRANSLATE обратно в поле формы:

:form_field := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');

Что делает TRANSLATE, так это сверяет символы в первом параметре с символами во втором параметре. Когда он находит совпадение, он переводит этот символ в соответствующий символ в третьем параметре. Если в третьем параметре нет соответствующих символов для одного во втором, то символ преобразуется в NULL. Если символ не появляется во втором параметре, он остается неизменным. Таким образом, символ «А» преобразуется в «А», а все остальные символы в маске преобразуются в NULL. Третий параметр не может быть NULL, поэтому фиктивный перевод «A» в «A».

person DCookie    schedule 19.02.2009
comment
Спасибо, нам нужно написать код для фильтрации специального символа, который встречается в любом месте фактического текста.. все символы изменятся, например, «JI345LP#» или «AB#CD» нет правильной последовательности... в этом случае, как чтобы получить длину поля с помощью перевода... пожалуйста, помогите нам... Еще раз спасибо. - person ; 25.02.2009
comment
Изменил мой ответ, чтобы ответить на ваш комментарий. - person DCookie; 25.02.2009