الانتقال إلى المحتوى
View in the app

A better way to browse. Learn more.

مجموعة مستخدمي أوراكل العربية

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Create Methed

Featured Replies

بتاريخ:

السلام عليكم ورحمة الله وبركاته 

كيف حالكم اساتذتنا الكبار

سؤال

هل نستطيع عمل Method  تقوم بعمل count للارقام الموجودة في الجدول علي حقل id ثم تضيف رقم 1 من عندها وبهذه الطريق نستطيع الاستغناء عن ال sequence  ومشاكلة  ام لا 

 

فاذا كان ممكن كيف واين نضع الكود 

 

افيدونا بالتفاصيل افادكم الله

بتاريخ:

نعم ممكن

أين نكتبها؟ تكتب بنفس المكان الذي كتبت فيه كود الـ 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 الذي سوف نسند له القيمة  

 

بتاريخ:

لماذا هنالك مشاكل مع sequence  إذا كان من ناحية كتابة الكود ..إذن تستطيع إستخدام طريقة Expression من الـ Entity Object 

لكن عيب هذه الطريقة إنه عند عمل تتبع أو debug  لايمر بها لإنها ليست بالكود 

بتاريخ:

فقط للتنويه عنوان المشاركة .. يختلف عن موضوع المشاركة وهذا لايساعد أثناء عملية البحث

بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله وبركاته

الاخت ميسم جزاكي الله خير الجزاء علي اهتمامك وردك علي سؤالي

 

ولكن انا لم اكتب كود انشاء الsequence وانما انشاته من علي  dataBase عن طريق right click and create new sequence  ثم بعد ذلك وقفت علي الجدول المراد عمل الsequence علية right click واخترت trigger ومنه اخترت create trigger from sequence

فا معزرتا اين اضع الكود ........علماً باني مبتدا في الADF فشكرا جزيلا لسعة صدرك وتقبلي تحياتي

بتاريخ:

نكتبها في Entity Object Class ..طيب هذه كيف أصل لها ؟ حسناً : من الـ entity object الجدول الذي فيه الحقل الذي تريد عمل له sequence

double click علي الجدول المطلوب سوف تفتح نافذة تتبع كما الصورة المرفقة 

Java

(ايكونة القلم) edit option java

 Generate Entity Object Class

تابع مع الصورة

 

post-41781-0-48239900-1487087328_thumb.png

 

بعدما تضغط ok  تفتح نافذة لكتابة الكود أكتبها داخل في method doDML 

وكما بينت في أعلاه بعد السطر المطلوب 

تم تعديل بواسطة ميسم الكرام

بتاريخ:

الخطوة التي لم تستطع الوصول لها أذكرها لنا

بتاريخ:
  • كاتب الموضوع

اختي الفاضله ...والله انا محرج منك كثيراً  ...فسامحيني

 

انا عملت كل شيء بالاعلي الا اني لم اجد method doDML  وقد بحثت عنها داخل ال Package  فاين اجدها اعزك الله

بتاريخ:

جيد الآن تكونت لدينا class إتبع كما في الصورة ادنا واضف Data Manipulation method بعدها قم بالضغط على ok قم 

post-41781-0-60431100-1487089470_thumb.png

 

 

بعدها تابع الصورة التالية 

post-41781-0-30912100-1487089566_thumb.png

 

بتاريخ:
  • كاتب الموضوع

السلام عليكم ورحمة الله وبركاته

اختنا الفاضلة اعزك الل

حسناً ظهر ال method doDML fi`h hga;g

 

    protected void doDML(int operation, TransactionEvent e) {
        super.doDML(operation, e);
        
    }
ولكن ليس فيها السطر
if(operation == DML_INSERT)
 
حتي اكتب بعده فهل انشات ال Method  خطأ بس انا اتبعت الخطوات بالظبط فاين الخطأ
شكرا لكي 
بتاريخ:

ممتاز لقد أنشأت الـ 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);
        
    } 

        }
بتاريخ:
  • كاتب الموضوع

هذا هو الكود بعد وضعة داخل ال 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 
بتاريخ:

فقط ركز معي قليلاً ..أنا ماذا كتبت في أعلاه بأول تعليق لي قلت:

setColumnId  هو الـ Attribute الذي سوف نسند له القيمة  ..بمعنى حسب الإسم الذي لديك إستبدله 

بتاريخ:

كما إستبدلت جملة الـ sql  بما لديك من جدول ..إستبدل setColumnId بما هو لديك ....وإن شاء الله تحل المشكلة لديك

بتاريخ:
  • كاتب الموضوع

هل المقصود   setColumnId  اسم الحقل المراد عمل علية ال sequence  اي ان الحقل المراد عمل علية المسلسل هو ID :

 

 setColumnID=(new Number(max));

يكون هكذا :

id =(new Number (max));

أم اني قد ضللت الطريق

ليكي مني اختي الفاضلة اعتذاري الشديد علي ارهاقي لكي ...سامحيني

بتاريخ:

نعم هو الحقل المراد أن نسند له قيمة الـ sequence 

لكن هنا أخذ التسمية الصحيحة من attribute للـ entity object أو view object  

بتاريخ:

كما في الصورة قم بأخذ التسمية الصحيحة وأكيد نسبقها بكلمة set بالكود

post-41781-0-99687200-1487096569_thumb.png

بتاريخ:

 

 setD=(new Number(max));

 

بتاريخ:

لكن دائماً أنصح في مثل هذه الأسئلة أن تتم دراسة ADF بشكل صحيح ثم السؤال

لكن بهذه الطريقة فلن تتعلم بشكل صحيح

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية

Account

Navigation

البحث

إعداد إشعارات المتصفح الفورية

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.