الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الكمية تعطى صفر

بدأه أسامة عبد السلام المسيدى في 13 أكتوبر 2013 · 2 رد · 432 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الاخوه الافاضل

 

لدى برنامج يعمل فى سوبر ماركت له حوالى خمس سنوات وقمت بتحميل نفس البرنامج فى سوبر ماركت آخر ومن حوالى اسبوع تقريبا ظهرت مشكله عند مناداة بعض الاصناف للبيع فى شاشة البيع يعطى الرصيد لها صفرا علما بوجود رصيد لهذا الصنف وهذا الجدول اسميه products وهذا الجدول غير مرتبط بأى جداول أخرى و هو يتكون من كود الصنف - اسم الصنف - الرصيد - السعر - رصيد حد اعادة الطلب وها الجدول أقوم بفتحه و التعديل فيه فى حالتى البيع و الشراء اى عند شراء بضاعة للسوبر ماركت يقوم بزيادة الكمية و عند البيع يقوم بطرح الكمية المباعة اى ان الكمية تتأثر بالزيادة و الخصم لكن وجدت ان بعض الاصناف تعطى رصيد صفر علما بوجود رصيد المعالجه التى قمت بعملها هى اننى لم أقم بقفل قاعدة البيانات عند فتح الجدول اى اننى أقرأ منه دون قفل الاتصال بقاعدة البيانات هل هذا المشكله هى التى سببت ان الكمية فى الجدول تفقد قيمتها و تعطى الكمية defult و هى صفر ام ان هناك مشكلة أخرى

 

تقبلوا التحية

#2

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

 

هذا الخطأ هو ما نطلق عليه الخطأ المنطقى Logical error وهو أبشع أنواع الأخطاء لأن البرنامج لا يتوقف عن العمل إنما يستمر فى العمل ولكن يسجل بيانات خاطئة، لذلك يجب عليك تجربة كل عمليات البيع والشراء ومراقبة الأرصدة بعد كل عملية حتى تستطيع معرفة أين يكمن الخطأ، ويمكنك الاستعانة بجدول إضافى يمكن حذفه بعد ذلك ولكنه يستخدم فى تسجيل بعدض القيم أثناء التجربة إذا أردت

المشكلة فى مثل هذه الأخطاء أنها لا تكتشف إلا بالتجربة

7

أدعو الله أن يجعل أعمالنا خالصة لوجهه الكريم --- وأن ينفعنا بما علمنا

Dr Sayed Tohamy

Programming Instructor

مدرب برمجة

---------------

EmaSoft2000

-------------------

#3

كل عام و انتم بخير بمناسبة حلول عيد الاضحى المبارك اعاده الله عليكم و على المسلمين جميعا بالخير و اليمن و البركات

الحقيقة اننى قمت بالاتصال بالاستاذ / حازم وهو احد المؤسسين لمنتدى الفيجوال بيسك دوت نت فى ليلة العيد هذا المنتدى الذى تعلمنا منه جميعا فى فترة من اجمل الفترات التى مرت علينا حيث كان همنا الاول و الاخير هو ان نصل للمعلومة لنتعلم هذه اللغة و الرجل لم يبخل عليا بالمعلومة  وماتردد فى تقديمها لى و انه حدثت معه هذه المشكله من حوالى خمس سنوات فنصحنى بعمل transaction لكل الاجراءات المخزنية فى قاعدة البيانات التى تستخدم جملة insert & update فنصحنى بعمل بحث عن SQL Transaction لاحصل على كود مناسب لهذا الاجراء و فعلا وجدت الكود و قمت باضافته الى الاجراءات المخزنية الموجودة فى قاعدة البيانات عندى و اختفت المشكله

create procedure [usp_my_procedure_name]
as
begin
    set nocount on;
    declare @trancount int;
    set @trancount = @@trancount;
    begin try
        if @trancount = 0
            begin transaction
        else
            save transaction usp_my_procedure_name;

        -- Do the actual work here

lbexit:
        if @trancount = 0   
            commit;
    end try
    begin catch
        declare @error int, @message varchar(4000), @xstate int;
        select @error = ERROR_NUMBER(), @message = ERROR_MESSAGE(), @xstate = XACT_STATE();
        if @xstate = -1
            rollback;
        if @xstate = 1 and @trancount = 0
            rollback
        if @xstate = 1 and @trancount > 0
            rollback transaction usp_my_procedure_name;

        raiserror ('usp_my_procedure_name: %d: %s', 16, 1, @error, @message) ;
        return;
    end catch   
end

والفكرة فى انه لابد من عمل catch للحصول على القيمة التى يتم فيها عمل اضافة أو تعديل واذا لم يحدث يجب عمل rollBack حتى يستطيع الاجراء المخزنى تنفيذ اوامره بنجاح 

تحية للاستاذ / حازم و كل القائمين على هذا المنتدى الرائع و كل عام و انتم بخير

مواضيع مشابهة