منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مشكلة اتعبتني
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام  عليكم  الاخوة  الاعزاء  انا  كملت  كلشي  تمام  وعماليات  الضرب  كلها صحيحة  والاستعلام  وكل شي  تمام لكن  عند  الضغط  على  عملية  اضافة  المنتجات  بتطلع  عندي هذه رسالة  الخطا  

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



كود :
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.


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

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

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

اخي  يمكنك  مشاهدة الكود فانا قمت باغلاق  الريدر  ولكن نفس  الخطا انت الان يمكنك مراجعة  الكود في الاخر  انا غالق  الريدر  وغالق  الاتصال بقاعدة  البيانات
ةمن ثم رسالة  تأكيد  الحفظ
طلما انها مشكلة متعبتك .... ارفع قاعدة البيانات مع الفوم الخاص بهذا الخطأ لكي يحاول الجميع مساعدتك
انا مع ابراهيم فيما قال
شي طبيعي اتبعتني من قبل في فكرة منتدى وصفحة زوار   وفكرة مشاركة فيديو وبالاخير وبعد التدقيق و التامل تم حل كل المشكلات .... إياك ان تقول خطا لا مبرر له, كل شيء له قانون محدد تسير فيه حتى اي بيئة برمجة لن تكون عشوائية بل لها قوانين تضبطها.
اغلب العوائق التي تعوق الاخوة من المساعدة اضافة الى ظروفهم الخاصة هي اختلاف قاعدة البيانات فمنهم يستخدم أكسس ومنهم يستخدم sql server ومنهم يستخدم mysql  وهكذا فنصيحتي  استخدم  أكسس للاسئلة والنقاشات لان التعامل مع قواعد البيانات (يعني نسبيا) تكون من جهة البرنامج ولا فرق (الا قليل) بين التعامل مع الاكسس او mysql  او sqlserver.
ايضا قد يكون السبب اجراء في موديول يتعارض مع اجراء في فورم و هكذا.
الراحة ضرورية لا ترهق نفسك, فاكثر مسببات تاخر الاستيعاب  واقتناص وكشف الخطا هو الارهاق!!!
(27-07-19, 11:22 PM)سعود كتب : [ -> ]شي طبيعي اتبعتني من قبل في فكرة منتدى وصفحة زوار   وفكرة مشاركة فيديو وبالاخير وبعد التدقيق و التامل تم حل كل المشكلات .... إياك ان تقول خطا لا مبرر له, كل شيء له قانون محدد تسير فيه حتى اي بيئة برمجة لن تكون عشوائية بل لها قوانين تضبطها.
اغلب العوائق التي تعوق الاخوة من المساعدة اضافة الى ظروفهم الخاصة هي اختلاف قاعدة البيانات فمنهم يستخدم أكسس ومنهم يستخدم sql server ومنهم يستخدم mysql  وهكذا فنصيحتي  استخدم  أكسس للاسئلة والنقاشات لان التعامل مع قواعد البيانات (يعني نسبيا) تكون من جهة البرنامج ولا فرق (الا قليل) بين التعامل مع الاكسس او mysql  او sqlserver.
ايضا قد يكون السبب اجراء في موديول يتعارض مع اجراء في فورم و هكذا.
الراحة ضرورية لا ترهق نفسك, فاكثر مسببات تاخر الاستيعاب  واقتناص وكشف الخطا هو الارهاق!!!



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

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

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