Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.05.07;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
15-1144748342
AlexF
2006-04-11 13:39
2006.05.07
Работа с dbs файлами


15-1145007228
Tirael
2006-04-14 13:33
2006.05.07
softice


2-1145422752
psvitov
2006-04-19 08:59
2006.05.07
Ошибка идентификатора ComboBox


1-1143633890
Sergg
2006-03-29 16:04
2006.05.07
Выделение TTreeNode по щелчку правой кнопкой


4-1139733773
Alextp
2006-02-12 11:42
2006.05.07
Контекстное меню Проводника





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский