Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2012, 00:03   #1
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию Mask Edit, Лишние символы

Здравствуйте, помогите пожалуйста.
У меня на форме есть Mask Edit с маской "99/99/99;1;_" , т.е. маска типа " . . ". Если пользователь ввел только первые три цифры и нажал сохранить, то в БД сохраняется запись типа "01.1 . " или если 4 то "01.10. ", для меня это неудобно, так как потом использую left join в запросе. Как мне убирать лишние символы?
Спасибо.
tarakan1983 вне форума Ответить с цитированием
Старый 11.07.2012, 07:08   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Варианты от того что считается "лишними символами":
- если лишние - это все, кроме цифр, то в маске вместо 1 во втором поле поставить 0 (в этом случае в свойстве Text не будут сохраняться никакие посторонние символы, точки тоже);
- если лишние те, которые в конец после последней цифры, то перед тем как отправить в базу значение свойства Text, в цикле убрать концевые символы.
Прик вне форума Ответить с цитированием
Старый 11.07.2012, 18:53   #3
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Извените за долгое молчание, на работе завалили.
Цитата:
Сообщение от Прик Посмотреть сообщение
- если лишние те, которые в конец после последней цифры, то перед тем как отправить в базу значение свойства Text, в цикле убрать концевые символы.
Код:
w:='';
s:=masedit.text;
for i:=1 to length(s) do
  begin
     w:=w+s[i] if ... как мне оределить что это конец?
  end;
варианты могуть быть
"01.2 . "
"01.23. "
"01.23.4 "
"01.23.45"
вместо 12345 могут быть любые чила, но первые три цифры будут обязательно.

Последний раз редактировалось tarakan1983; 11.07.2012 в 19:01.
tarakan1983 вне форума Ответить с цитированием
Старый 11.07.2012, 19:26   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Так примерно:
Код:
var
  K : Integer;
  S : string;
begin
  S := masedit.Text;
  K := Length(S);
  while K > 4 do begin
    if S[K] in ['0'..'9'] then break;
    Dec(K);
  end;
  if K < Length(S) then
    S := Copy(S, 1, K);
end;
Где S - строка результата.
Прик вне форума Ответить с цитированием
Старый 11.07.2012, 19:30   #5
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

У меня вышло чуть по другому
Код:
var
  s,w:string;
  i:Integer;
begin
  s:=mskEdit.Text;
  i:=1;
    repeat
      w:=w+s[i];
      Inc(i);
      if i=9 then Break;
    until s[i]=' ';
  if w[Length(w)]='.' then w:=Copy(w,1,Length(w)-1);

  ShowMessage('"'+w+'"')
Так правильно будет?
tarakan1983 вне форума Ответить с цитированием
Старый 11.07.2012, 19:40   #6
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Правильно или нет, вам судить. Все детали задачи здесь мало известны.
Судя по результату, оба варианта выдают одно и тоже.
Прик вне форума Ответить с цитированием
Старый 11.07.2012, 19:44   #7
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Цитата:
Сообщение от Прик Посмотреть сообщение
Правильно или нет, вам судить. Все детали задачи здесь мало известны.
Судя по результату, оба варианта выдают одно и тоже.
Спасибо, вроде все нормально, еще маленький вопрос, не знаю правда стоит он внимания или нет. Защита от дурака, если Юзьверь введет "_1.__.__", как от этого защититься?
tarakan1983 вне форума Ответить с цитированием
Старый 11.07.2012, 19:47   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

А что должно произойти в этом случае?
Запрет записи такой строки, например.
Или ввод можно подкорректировать и отправить в базу. Но в таком случае как корректная строка должна выглядеть?
Прик вне форума Ответить с цитированием
Старый 11.07.2012, 19:55   #9
tarakan1983
Форумчанин
 
Аватар для tarakan1983
 
Регистрация: 09.09.2008
Сообщений: 418
По умолчанию

Если пользователь начал заполнять это поле, именно начал заполнять а не просто установил курсор в него, то программа ему должна сказать "Ослик - первые три символа надо заполнить обязательно", т.е. минимум "01.1_.__" иначе присвоить этому полю пустое значение
tarakan1983 вне форума Ответить с цитированием
Старый 11.07.2012, 20:06   #10
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

В MaskEdit есть событие OnChange. В процедуре обработки этого события можно проверять какие символы и как вводятся. При необходимости выдавать предупреждение. Менять значение свойства Text в этой процедуре напрямую нельзя (но если очень надо, то можно).
Прик вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лишние символы вводимого текста victorshkoda Общие вопросы Delphi 13 05.01.2012 22:46
лишние символы в ячейке StringGrid при раскрашивании furstenberg Компоненты Delphi 5 29.10.2011 14:06
При копировании текста из word в блокнот появляются лишние символы. paru10 Microsoft Office Word 2 11.02.2010 16:16
Edit,RichEdit + mask Iogan Gamba Puti Win Api 1 10.05.2008 14:45