Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EditMask - без кириллицы / 17 сообщений из 17, страница 1 из 1
09.06.2005, 20:39
    #33110558
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Здравствуйте, уважаемые одночатцы!

Помогите, пожалуйста, решить одну проблему. Есть строковое поле в DataWindow, которое должно заполняться ТОЛЬКО английскими буквами и цифрами. Естественно, юзеру это глубоко фиолетово, и он умудряется впихнуть в это поле вместо английских букв соответствующие русские, из-за чего в последствии невозможно корректно сравнивать данные значения.

Выход я вижу в написании маски ввода значений в это поле - но никак не могу сообразить, как же разрешить ввод только цифр и английских букв? Подскажите пожалуйста, как решить эту проблему? ;-)))

Система - PowerBuilder 9.
...
Рейтинг: 0 / 0
09.06.2005, 21:13
    #33110591
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Я подобными вещами не занимался, в лоб похоже надо скриптать itemfocuschanged event, если попал в "поле без кириллицы", то менять раскладку клавиатуры/локаль и т.д и т.п.
...
Рейтинг: 0 / 0
09.06.2005, 21:35
    #33110615
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Кстати, тут рассказано как это динамически делать...
...
Рейтинг: 0 / 0
09.06.2005, 21:55
    #33110635
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
К сожалению, уважаемый Филипп, из скрипта у меня ничего не получиться... Для редактирования и манипуляций у меня доступен только DataWindow и объекты...

Это из той оперы, когда один разработчик делает супер-программу, закрывает доступ к ее скриптам и модификации оных, а потом - увольняется... ;-)))

Единственный выход, который вижу я - это использование EditMask или, на самый крайний случай, использование Validation Expressions... ;-)))

С удовольствием послушаю мнение одночатцев о решении данной проблемы... ;-)))
...
Рейтинг: 0 / 0
09.06.2005, 22:54
    #33110663
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
AmberitЕдинственный выход, который вижу я - это использование EditMask или, на самый крайний случай, использование Validation Expressions... ;-)))
Навскидку думаю ни то ни другое у вас не выйдет.
...
Рейтинг: 0 / 0
10.06.2005, 00:10
    #33110707
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
ФилиппЯ подобными вещами не занимался, в лоб похоже надо скриптать itemfocuschanged event, если попал в "поле без кириллицы", то менять раскладку клавиатуры/локаль и т.д и т.п.
А того кто будет переключать раскладку клавиатуры, мы будем резать тупым ржавым ножом, чтоб мучался подольше. Никогда и не при каких обстоятельствах нельзя менять раскладку клавиатуры.

2 Amberit, через маску не получится точно. А вот через validation expression есть пара способов вывернуться.
Можно написать там что-то вроде:
pos(GetText(), 'А')+pos(GetText(), 'Б')+....+pos(GetText(), 'я') = 0
В принципе работать будет :)

А лучше всего сделать глобальную функцию, положить ее в какую-нибудь pbl и вызывать эту функцию из validation - CheckAlphabet(GetText())
А сама функция будет:
Код: plaintext
1.
2.
3.
4.
5.
boolean CheckAlphabet(string str)
for i= 1  to len(str)
  c = asc(mid(str, i,  1 )) 
  if c< 65  or c> 96  then return false
next
return true
...
Рейтинг: 0 / 0
10.06.2005, 00:25
    #33110717
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
White Owl ФилиппЯ подобными вещами не занимался, в лоб похоже надо скриптать itemfocuschanged event, если попал в "поле без кириллицы", то менять раскладку клавиатуры/локаль и т.д и т.п.
А того кто будет переключать раскладку клавиатуры, мы будем резать тупым ржавым ножом, чтоб мучался подольше. Никогда и не при каких обстоятельствах нельзя менять раскладку клавиатуры.

Ну так её надо туды сюды. Некоторые программки это очень успешно делают, но не то чтобы я на этом настаивал :-)
...
Рейтинг: 0 / 0
10.06.2005, 00:28
    #33110720
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
White OwlА сама функция будет:
Код: plaintext
1.
2.
3.
4.
5.
boolean CheckAlphabet(string str)
for i= 1  to len(str)
  c = asc(mid(str, i,  1 )) 
  if c< 65  or c> 96  then return false
next
return true

А это по-моему вообще не поможет...
...
Рейтинг: 0 / 0
10.06.2005, 00:31
    #33110722
ЗоринАндрей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
А лучше всего почитать в хелпе про функцию Match(...) и исользовать ее в Validation Expression.
Например: Match( a , '^[A-Za-z]+$')
...
Рейтинг: 0 / 0
10.06.2005, 01:40
    #33110748
Филипп
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
ЗоринАндрейА лучше всего почитать в хелпе про функцию Match(...) и исользовать ее в Validation Expression.
Например: Match( a , '^[A-Za-z]+$')
И это не поможет если юзер раскладку клавы переключил не выходя из поля...
...
Рейтинг: 0 / 0
10.06.2005, 08:54
    #33110881
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Спасибо, товарищи, за некоторую помощь... Но через Validation решать все-таки нежелательно... В большинстве своем мозг юзера не улавливает разницы между символами кириллицы и латиницы - пишутся ведь одинаково! И чихать он хотел на то, что эти символы имеют совсем разные коды! И уж тем более его введет в ступор после ввода информации (15-20 букв-цифр вперемешку)сообщение о том, что ее нужно ввести еще раз, предварительно сменив раскладку клавиатуры... ;-)))

Подумавши - пришла идея. Попытаться реализовать это через триггер (СУБД Oracle). Пользователь вводит в какой хочет раскладке, триггер при обновлении с помощью функции Translate() преобразовывает все символы кириллицы в латиницу, и в БД заносятся данные в нужной мне раскладке...
;-)))

Сейчас иду на работу - попробую... Что Вы, ув. одночатцы, думаете об этом способе? ;-)))
...
Рейтинг: 0 / 0
10.06.2005, 09:06
    #33110901
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
AmberitПопытаться реализовать это через триггер (СУБД Oracle)
Возможно и получится, но это несколько идеологически неверно ;)

Вносить в БД не то что пользователь ввел, потом концов не найти, а крайним будет кто?... угу кто это все написал. Лучше из триггера выдавать сообщение что поле содержит неразрешенные символы, или проверять на этапе ввода.
...
Рейтинг: 0 / 0
10.06.2005, 09:13
    #33110919
Estets
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
В большинстве своем мозг юзера не улавливает разницы между символами кириллицы и латиницы - пишутся ведь одинаково!
Или еще один дурацкий совет... поставить в качестве шрифта на поле не MS Sans Serif, а шрифт не поддерживающий кириллицу, тогда юзер сразу уловит разницу между C-латинской и кракозяброй.
...
Рейтинг: 0 / 0
10.06.2005, 10:07
    #33111054
Konstantin Goldobin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Вот такое попробуйте:

instance var:
string is_prev

editchanged:
if not match( data, '^[a-zA-Z0-9]*$') then
setText( is_prev)
else
is_prev = data
end if

--
With regards,
Konstantin Goldobin
www.vsi.ru/~kgold



Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
10.06.2005, 10:39
    #33111165
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
EstetsЛучше из триггера выдавать сообщение что поле содержит неразрешенные символы, или проверять на этапе ввода.
Я бы сказал "не лучше", а обязательно написать триггер на проверку. Клиент может проверять сколько угодно, но если по условиям задачи данные обязательно должны быть латиницей, то БД должна это всегда гарантировать вне зависимости от того, откуда в нее происходит запись информации - из клиентского приложения, импорта данных или выполнения ручками скрипта SQL.
...
Рейтинг: 0 / 0
10.06.2005, 13:59
    #33111940
iLLer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
AmberitПодумавши - пришла идея. Попытаться реализовать это через триггер (СУБД Oracle). Пользователь вводит в какой хочет раскладке, триггер при обновлении с помощью функции Translate() преобразовывает все символы кириллицы в латиницу, и в БД заносятся данные в нужной мне раскладке...


Во, хотел посоветовать, да сами додумались.
В триггере сделать проверку/доводку/подмену/инициализацию данных.
И все замечательно будет. Лучше места не найти, чем триггера в IT!!!

А если, например, принципиально хранить то, что ввел пользователь, то надо добавить в таблицу поле и триггер для его заполнения/изменения или "вычисляемоеполе", в случае простоты конвертации. Пользователь и знать не знает о существовании доп. поля, как вообщем-то и клиентское ПО.
А в дальнейшем использовании юзать уже это приведенное к стандарту поле.
...
Рейтинг: 0 / 0
10.06.2005, 23:44
    #33112950
Amberit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EditMask - без кириллицы
Всем спасибо большое за советы и бурное обсуждение возникшей передо мной проблемы. Решил ее все-таки, несмотря на все за и против, через триггер. Это решение, несмотря ни на что, обеспечивает прозрачность работы программы для клиента - вводи что хочешь, а храниться это будет так, как нам, разработчикам, нужно... ;-)))

Так что, ув. одночатцы - до скорых встреч на форуме! ;-)))
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EditMask - без кириллицы / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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