Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.05.07;
Скачать: CL | DM;

Вниз

Fb1.5 Как разрешить юзеру ввести в поле   Найти похожие ветки 

 
Exciter ©   (2006-03-10 17:24) [0]

Как разрешить юзеру ввести в поле только цыфры и/или английские символы ? Незнаю как ограничить ввод всего остального на уровне триггера.

CREATE TRIGGER REPORTQUERYS_BIU0 FOR REPORTQUERYS
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable I Integer;
declare variable J Integer;
declare variable L Integer;
declare variable Err Integer;
declare variable En VarChar(62);
declare variable n  VarChar(1);
declare variable c  VarChar(1);
begin
if (new.gridname is not null) then
i=1; L = strlen(new.gridname);
En = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
Err = 0;
while (i <= L) do
 begin
  j = 1;
  N = substring(new.gridname, i, 1);   --НЕ хочет!
  while (j <= 62) do
   begin
    C = substring(En, j, 1);    --НЕ хочет!
    if (N = C) then Err = 1;
    j = j + 1;
   end
  if (Err = 1) then execute procedure error("В имени сетки должны быть только английские символы и цифры");
  i = i + 1;
 end
end


 
jack128 ©   (2006-03-10 17:46) [1]

вообще то N = substring(gridname from i for 1);

Но у мя ругается на i , возможно, только эта функция только константы принемает...
Вообще с UDF проще было бы.. Учитывая, что есть стандартная.


 
unknown ©   (2006-03-10 17:52) [2]

У меня тоже что-то подобное сделано - процедура, возращающая позицию
недопустимого символа.
CREATE PROCEDURE CHECK_RU (
   S VARCHAR(255))
RETURNS (
   E INTEGER)
AS
DECLARE VARIABLE I INTEGER;
begin
E=0;
if (S is null or S="" ) then
   Exit;
S=RUPPER(S);
I=1;
while (I<=StrLen(s)) do
   begin
       if (StrPos(SUBSTR(:S,I,1),"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ")<1) then
           begin
               E=I;
               suspend;
               Exit;
            end
    I=I+1;
   end
suspend;
end

Подойдет?


 
Exciter ©   (2006-03-11 02:34) [3]

Да подойдёт. StrPos где взять ?


 
unknown ©   (2006-03-11 03:16) [4]


> Exciter ©

rfunc - http://rfunc.sourceforge.net/rus/index.html


 
Johnmen ©   (2006-03-11 20:49) [5]

Перебор символов в строке решается без UDF.


 
Виталий Панасенко   (2006-03-13 10:35) [6]

Для поля сделать ограничение что-то типа(я так понял длинна поля 62 символа)
create table t1(
         ...
         Field varchra(62) check ((field>="0" and field<="тут 62 9") or (field>="A" and Field<="тут 62 Z") or (Field>="a" and field<="тут 62 z") or field is null)
...
)


 
Виталий Панасенко   (2006-03-13 11:16) [7]

Малость можно проще. Вместо сравнить с 62 знаками на <=, проще сравнить с ОДНИМ СЛЕДУЮЩИМ по коду символом на <
((field>="0" and field<":")


 
unknown ©   (2006-03-13 18:43) [8]


> Johnmen ©   (11.03.06 20:49) [5]
> Перебор символов в строке решается без UDF.

Каким это образом?
Если предполагается использование substring, то не выйдет, т.к.
Neither <pos> nor <length> can be query parameters: they must evaluate to constants.
(с)Firebird_v1.5.3.ReleaseNotes.pdf page 42.
А без цикла получится некрасиво и громоздко.


 
Johnmen ©   (2006-03-13 20:43) [9]

>unknown ©   (13.03.06 18:43) [8]

С использованием substring с "контантами", с циклом.
Предлагаю подумать. :) Решение несложно...


 
unknown ©   (2006-03-13 22:00) [10]


> Johnmen ©   (13.03.06 20:43) [9]
> Предлагаю подумать.


Подумал :)


CREATE PROCEDURE COMPARE_EN (
   S VARCHAR(255))
RETURNS (
   R INTEGER)
AS
DECLARE VARIABLE X VARCHAR(37);
DECLARE VARIABLE Y CHAR(1);
begin
    R=0;
    X="ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    Y=substring( S from 1 for 1 );
    while (Y>"") do
    begin
      if (not "%"||Y||"%" like X ) then
      begin
        R=1;
        suspend;
        exit;
      end
    S=substring( S from 2 for 255 );
    Y=substring( S from 1 for 1 );
    end
 suspend;
end

Вот ведь...


 
Johnmen ©   (2006-03-13 22:19) [11]

Да, идея верная.
Кстати,  for 255 можно опустить...



Страницы: 1 вся ветка

Текущий архив: 2006.05.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.033 c
15-1145206229
Ezorcist
2006-04-16 20:50
2006.05.07
Кому не лень, помогите с историей!))


15-1144763743
Джо
2006-04-11 17:55
2006.05.07
Скрипт форума поменялся?


2-1145590311
Holod
2006-04-21 07:31
2006.05.07
хм...


2-1145386684
Инна
2006-04-18 22:58
2006.05.07
Биты


4-1139814010
Asail
2006-02-13 10:00
2006.05.07
Как получить caption окна чужой программы?