منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[VB.NET] رسالة خطأ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [VB.NET] رسالة خطأ (/showthread.php?tid=39955)



رسالة خطأ - kharbatha - 12-11-21

السلام عليكم

لو سمحتوا شو حل هاي الرسالة الخطأ


System.InvalidOperationException: 'محاولة غير صالحة لاستدعاء MetaData في الوقت الذي يكون القارئ فيه مغلقًا.'


RE: رسالة خطأ - mrfenix93 - 12-11-21

ممكن صورة الكود المستخدم


RE: رسالة خطأ - kharbatha - 12-11-21

(12-11-21, 12:50 PM)mrfenix93 كتب : ممكن صورة الكود المستخدم

كود :
Public Sub Insert_By_ID_2()
       Dim x As Integer
       'Try
       If Con.State = 1 Then Con.Close()
       Con.Open()
       Dim cmd As New SqlCommand(" select  *  from View_Store  where  Prd_Code=@Prd_Code", Con)
       cmd.Parameters.Clear()
       cmd.Parameters.AddWithValue("@Prd_Code", SqlDbType.VarChar).Value = Prd_Code.Text
       Dim adp As New SqlDataAdapter(cmd)
       Dim dr As SqlDataReader
       dr = cmd.ExecuteReader
       If dr.HasRows Then
           While dr.Read
               For i As Integer = 0 To dgvSale.Rows.Count - 1
                   If dgvSale.Rows(i).Cells(1).Value = Prd_Code.Text Then
                       dgvSale(5, i).Value = dgvSale(5, i).Value + 1
                       dgvSale(6, i).Value = dgvSale(5, i).Value * dgvSale(4, i).Value
                       dgvSale(8, i).Value = dgvSale(5, i).Value * dgvSale(7, i).Value
                       Exit Sub
                   End If
               Next
               dgvSale.Rows.Add()
               x = dgvSale.Rows.Count - 1
               dgvSale(0, x).Value = dr("Prd_ID").ToString
               dgvSale(1, x).Value = dr("Prd_Code").ToString
               dgvSale(2, x).Value = dr("Prd_Name").ToString
               dgvSale(3, x).Value = dr("UnitName").ToString
               dgvSale(4, x).Value = dr("SellPrice").ToString
               dgvSale(7, x).Value = dr("BuyPrice").ToString
               dgvSale(5, x).Value = 1
               dgvSale(6, x).Value = dgvSale(5, x).Value * dgvSale(4, x).Value
               dgvSale(8, x).Value = dgvSale(5, x).Value * dgvSale(7, x).Value
               TXTQty.Text = dr("Qty").ToString
               TXTPrdLimit.Text = dr("PrdLimit").ToString
               If Val(TXTQty.Text) < Val(TXTPrdLimit.Text) Then
                   TXTQty.BackColor = Color.Red
                   MsgBox(" تنبيه الكمية الموجودة اقل من حد الطلب", 0, "")
               Else
                   TXTQty.BackColor = Color.White
               End If
           End While
           dr.Close()
           Con.Close()
       Else
           MsgBox("كود المنتج الذي قمت بادخاله غير موجود", 0, "")
       End If
       'Catch ex As Exception
       'Con.Close()
       'End Try
   End Sub



RE: رسالة خطأ - Anas Mahmoud - 12-11-21

في اي سطر يشير طيب عند ظهور الخطأ


RE: رسالة خطأ - kharbatha - 12-11-21

dgvSale(1, x).Value = dr("Prd_Code").ToString
اخوي الرسالة تظهر عند الغاء try
وعند تشغيل try لا تظهر الرسالة ولكن لا يتم تعبئة الجريد فيو


RE: رسالة خطأ - Anas Mahmoud - 12-11-21

While dr.Read اظنها تكفي عن استخدام dr.HasRows


RE: رسالة خطأ - kharbatha - 12-11-21

(12-11-21, 10:51 PM)Anas Mahmoud كتب : While dr.Read اظنها تكفي عن استخدام dr.HasRows

نفس الخطأ بدون dr.HasRows


RE: رسالة خطأ - kharbatha - 13-11-21

تم الحل بتغيير الكود الى الكود التالي



كود :
 Private Sub INSERTDGV()

       Try
           If Con.State = 1 Then Con.Close()
           Con.Open()
           Dim cmd As New SqlCommand(" select  *  from View_Store  where  Prd_Code='" + Prd_Code.Text + "'", Con)
           Dim dt2 As New DataTable
           Dim adp As New SqlDataAdapter(cmd)
           adp.Fill(dt2)
           If dt2.Rows.Count > 0 Then
               For i As Integer = 0 To dgvSale.Rows.Count - 1
                   If dgvSale.Rows(i).Cells(1).Value = Prd_Code.Text Then
                       dgvSale(5, i).Value = Val(TXTQty.Text) + Val(dgvSale(5, i).Value)
                       dgvSale(6, i).Value = dgvSale(5, i).Value * dgvSale(4, i).Value
                       dgvSale(8, i).Value = dgvSale(5, i).Value * dgvSale(7, i).Value

                       Exit Sub
                   End If
               Next
               dgvSale.Rows.Add()
               Dim x As Integer
               x = dgvSale.Rows.Count - 1
               dgvSale(0, x).Value = dt2.Rows(0).Item("Prd_ID")
               dgvSale(1, x).Value = dt2.Rows(0).Item("Prd_Code")
               dgvSale(2, x).Value = dt2.Rows(0).Item("Prd_Name")
               dgvSale(3, x).Value = dt2.Rows(0).Item("UnitName")
               dgvSale(4, x).Value = dt2.Rows(0).Item("SellPrice")
               dgvSale(7, x).Value = dt2.Rows(0).Item("BuyPrice")
               dgvSale(5, x).Value = TXTQty.Text
               dgvSale(6, x).Value = dgvSale(5, x).Value * dgvSale(4, x).Value
               dgvSale(8, x).Value = dgvSale(5, x).Value * dgvSale(7, x).Value
               TXTQtyAVILABEL.Text = dt2.Rows(0).Item("Qty")
               TXTPrdLimit.Text = dt2.Rows(0).Item("PrdLimit")
               If Val(TXTQtyAVILABEL.Text) < Val(TXTPrdLimit.Text) Then
                   TXTQtyAVILABEL.BackColor = Color.Red
                   MsgBox(" تنبيه الكمية الموجودة اقل من حد الطلب", 0, "")
               Else
                   TXTQtyAVILABEL.BackColor = Color.White
               End If
               Prd_Code.Text = ""
               TXTQty.Clear()
               Prd_Code.Focus()
               InvoiceTotal()
               Invoicebuy()
           End If

           Con.Close()
       Catch ex As Exception
           Con.Close()
       End Try
   End Sub