تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] مشكلة اتعبتني
#1
السلام  عليكم  الاخوة  الاعزاء  انا  كملت  كلشي  تمام  وعماليات  الضرب  كلها صحيحة  والاستعلام  وكل شي  تمام لكن  عند  الضغط  على  عملية  اضافة  المنتجات  بتطلع  عندي هذه رسالة  الخطا  

  اولا  الكود  المستخدم  



كود :
Dim strinsert As String = "Insert Into invoice (SALECODE,type_inv , cu_id , phon_cus , loc_cus , user_post , discount , totle_c , total_price , date_sel)values( @SALECODE, @type_inv ,  @cu_id ,  @phon_cus ,  @loc_cus ,  @user_post ,  @discount ,  @totle_c ,  @total_price ,  @date_sel)"

        cmd = New MySqlCommand(strinsert, con)
        Dim ID_order As Integer
        Dim dd, ddd As Decimal
        cmd.Parameters.Add(New MySqlParameter("@SALECODE", MySqlDbType.Int32)).Value = ID_order
        cmd.Parameters.Add(New MySqlParameter("@type_inv", MySqlDbType.VarChar, 200)).Value = com_type.Text
        cmd.Parameters.Add(New MySqlParameter("@cu_id", MySqlDbType.VarChar, 200)).Value = text_cus.Text
        cmd.Parameters.Add(New MySqlParameter("@phon_cus", MySqlDbType.VarChar, 200)).Value = text_ph_cus.Text
        cmd.Parameters.Add(New MySqlParameter("@loc_cus", MySqlDbType.VarChar, 200)).Value = text_loc_cus.Text
        cmd.Parameters.Add(New MySqlParameter("@user_post", MySqlDbType.VarChar, 200)).Value = txt_user.Text
        cmd.Parameters.Add(New MySqlParameter("@discount", MySqlDbType.VarChar, 200)).Value = txt_dic.Text
        cmd.Parameters.Add(New MySqlParameter("@totle_c", MySqlDbType.Double)).Value = ddd
        cmd.Parameters.Add(New MySqlParameter("@total_price", MySqlDbType.Decimal)).Value = dd
        cmd.Parameters.Add(New MySqlParameter("@date_sel", MySqlDbType.Date)).Value = date_pay.Value.Date

        con.Open()

        cmd.ExecuteNonQuery()

        cmd = New MySqlCommand("select max(id) from invoice", con)
        Dim dr As MySqlDataReader = cmd.ExecuteReader
        dr.Read()

        Dim id_orders As Integer = dr(0)




        Dim id_pro As Integer
        Dim code_itt, code_colorr, txt_name_it As String
        Dim price_one_it, totle_price2 As Decimal
        Dim num_itt, num_crt As Integer




        strinsert = "insert into invoice_dt (SALECODE,code_it,code_color,name_it,num_cr,qty,price_tak,total)values(@SALECODE,@code_it,@code_color,@name_it,@num_cr,@qty,@price_tak,@total)"

        For i As Integer = 0 To DataGridView1.RowCount - 1

            id_pro = DataGridView1.Rows(i).Cells(0).Value
            code_itt = DataGridView1.Rows(i).Cells(1).Value
            code_colorr = DataGridView1.Rows(i).Cells(2).Value
            txt_name_it = DataGridView1.Rows(i).Cells(3).Value
            num_itt = DataGridView1.Rows(i).Cells(4).Value
            num_crt = DataGridView1.Rows(i).Cells(5).Value
            price_one_it = DataGridView1.Rows(i).Cells(6).Value
            totle_price2 = DataGridView1.Rows(i).Cells(7).Value

            cmd.Parameters.Add(New MySqlParameter("@SALECODE", MySqlDbType.Int32)).Value = id_pro
            cmd.Parameters.Add(New MySqlParameter("@code_it", MySqlDbType.VarChar, 200)).Value = code_itt
            cmd.Parameters.Add(New MySqlParameter("@code_color", MySqlDbType.VarChar, 200)).Value = code_colorr
            cmd.Parameters.Add(New MySqlParameter("@name_it", MySqlDbType.VarChar, 200)).Value = txt_name_it
            cmd.Parameters.Add(New MySqlParameter("@num_cr", MySqlDbType.Float)).Value = num_crt
            cmd.Parameters.Add(New MySqlParameter("@qty", MySqlDbType.Float)).Value = num_itt
            cmd.Parameters.Add(New MySqlParameter("@price_tak", MySqlDbType.Decimal)).Value = price_one_it
            cmd.Parameters.Add(New MySqlParameter("@total", MySqlDbType.Decimal)).Value = totle_price2

            cmd.ExecuteNonQuery()

        Next
        dr.Close()
        con.Open()

        MsgBox("تم اضافة الفاتورة بنجاح", MsgBoxStyle.Information, "نجاح العملية")


رسالة  الخطا التي  تظهر  هي  كالاتي  


كود :
Additional information: There is already an open DataReader associated with this Connection which must be closed first.


علما  انا فاتح  الاتصال الريدير  وغالقه  ايضا  لكن  لا  اعرف  ايش  هي  المشكلة  اخوتي  اتمنى  من  الي  عندة  خبرة  يساعدنا  وفقكم  الله
((  لا أحد يمكن له  ان يحدد متى يموت ولكن هو  من يقدر  ان يحدد  كيف يعيش بعد الموت فالحياة والمماة بيد الله  لكن  حياتك بعد الموت بيدك  فلا  تندم  على شيء فاتك في الدنيا لربما يرزقك  الله  خير  منه في  الاخرة  او لربما  دفع الله  عنك به  شيأ  اعظم  ...  تلك  هي  مشيئة الله  عز  وجل )) 
الرد }}}
تم الشكر بواسطة:
#2
السلام عليكم اخي الكريم
اخي بعد قراءة البيانات بوساطة DataReder
dr.Read()
Dr.close()
يتوجب عليك اغلاقه الرسالة تقول ان داتا ريدر مفتوح يجب اغلاقه انظر الى كودك وابحث عن نهاية القراءة 

انت وضعت الاغلاق في نهاية الاكواد وكودك اتحقق منه بعد
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات







الرد }}}
تم الشكر بواسطة: فراس الغزي , asemshahen5
#3
(27-07-19, 01:29 PM)ابراهيم ايبو كتب :
السلام عليكم اخي الكريم
اخي بعد قراءة البيانات بوساطة DataReder
dr.Read()
Dr.close()
يتوجب عليك اغلاقه الرسالة تقول ان داتا ريدر مفتوح يجب اغلاقه انظر الى كودك وابحث عن نهاية القراءة 

انت وضعت الاغلاق في نهاية الاكواد وكودك اتحقق منه بعد

اخي  يمكنك  مشاهدة الكود فانا قمت باغلاق  الريدر  ولكن نفس  الخطا انت الان يمكنك مراجعة  الكود في الاخر  انا غالق  الريدر  وغالق  الاتصال بقاعدة  البيانات
ةمن ثم رسالة  تأكيد  الحفظ
((  لا أحد يمكن له  ان يحدد متى يموت ولكن هو  من يقدر  ان يحدد  كيف يعيش بعد الموت فالحياة والمماة بيد الله  لكن  حياتك بعد الموت بيدك  فلا  تندم  على شيء فاتك في الدنيا لربما يرزقك  الله  خير  منه في  الاخرة  او لربما  دفع الله  عنك به  شيأ  اعظم  ...  تلك  هي  مشيئة الله  عز  وجل )) 
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , viv , asemshahen5
#4
طلما انها مشكلة متعبتك .... ارفع قاعدة البيانات مع الفوم الخاص بهذا الخطأ لكي يحاول الجميع مساعدتك
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , فراس الغزي , viv , asemshahen5
#5
انا مع ابراهيم فيما قال
الرد }}}
#6
شي طبيعي اتبعتني من قبل في فكرة منتدى وصفحة زوار   وفكرة مشاركة فيديو وبالاخير وبعد التدقيق و التامل تم حل كل المشكلات .... إياك ان تقول خطا لا مبرر له, كل شيء له قانون محدد تسير فيه حتى اي بيئة برمجة لن تكون عشوائية بل لها قوانين تضبطها.
اغلب العوائق التي تعوق الاخوة من المساعدة اضافة الى ظروفهم الخاصة هي اختلاف قاعدة البيانات فمنهم يستخدم أكسس ومنهم يستخدم sql server ومنهم يستخدم mysql  وهكذا فنصيحتي  استخدم  أكسس للاسئلة والنقاشات لان التعامل مع قواعد البيانات (يعني نسبيا) تكون من جهة البرنامج ولا فرق (الا قليل) بين التعامل مع الاكسس او mysql  او sqlserver.
ايضا قد يكون السبب اجراء في موديول يتعارض مع اجراء في فورم و هكذا.
الراحة ضرورية لا ترهق نفسك, فاكثر مسببات تاخر الاستيعاب  واقتناص وكشف الخطا هو الارهاق!!!
اللهم إني أعوذ بك من غلبة الدين وغلبة العدو، اللهم إني أعوذ بك من جهد البلاء ومن درك الشقاء ومن سوء القضاء ومن شماتة الأعداء
اللهم اغفر لي خطيئتي وجهلي، وإسرافي في أمري وما أنت أعلم به مني، اللهم اغفر لي ما قدمت وما أخرت، وما أسررت وما أعلنت وما أنت أعلم به مني، أنت المقدم وأنت المؤخر وأنت على كل شيء قدير
الرد }}}
#7
(27-07-19, 11:22 PM)سعود كتب : شي طبيعي اتبعتني من قبل في فكرة منتدى وصفحة زوار   وفكرة مشاركة فيديو وبالاخير وبعد التدقيق و التامل تم حل كل المشكلات .... إياك ان تقول خطا لا مبرر له, كل شيء له قانون محدد تسير فيه حتى اي بيئة برمجة لن تكون عشوائية بل لها قوانين تضبطها.
اغلب العوائق التي تعوق الاخوة من المساعدة اضافة الى ظروفهم الخاصة هي اختلاف قاعدة البيانات فمنهم يستخدم أكسس ومنهم يستخدم sql server ومنهم يستخدم mysql  وهكذا فنصيحتي  استخدم  أكسس للاسئلة والنقاشات لان التعامل مع قواعد البيانات (يعني نسبيا) تكون من جهة البرنامج ولا فرق (الا قليل) بين التعامل مع الاكسس او mysql  او sqlserver.
ايضا قد يكون السبب اجراء في موديول يتعارض مع اجراء في فورم و هكذا.
الراحة ضرورية لا ترهق نفسك, فاكثر مسببات تاخر الاستيعاب  واقتناص وكشف الخطا هو الارهاق!!!



صحيح  كلامك  اخي  لكن  كما تعلم  ان قاعدة بيانات الاكسس  هي  محدودة  فهي  لا تحمل  اكثر  من  مليونين  نقرة  وهذا يعني  انك  بعد  العمل  المستمر في برنامجك  اذا  كان  عملك فيه  مستمر  سوف  تواجه  مشكلة  اخرى  اكبر  من الاولى  لذلك  تلجئ  الى اما  مسح  ملفات قديمة  او  بيانات قديمة  او  انك تقوم بربطها بقاعدة بيانات  اخرى  لهذا  السبب  نلجئ الى  قواعد  بيانات  اخرى  غير  محدودة  

وشكرا لك  اخي  الغالي

طبعا تم حل المشكلة ولكن ظهرت مشكلة اخرى وهي عندما اقوم باضافة فاتورة جديدة واريد اضافة فاتورة اخرى عند الضغط على زر جديد يتغير رقم الفاتورة ولكن يتوقف البرنامج ويظهر لي رسالة في الفيجوال تفيد ان رقم الفاتورة مشتخدم بالفعل ما هو الحل اما بالنسبة للحل فكان كالاتي
انا كنت اولا لم اقم باستدعاء امر الاضافة وعند استدعائه تمت الاضافة بنجاح وكان الامر الي نبهني اليه الاخ ابراهيم وفقه الله ان امر اغلاق الريدر كان انا واضعه نهاية الكود هو لا يجب ان يكون بعد عملية استخراج اخر رقم للفاتورة وتمت االعملية بنجاح ولكن المشكلة هذي التي تواجهني
((  لا أحد يمكن له  ان يحدد متى يموت ولكن هو  من يقدر  ان يحدد  كيف يعيش بعد الموت فالحياة والمماة بيد الله  لكن  حياتك بعد الموت بيدك  فلا  تندم  على شيء فاتك في الدنيا لربما يرزقك  الله  خير  منه في  الاخرة  او لربما  دفع الله  عنك به  شيأ  اعظم  ...  تلك  هي  مشيئة الله  عز  وجل )) 
الرد }}}
تم الشكر بواسطة: ابراهيم ايبو , asemshahen5
#8
جرب اغلاقة قبل بداية القراءة للإحتياط .... ثم اقرأ ثم عاود اغلاقة مره اخرى
يعني :
dr.close
dr.open
dr.read
...... Code
dr.close
الرد }}}
تم الشكر بواسطة: asemshahen5



التنقل السريع :


يقوم بقرائة الموضوع: