بتاريخ: 23 فبراير 200818 سنة comment_123099 لي طلب يا جماعةانا عملت شاشة فيها tabular مكون من رقم الصنف و الكميةوبعد ان اقوم بادخال كل record"صف" اريد ان اقوم بعمل اختبار للبيانات الموجودة في ال tabularفان كان هناك نفس الصنف يضيف الكمية الجديدة الى ال record السابق ويلغي ال record الحاليملحوظة: اريد ان يحدث كل هذا على الشاشة أي قبل ان اقوم بعمل insert داخل ال databaseارجوكم احتاج الى المساعدة ضروري حداوجزاكم الله خيرا تقديم بلاغ
بتاريخ: 23 فبراير 200818 سنة comment_123102 بص ياباشا فى زر حفظتعمل cursor يقوم بعمل استعلام بشرظ اسم الصنف و اذا وجد يقوم بعمل تحديث للكميه و اذا لم يجد يقوم بعمل ادخال سجل جديد ايهاب وجدى تقديم بلاغ
بتاريخ: 23 فبراير 200818 سنة كاتب الموضوع comment_123108 مشكور على الاجابةولكن لم يكن هذا ما اقصدهساوضح ما اريده بمثال:مثلا عند الكاشير عندما يقوم بادخال بيانات الاصناف المشتراة فاذا كان هناك صنفين متماثلين فانه عندما يدخل الصنف للمرة الاولى يظهر كالتاليبافتراض ان الصنف المقصود كوده 1001)كود الصنف الكمية 1002 1 1003 1 1001 1 1004 1و عند ادخال بيانات الصنف مرة اخرى لا يظهر في سطر جديد وانما تضاف الكمية :كود الصنف الكمية 1002 1 1003 1 1001 2 1004 1مع العلم اني اريد كل هذا على الشاشة فقط اي دون ان اعمل حفظ في ال database ولهذا لن اتمكن من عمل cursorوجزاكم الله خيرا تقديم بلاغ
بتاريخ: 24 فبراير 200818 سنة comment_123127 السلام عليكم و رحمة الله و بركاتهأخى الفاضل...ممكن تجرب تعمل فى تريجر key_nxtrec declare sanf_id number; sanf_qty number; tmp_id number; begin sanf_id := :blk_nm.sanf_id; sanf_qty := :blk_nm.sanf_quantity; -- saving the values of the current record. go_block('blk_nm'); -- your block name here. first_record; loop if :blk_nm.sanf_id = sanf_id then :blk_nm.sanf_id := :tmp_id; :blk_nm.sanf_quantity := :blk_nm.sanf_quantity + sanf_qty; end if; next_record; exit when :system.last_record = 'true'; end loop; if :blk_nm.sanf_id = tmp_id then clear_record; end if; -- this will delete the repeated record. end; تقديم بلاغ
بتاريخ: 24 فبراير 200818 سنة comment_123128 أرجو ان يحقق هذا الكود ماتريده و أنا معك ان شاء الله فى أى تعديلات تودها. تقديم بلاغ
بتاريخ: 24 فبراير 200818 سنة كاتب الموضوع comment_123149 جزاك الله خيرا على الاهتمامولكن اريد بعض التوضيحات:ما هي فائدة هذا المتغير tmp_id number;وما هي وظيفة هذه الجملة :blk_nm.sanf_id := :tmp_id;اخيرا هل اقوم بوضع هذا ال trigger (key_nxtrec) في sanf_quantity تقديم بلاغ
بتاريخ: 24 فبراير 200818 سنة comment_123151 بسم الله نبدأ..عند إضافة records جديدة فإنه من البديهى اننا فى أخر سجل last_record لذا فإن هذا الكود والذى ينفذ بعد كل ريكورد يمر على البلوك من أول ريكورد الى الآخر (والذى تمت اضافته مؤخرا)..المتغير tmp_id هو الذى يحمل قيمة كود الصنف المتكرر. declare sanf_id number; sanf_qty number; tmp_id number; begin sanf_id := :blk_nm.sanf_id; sanf_qty := :blk_nm.sanf_quantity; -- saving the values of the current record. /* start searching for repeated items*/ go_block('blk_nm'); -- your block name here. first_record; loop if :blk_nm.sanf_id = sanf_id then --found a record with the same sanf_id..will return true if only the last record was repeated. :blk_nm.sanf_id := :tmp_id; --holding id of repeated sanf in a tmp variable for future use in checking&deleting repeated one. :blk_nm.sanf_quantity := :blk_nm.sanf_quantity + sanf_qty; -- updating the original item quantity end if; next_record; -- keep searching & looping exit when :system.last_record = 'true'; --exit condition end loop; /* now we are at the last record, the one we just entered & came out to be repeated above*/ if :blk_nm.sanf_id = tmp_id then -- checking if it was repeated..see the first 'if condidtion' again. clear_record; end if; -- this will delete the repeated record. end; الكود يعمل على تحديث الريكورد القديم الموجود به نفس كود الصنف الحديث بجمع الكميات مع حذف الريكورد الجديد .و يمكنك اضافته فى تريجر KEY_NXTREC على البلوك المراد العمل فيه. تقديم بلاغ
بتاريخ: 24 فبراير 200818 سنة كاتب الموضوع comment_123157 اخي الكريم جزاك الله خيرا على هذا المجهودولكن انا جربت ولم تعمل معي لهذا انا وضعت نموذج في المرفقات لترى ان كان هناك شئ خطأ ام لاوانا شاكر لك على المجهود واسف على ازعاجك sanf_qty.zip تقديم بلاغ
انضم إلى المناقشة
يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.