مطلوب trigger وظيفته أن يقوم بألتشيك على text item بحيث أن المستخدم لا يدخل رقم ولا سيشل كركتر ولا ـــ ولا مسافة مرتين متتاليتين وكم مني جزي الشكر والعرفان
مطلو ب trigger بأسرع وقت
السلام عليكم
هذه الوظيفه يمكن تفيدك
FUNCTION NAME_FLTR(NAM VARCHAR2) RETURN VARCHAR2 IS
BEGIN
return(TRANSLATE(NAM,'A،/؛×÷,.؟<>ّـ1234567890-=+_)(*&^%$#@!~/?><}{;:"','A'));
END;
والتي تناديها من داخل الاجراء التالي
PROCEDURE chk_name(reqf varchar2 := 'R') IS
l1 number(3);
begin
l1 := length(:system.cursor_value);
copy(name_fltr(:system.cursor_value),:system.trigger_item);
if length(:system.cursor_value) <> l1 then
show_message('أعد تصحيح الاسم');
raise form_trigger_failure;
end if;
if reqf = 'R' then
if :system.cursor_value is null then
show_message('يجب ادخال الاسم');
raise form_trigger_failure;
end if;
end if;
end;
)طبعا الوظيفه والاجراء يتم انشائهم في ال program units (
والاجراء ينادى في ال
WHEN-VALIDATE-ITEM
الاخ ابوعمر عبدالله
اشكر لك تجاوبك السريع
لكن الذي اقصده التشيك على ادخال المسافة مرتين متتاليتين والتشيك على (المده) التي فوق حرف التاء . واقصد بالمدة ان ا لشخص يمد في الكلمة مثل ابــــــــوعمر
ارجو ان اكون قد وضحت المشكلة . وشكراً لك
السلام عليكم
ماسبق يعالج مشاكل الادخال والتي تتضمن الارقام والحروف الخاصة و (المده) التي فوق حرف التاء اما بالنسبة للمسافة مرتين متتاليتين هذه الوظيفه ئؤدي الغرض ولو انها شغل عجلة ولكن جربتها شغاله 100%
FUNCTION rep_space (NAM VARCHAR2) RETURN VARCHAR2 IS
v number;
T NUMBER;
MM NUMBER;
NEWNAM VARCHAR2(40);
BEGIN
MM :=LENGTH(NAM);
T := 1;
FOR v in 1 .. MM
LOOP
IF SUBSTR(NAM,V,1) = ' ' AND T = 0 THEN
NEWNAM := NEWNAM||SUBSTR(NAM,V,1);
T := 1;
ELSIF SUBSTR(NAM,V,1) <> ' ' THEN
NEWNAM := NEWNAM||SUBSTR(NAM,V,1);
T := 0;
END IF;
end loop;
return(NEWNAM);
END;
وخذ هذه الوظيفه بالمره لمعالجة ايضا الادخال بحيث ان
(أ) او ( آ) يصير (ا)
(ة) تصير (ه)
(ي) في اخر الكلمة تصير (ى)
FUNCTION replac_nam (NAM VARCHAR2) RETURN VARCHAR2 IS
mm number;
CH CHAR ;
CHNAM VARCHAR2(20);
BEGIN
MM :=LENGTH(NAM);
CH := SUBSTR(NAM,MM,1);
IF CH = 'ي' THEN
CHNAM := SUBSTR(NAM,1,MM-1)||'ى';
return(TRANSLATE(CHNAM,'أةآ','اها'));
ELSE
return(TRANSLATE(NAM,'أةآ','اها'));
END IF;
END;
بسم الله الرحمن الرحيم
الأخ ابوعمر عبدالله
جزاك الله خير وتراني تعبتك معي
الطريقة فعلاً ممتازة ولكن واجهت مشكلة وهي :
عند ادخال اسم مثل : ال عمران
تصبح العمران
امل ان اجد حلاً لها
وشكراً على تعاونك السريع
رن تايم
اتوقع ان استخدامك للترقر التالي وهو WHEN-VALIDATE-ITEM
على نفس الحقل الذي تريد عمل تشييك عليه وكتابة الكود المراد داخل هذا الترقر هو الحل الامثل
السلام عليكم
الوظيفة rep_space والتي سبق وضعها في الرد السابق تعطي المطلوب وانا جربتها بحيث مازاد عن مسافة واحدة تشال .
تاكد انك نقلت الوظيفه ولم تغير قيمة المتغير T لان هو الذي يتحكم بعدد المسافات .
اذا كان فيه مشكلة ارسلي بريدك وانا ارسلك نموذج عباره عن مثال لطلبك
السلام عليكم
الأخ ابو عمر
اشكرك على تجوبك معي
وأرجوا ارسل النموذج على البريد التالي:
run25sa@yahoo.com
هذا الموضوع مغلق.