delphi4arab منتديات دلفي للعرب

نسخة كاملة : triggers في Firebird
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم
لدي قاعدة بيانات  Firebird متصلة ببرنامجي باستخدام مكونات Dbexpress ولدي جدول في قاعدة البيانات اسمه CABINET وفيه  مفتاح رئيسيNUM_MED من نوع INTEGER حاولت جعله يزداد تلقائيا عن طريق trigger فيMaestro  Firebird   لكن عند تنفيد البرنامج لا يزداد حقل المفتاح تلقائيا وتظهر رسالة الخطا التالية 
impossible focaliser une fenetre désactivée ou invisible
ولا يمكن ادخال معلومات بعد دلك  الا ان ادخلت رقم الحقل NUM_MED   يدويا 
trigger مكتوب هكدا :
PHP كود :
BEGIN
  IF 
(NEW.NUM_MED IS NULL) THEN
  NEW
.NUM_MED = GEN_ID(GEN_CABINET_ID,1);
END 
فما الحل برايكم ؟؟

هدا هو كود trigger  كاملا :
PHP كود :
--Trigger: CABINET.CABINET_BI

--DROP TRIGGER CABINET_BI;

SET TERM ^ ;

CREATE TRIGGER CABINET_BI FOR CABINET
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF 
(NEW.NUM_MED IS NULL) THEN
  NEW
.NUM_MED = GEN_ID(GEN_CABINET_ID,1);
END^

SET TERM ; ^ 
السلام عليكم

ألقي نظرة:

http://delphi4arab.net/forum/showthread.php?tid=4775
شكرا مشرفنا لؤي
لاحظت موضوعك لكن انا استعمل firebird maestro كما قلت و الجينيرايثر موجود و معرف هكدا من قبل :
CREATE SEQUENCE GEN_CABINET_ID;
لكن دون جدوى لا ادري ما دا ينقص
السلام عليكم

اترك الحقل فارغ ولا تدخله يدوبا
في الDataset المستخدم ابحث عن الخاصية Required وغيرها الى false
لا تنسى استدعاء Refresh بعد Post لترى قيمة الحقل
شكرا استاد عبد العزيز على المتابعة
للاسف لم ينجح الامر
تاتي رسالة تخبرك بضرورة ادخال قيمة المفتاح الرئيسي
جرب ما يلي
اختر مكون الDataSet/Provider اذهب للحقول Fields وقم باضافتها كلها ADD
ثم اختر الحقل  NUM_MED وغير الخاصية Required الى
False
بتغيير القيمة الموجودة في SQLDataSet وعند اختيار الحقل NUM_MED وتغير الخاصية Required الىFalse يمكن ادخال بيانات جديدة لكن المفتاح لا ياخد اي قيمة
إقتباس :يمكن ادخال بيانات جديدة لكن المفتاح لا ياخد اي قيمة
ياخذ قيمة لكنها لا تظهر، عليك باستدعاء Refresh بعد Post
PHP كود :
اخيرا نجح الامر يا استاد عبد العزيز بعد بعض التعديلات شكرا لك

DataModule1
.dsCabinet.Post;
 DataModule1.dsCabinet.Close;
 
 DataModule1.dsCabinet.Open;
 
 DataModule1.dsCabinet.Refresh; 
السلام عليكم

إذا كنت تستعمل devart توجد خاصية Options->DefaultValues اجعلها True
Firedac فيها خاصية مشابهة
الصفحات : 1 2