بتاريخ: 14 فبراير 20179 سنة comment_283018 السلام عليكم ورحمة الله وبركاته كيف حالكم اساتذتنا الكبار سؤال هل نستطيع عمل Method تقوم بعمل count للارقام الموجودة في الجدول علي حقل id ثم تضيف رقم 1 من عندها وبهذه الطريق نستطيع الاستغناء عن ال sequence ومشاكلة ام لا فاذا كان ممكن كيف واين نضع الكود افيدونا بالتفاصيل افادكم الله تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283021 نعم ممكن أين نكتبها؟ تكتب بنفس المكان الذي كتبت فيه كود الـ sequence في method doDML بعد السطر if(operation == DML_INSERT) { هذا هو الكود المطلوب كتابته String sql ="select nvl(max(column_id),0)+1 from table_name"; PreparedStatement stat=null; ResultSet res= null; try { stat = getDBTransaction().createPreparedStatement(sql,1); res = stat.executeQuery(); if (res.next()) { int max = res.getInt(1); setColumnID=(new Number(max)); } } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } finally { try { stat.close(); res.close(); } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } } حيث column_id هو العمود الذي تريد أخذ قيمة التسلسل منه setColumnId هو الـ Attribute الذي سوف نسند له القيمة تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283022 لماذا هنالك مشاكل مع sequence إذا كان من ناحية كتابة الكود ..إذن تستطيع إستخدام طريقة Expression من الـ Entity Object لكن عيب هذه الطريقة إنه عند عمل تتبع أو debug لايمر بها لإنها ليست بالكود تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283024 فقط للتنويه عنوان المشاركة .. يختلف عن موضوع المشاركة وهذا لايساعد أثناء عملية البحث تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة كاتب الموضوع comment_283029 السلام عليكم ورحمة الله وبركاته الاخت ميسم جزاكي الله خير الجزاء علي اهتمامك وردك علي سؤالي ولكن انا لم اكتب كود انشاء الsequence وانما انشاته من علي dataBase عن طريق right click and create new sequence ثم بعد ذلك وقفت علي الجدول المراد عمل الsequence علية right click واخترت trigger ومنه اخترت create trigger from sequence فا معزرتا اين اضع الكود ........علماً باني مبتدا في الADF فشكرا جزيلا لسعة صدرك وتقبلي تحياتي تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283031 نكتبها في Entity Object Class ..طيب هذه كيف أصل لها ؟ حسناً : من الـ entity object الجدول الذي فيه الحقل الذي تريد عمل له sequence double click علي الجدول المطلوب سوف تفتح نافذة تتبع كما الصورة المرفقة Java (ايكونة القلم) edit option java Generate Entity Object Class تابع مع الصورة بعدما تضغط ok تفتح نافذة لكتابة الكود أكتبها داخل في method doDML وكما بينت في أعلاه بعد السطر المطلوب تم تعديل 14 فبراير 20179 سنة بواسطة ميسم الكرام تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة كاتب الموضوع comment_283033 اختي الفاضله ...والله انا محرج منك كثيراً ...فسامحيني انا عملت كل شيء بالاعلي الا اني لم اجد method doDML وقد بحثت عنها داخل ال Package فاين اجدها اعزك الله تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283035 جيد الآن تكونت لدينا class إتبع كما في الصورة ادنا واضف Data Manipulation method بعدها قم بالضغط على ok قم بعدها تابع الصورة التالية تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة كاتب الموضوع comment_283036 السلام عليكم ورحمة الله وبركاته اختنا الفاضلة اعزك الل حسناً ظهر ال method doDML fi`h hga;g protected void doDML(int operation, TransactionEvent e) { super.doDML(operation, e); } ولكن ليس فيها السطر if(operation == DML_INSERT) حتي اكتب بعده فهل انشات ال Method خطأ بس انا اتبعت الخطوات بالظبط فاين الخطأ شكرا لكي تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283038 ممتاز لقد أنشأت الـ method صحيح لكن أنا ذكرت ما ذكرته في أول تعليق لي لإني توقعت أنه حضرتك أنشأت الـ sequence من خلال الكود وهذا السطر يكون موجود لذلك ذكرت أنه تكتب بعده لكن بما أنه حضرتك لم تكتب كود للـ sequence لذلك الكود يكتب قبل سطر super.doDML(operation, e); وهذا الكود بالكامل كيف يكون مع الـ method doDML protected void doDML(int operation, TransactionEvent e) { if(operation == DML_INSERT) { String sql ="select nvl(max(column_id),0)+1 from table_name"; PreparedStatement stat=null; ResultSet res= null; try { stat = getDBTransaction().createPreparedStatement(sql,1); res = stat.executeQuery(); if (res.next()) { int max = res.getInt(1); setColumnID=(new Number(max)); } } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } finally { try { stat.close(); res.close(); } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } } super.doDML(operation, e); } } تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة كاتب الموضوع comment_283051 هذا هو الكود بعد وضعة داخل ال Method protected void doDML(int operation, TransactionEvent e) { if(operation == DML_INSERT) { String sql ="select nvl(max(id),0)+1 from TEST_SEQUENCE"; PreparedStatement stat=null; ResultSet res= null; try { stat = getDBTransaction().createPreparedStatement(sql,1); res = stat.executeQuery(); if (res.next()) { int max = res.getInt(1); setColumnID=(new Number(max)); } } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } finally { try { stat.close(); res.close(); } catch (Exception e1) { // TODO: Add catch code e1.printStackTrace(); } } super.doDML(operation, e); } } وكن ظهر خط احمر تحت السطر الاتي: setColumnID=(new Number(max)); ورايت الرسالة : type or variable 'setColumnID' not found تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283052 فقط ركز معي قليلاً ..أنا ماذا كتبت في أعلاه بأول تعليق لي قلت: setColumnId هو الـ Attribute الذي سوف نسند له القيمة ..بمعنى حسب الإسم الذي لديك إستبدله تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283053 كما إستبدلت جملة الـ sql بما لديك من جدول ..إستبدل setColumnId بما هو لديك ....وإن شاء الله تحل المشكلة لديك تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة كاتب الموضوع comment_283060 هل المقصود setColumnId اسم الحقل المراد عمل علية ال sequence اي ان الحقل المراد عمل علية المسلسل هو ID : setColumnID=(new Number(max)); يكون هكذا : id =(new Number (max)); أم اني قد ضللت الطريق ليكي مني اختي الفاضلة اعتذاري الشديد علي ارهاقي لكي ...سامحيني تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283061 نعم هو الحقل المراد أن نسند له قيمة الـ sequence لكن هنا أخذ التسمية الصحيحة من attribute للـ entity object أو view object تقديم بلاغ
بتاريخ: 14 فبراير 20179 سنة comment_283063 كما في الصورة قم بأخذ التسمية الصحيحة وأكيد نسبقها بكلمة set بالكود تقديم بلاغ
بتاريخ: 15 فبراير 20179 سنة comment_283071 لكن دائماً أنصح في مثل هذه الأسئلة أن تتم دراسة ADF بشكل صحيح ثم السؤال لكن بهذه الطريقة فلن تتعلم بشكل صحيح تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.