triggers في Firebird
#1
Exclamation 
السلام عليكم
لدي قاعدة بيانات  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 ; ^ 
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#2
السلام عليكم

ألقي نظرة:

http://delphi4arab.net/forum/showthread.php?tid=4775
أدبني الدهر فأراني نقص عقلي وإذا ما ازددت علما زادني علما بجهلي
[-] كل من 1 user says قال شكرا ل لؤي على المشاركة المفيدة
  • bassem_43
الرد
#3
شكرا مشرفنا لؤي
لاحظت موضوعك لكن انا استعمل firebird maestro كما قلت و الجينيرايثر موجود و معرف هكدا من قبل :
CREATE SEQUENCE GEN_CABINET_ID;
لكن دون جدوى لا ادري ما دا ينقص
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#4
السلام عليكم

اترك الحقل فارغ ولا تدخله يدوبا
في الDataset المستخدم ابحث عن الخاصية Required وغيرها الى false
لا تنسى استدعاء Refresh بعد Post لترى قيمة الحقل
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#5
شكرا استاد عبد العزيز على المتابعة
للاسف لم ينجح الامر
تاتي رسالة تخبرك بضرورة ادخال قيمة المفتاح الرئيسي
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#6
جرب ما يلي
اختر مكون الDataSet/Provider اذهب للحقول Fields وقم باضافتها كلها ADD
ثم اختر الحقل  NUM_MED وغير الخاصية Required الى
False
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
الرد
#7
بتغيير القيمة الموجودة في SQLDataSet وعند اختيار الحقل NUM_MED وتغير الخاصية Required الىFalse يمكن ادخال بيانات جديدة لكن المفتاح لا ياخد اي قيمة
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#8
إقتباس :يمكن ادخال بيانات جديدة لكن المفتاح لا ياخد اي قيمة
ياخذ قيمة لكنها لا تظهر، عليك باستدعاء Refresh بعد Post
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • bassem_43
الرد
#9
PHP كود :
اخيرا نجح الامر يا استاد عبد العزيز بعد بعض التعديلات شكرا لك

DataModule1
.dsCabinet.Post;
 DataModule1.dsCabinet.Close;
 
 DataModule1.dsCabinet.Open;
 
 DataModule1.dsCabinet.Refresh; 
و من طلب العلوم بغير كد _________ سيدركها إذا شاب الغراب
الرد
#10
السلام عليكم

إذا كنت تستعمل devart توجد خاصية Options->DefaultValues اجعلها True
Firedac فيها خاصية مشابهة
[-] كل من 1 user says قال شكرا ل Lam.Abdeldjalil على المشاركة المفيدة
  • bassem_43
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 2 ) ضيف كريم