بتاريخ: 30 مايو 200817 سنة comment_130092 يوجد بعض الاشياء التى لم اعرف سببها عند عمل استعلام شجرى على TreeItem فى الفورم كالتالى :- DECLARE htree ITEM; v_ignore NUMBER; rg_emps RECORDGROUP; BEGIN htree := Find_Item('block1.tr'); rg_emps := Create_Group_From_Query('rg_emps', 'select 1,level ,ename,null,empno from emp start with mgr is null connect by prior empno = mgr '); v_ignore := Populate_Group(rg_emps); Ftree.Set_Tree_Property(htree, Ftree.RECORD_GROUP, rg_emps); END; السؤال هنا لماذا وضعنا رقم واحد وكلمة level وكلمة null فى الاستعلام اريد ان اعرف السبب ولماذا؟؟؟ اتمنى تكونوا فهمتوا سؤالى يا اخوة. تقديم بلاغ
بتاريخ: 31 مايو 200817 سنة comment_130164 لأ في رد من أحد الإخوه بالنسبه لرقم واحد فهو يستخدم لتحديد حالة الnodes داخل الشجره. فإذا كتبت (1) فانك عندما تشغل الفورم ستجد أن كل ال nodes مفتوحين (expanded nodes) أما إذا كتبت (1-) ستجد أن كل ال nodes مقفولين (collapsed nodes) ، ولو كتبت (0) سوف تلغي الnodes أساساً (leaf nodes) .بالنسبه لكلمة null وهي لتحديد حالة الأيكونه الخاصه بكل node فيمكنك مثلاً إستبدالها بهذا التعبير 'delrec' وستجد أن كل node أخذت شكل أيكونة حذف سجل.أهم نقطه. بالنسبه لكلمة level وهي لتحديد مستوى التدرج داخل الشجره لكل واحد. وهو يبدأ من أعلى واحد (مثلاً المدير العام) ويتدرج بطريقه هرميهوإذا تم إستخدام كلمة level فإنه لابد من أنك ترفق جملة connect by داخل جملة الإستعلام، لأنها هي المسئوله عن تحديد ال logic الذي سوف يبنى عليه ال level لكل واحد في الشجره. فتخيل معي الوضع الإتي لفهم جملة connect by . لو أخذنا جدول employees كمثال سنجد أن أعلى مدير هو King هذا لأنه ليس هناك مديرين أعلى منه. وهو أيضاً موظف وبذلك سيأخذ level رقم (1). ثم نأتي للموظف Kochhar سنجد أنه في الترتيب الهرمي هو الثاني لأن المدير المباشر له هو King وبذلك يأخذ level رقم (2). وكما وضحت أن الذي حدد ظهور ال level بهذا الشكل هي جملة ال connect by.وماذا تعني بالظبط جملة ال connect by؟ . لو أخذنا جملة ال connect by كالآتي:connect by manager_id= prior employee_idكأنها تقول لل oracle server الآتي: لكل سجل من السجلات أنظر لكل موظف (employee_id) ثم إبحث عن رقم ال level للمدير المباشر له . وبعد ذلك إجعل ال level لكل موظف كالآتي (ال level للموظف=ال level لمديره المباشر +1).لذلك لا يمكن إستخدام ال level بدون جملة ال connect by. وال level هو pseudocolumn مثل ال sysdate ولا يمكن إستخدامه في ال .order by clause وللعلم يستخدم ال level لتحديد ترتيب ال nodes داخل الشجره. فمثلاً ال level رقم واحد يبين أن ال node ستكون أول واحده في الترتيب. ويأتي بعدها ال nodes حسب ترتيبهم من خلال ال level.وخد جملة الإستعلام هذه لتفيدك في الفهم الأعمق لجملة ال tree. أنا كتبتها ليتم تنفيذها من خلال ال sqlplus وليس من خلال الفورمز هذا لأن جملة الشجره تختلف في الفورمز عن الSQL-Plus أكتب هذا قبل كتابة الجمله: set linesize 1000 column last_name format a10 وجملة الإستعلام هي كالآتي: select a.department_id,a.manager_id,(select last_name from employees where employee_id=a.manager_id) "Manager name",lpad('^',(level),'^')||a.last_name last_name,level,a.salary from employees a start with manager_id is null connect by prior employee_id= manager_id order by manager_id يمكنك التغيير في الجمله لتعمق فهمك للشجره.وأي توضيح أرسله. تقديم بلاغ
بتاريخ: 31 مايو 200817 سنة comment_130174 الأخ / أحمد يحيىشكرا لك على اسلوب وطريقة الشرح بالفعل .. شرح متميز ... من ... عضو متميز ...واشكرك ايضا على تواجدك المستمر ... والرد السريع على الاخوه الاعضاء جزاك الله خيرا تقديم بلاغ
بتاريخ: 31 مايو 200817 سنة comment_130175 الأخ/ أمجد ولك بمثل ما دعوت لي إن شاء الله. وأشكرك على تعقيبك المتميز لي. وأنا بتمنى الإستفاده الدائمه لي ولباقي أعضاء هذا المنتدى المحترم. هذا المنتدى أفادني لذلك لابد من رد الجميل. ويكفي أن يكون لهذا المنتدى مشرفين متفاعلين بمعنى الكلمه.............. تقديم بلاغ
بتاريخ: 31 مايو 200817 سنة كاتب الموضوع comment_130184 ولكن اخى احمد يحى الاحظ لابد من اختيار عمود ال empno مباشرة بعد كلمة null فى المثال الاول الذى ارفقته اعلى و واذا تم حذف العمود empno يحدث خطا و فانا لا اعرف لماذا ذلك؟؟؟انا متاسف جدا انى بتعبكبارك الله فيك تقديم بلاغ
بتاريخ: 31 مايو 200817 سنة comment_130185 ولا أسف ولا حاجه خد راحتك. طبيعي جداً أنه لو تم حذف عمود ال empno لا تكون الجمله صحيحه. لا تنسى أنه يتم إستخدام هذا العمود في جملة ال connect by فإذا حذفتها إزاي هاتشتغل ال connect by ؟! لو أنك نظرت إلى ناتج الشجره ستجد أن ناتج الشجره هو أسماء الموظفين وليس أرقامهم. وتم وضع عمود ال empno فقط ليستخدم في جملة ال connect by والتي يعتمد عليها عمود ال level والذي هو الأساس في تكوين الشجره. كذلك فإن الناتج هو أسماء الموظفين ولكن الفورم يستخدم أرقام الموظفين أثناء ال RUNTIME حتى تتم عمل الشجره. ولابد من وضع هذا العمود بعد ال node_icon أو بمعنى أصح بعد كلمة null في مثالك ذلك لأن الفورمز سوف تتجاهله في الناتج. أما إذا وضعته في مكان آخر فالأمر سوف يختلف وبذلك لا تتم الشجره كما ينبغي لمثالك. تقديم بلاغ
بتاريخ: 2 ديسمبر 200817 سنة comment_144228 السلام عليكمعفوا اخوانى احببت ان اوضح نقطة ان عمود empnoهو قيمة النود داخل الشجرة فلكل نود قيمة داخل الشجرة ويجب ان تكون من النوع حرفىchar تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.