2016-06-10 3 views
0

Я создал таблицу Поле, и в дополнение к этому, я создал свой собственный EDT, названный: MyEDT (например).Как проверить длину EDT года?

MyEDT является INTEGER типа, и я расширил систему стандарта EDT YearBase. Итак, если я вставляю алфавитные символы (смотрите «abecjskjfh»), я получаю сообщение об ошибке.

Но мне нужно иметь правило, я хочу вставить только значение с 4-символьным символом, мне нужны только значения: 2000, 2006, 1982 и т. Д.

я могу проверить/управлять этим кодом, в методах validateWrite или validateField Я insered этого кода:

switch (p1) 
{ 
case fieldNum(MyTable, MyField) : 
      if (strLen((strFmt("%1",this.MyField))) != 4) 
      throw error ("Inser only value AAAA"); 
      break; 
} 

Но это возможно, или существует Creato или axtends Год EDT лишь 4 число char длина? Или есть еще один способ проверить длину оценки поля?

Спасибо,

наслаждайтесь!

ответ

3

Если вы хотите использовать целочисленный EDT, я думаю, что нет возможности ограничить диапазон разрешенных номеров, за исключением свойства AllowNegative. Поэтому вы должны сделать проверку в коде, как в своем вопросе. Но я бы предложил изменить вашу логику проверки, чтобы проверить диапазон чисел, а не называть число в строке и затем проверять количество символов. Таким образом, вы можете также убедиться, что пользователи не могут войти в год, как 0000.

if (this.MyField< 1900 || this.MyField > 9999) 
{ 
    throw error("Please enter a year between 1900 and 9999"); 
} 

Другая возможность может быть использовать дату EDT, где вы установили DateYear, DateMonth и DateDay свойства, такие, что только год показано на рисунке. Это также поможет с вводом данных (например, 2 заменяется на 2002) и дает вам хороший диалог ошибок, если пользователи вводят, например, «abc».

Screenshot of example using date EDT that only shows the year

+0

Очень thansk @ FH-Inway, хорошо работать, хорошее решение! – ulisses

1

Вы можете использовать X ++ match функцию.

match('<:d:d:d:d>','2004') будет соответствовать всем 4-значным строкам (0000-9999).

match('<[12]:d:d:d>','2004') соответствует строке 1000-2999.

Альтернативный способ заключается в использовании System.Text.RegularExpressions.Regex.IsMatch('1234', '^\d{4}$')

+0

Спасибо @Matej, хорошая информация! – ulisses