منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[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=33228)



ارجو حل هذه المشكلة - علاء الكبابي - 31-01-20

السلام عليكم
اريد حل هذا اللغز.....
في برمجة زر حفظ في برنامج مبيعات ظهرت مشكلة كالتالي


Private Sub bat_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bat_save.Click
        Dim cmmd As New OleDbCommand
        Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=small cashier.accdb")
        cmmd = New OleDbCommand("insert into orders (id, order_date, user_name, total, cu_name) values (@id, @order_date, @user_name, @total, @cu_name)", con)
        cmmd.Parameters.Add("@id", OleDbType.Integer).Value = txt_nb.Text
        cmmd.Parameters.Add("@order_date", OleDbType.Date).Value = txt_date.Text
        cmmd.Parameters.Add("@user_name", OleDbType.VarChar).Value = txt_cshr.Text
        cmmd.Parameters.Add("@total", OleDbType.Currency).Value = txt_tot.Text
        cmmd.Parameters.Add("@cu_name", OleDbType.VarChar).Value = txt_cunam.Text
        con.Open()
        cmmd.ExecuteNonQuery()


        Dim cmd As New OleDbCommand
        cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)
        For i As Integer = 0 To dgv1.Rows.Count - 1
            Dim code, nam, qty As String
            Dim price, tot As Double
            code = dgv1.Rows(i).Cells(0).Value
            nam = dgv1.Rows(i).Cells(1).Value
            price = dgv1.Rows(i).Cells(2).Value
            qty = dgv1.Rows(i).Cells(3).Value
            tot = dgv1.Rows(i).Cells(4).Value

            cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text
            cmd.Parameters.Add("@code", OleDbType.VarChar).Value = code
            cmd.Parameters.Add("@iname_o", OleDbType.VarChar).Value = nam
            cmd.Parameters.Add("@price_o", OleDbType.Currency).Value = price
            cmd.Parameters.Add("@qty_o", OleDbType.VarChar).Value = qty
            cmd.Parameters.Add("@tot_o", OleDbType.Currency).Value = tot
            cmd.ExecuteNonQuery()


        Next

        con.Close()
        txt_nb.Text = max_order() + 1
        dt.Rows.Clear()
        txt_bay.Clear()
        txt_cunam.Clear()
        txt_cumob.Clear()
        txt_cuadrs.Clear()
        txt_icod.Select()
        clc()


   End Sub



يتم الحفظ في الجدول الاول تمام
ولكن في جدول التفاصيل يتم حفظ اول صنف فقط في الفاتورة بتفاصيله كاملة (السعر والكمية...)
ويكرر هذا الصنف في الحفظ بعدد الاصناف +1
ولا يتم حفظ بقية اصناف الفاتورة


RE: ارجو حل هذه المشكلة - larbihamri - 31-01-20

قم بإدخال جملة insert داخل for


RE: ارجو حل هذه المشكلة - علاء الكبابي - 31-01-20

(31-01-20, 06:24 PM)larbihamri كتب : قم بإدخال جملة insert  داخل for
للاسف مش فاهم تبقى ازاي؟

(31-01-20, 06:24 PM)larbihamri كتب : قم بإدخال جملة insert  داخل for

عندما اعدت ترتيب الجمل بهذا الشكل
For i As Integer = 0 To dgv1.Rows.Count - 1
            Dim code, nam, qty As String
            Dim price, tot As Double
            code = dgv1.Rows(i).Cells(0).Value
            nam = dgv1.Rows(i).Cells(1).Value
            price = dgv1.Rows(i).Cells(2).Value
            qty = dgv1.Rows(i).Cells(3).Value
            tot = dgv1.Rows(i).Cells(4).Value
            Dim cmd As New OleDbCommand
            cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)

            cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text
            cmd.Parameters.Add("@code", OleDbType.VarChar).Value = code
            cmd.Parameters.Add("@iname_o", OleDbType.VarChar).Value = nam
            cmd.Parameters.Add("@price_o", OleDbType.Currency).Value = price
            cmd.Parameters.Add("@qty_o", OleDbType.VarChar).Value = qty
            cmd.Parameters.Add("@tot_o", OleDbType.Currency).Value = tot
            cmd.ExecuteNonQuery()

        Next
        con.Close()
        txt_nb.Text = max_order() + 1
        dt.Rows.Clear()
ظهرت مشكلة جديدة وهي 
parameter @code has no default value
ويتوقف البرنامج عن العمل رغم ان كل قيمة بتدخل في مكانها الصحيح في الجدول وبيتم حفظ تفاصيل الفاتورة بشكل صحيح


RE: ارجو حل هذه المشكلة - larbihamri - 31-01-20

كود :
For i As Integer = 0 To dgv1.Rows.Count - 1

cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)
           Dim code, nam, qty As String
           Dim price, tot As Double
           code = dgv1.Rows(i).Cells(0).Value
           nam = dgv1.Rows(i).Cells(1).Value
           price = dgv1.Rows(i).Cells(2).Value
           qty = dgv1.Rows(i).Cells(3).Value
           tot = dgv1.Rows(i).Cells(4).Value

           cmd.Parameters.Add(New OleDbParameter("@id_o", OleDbType.Integer)).Value = txt_nb.Text
           cmd.Parameters.Add(New OleDbParameter("@code", OleDbType.VarChar)).Value = code
           cmd.Parameters.Add(New OleDbParameter("@iname_o", OleDbType.VarChar)).Value = nam
           cmd.Parameters.Add(New OleDbParameter("@price_o", OleDbType.Currency)).Value = price
           cmd.Parameters.Add(New OleDbParameter("@qty_o", OleDbType.VarChar)).Value = qty
           cmd.Parameters.Add(New OleDbParameter("@tot_o", OleDbType.Currency)).Value = tot
           cmd.ExecuteNonQuery()


       Next



RE: ارجو حل هذه المشكلة - alsalamoni - 31-01-20

(31-01-20, 06:19 PM)علاء الكبابي كتب : السلام عليكم
اريد حل هذا اللغز.....
في برمجة زر حفظ في برنامج مبيعات ظهرت مشكلة كالتالي


Private Sub bat_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bat_save.Click
        Dim cmmd As New OleDbCommand
        Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=small cashier.accdb")
        cmmd = New OleDbCommand("insert into orders (id, order_date, user_name, total, cu_name) values (@id, @order_date, @user_name, @total, @cu_name)", con)
        cmmd.Parameters.Add("@id", OleDbType.Integer).Value = txt_nb.Text
        cmmd.Parameters.Add("@order_date", OleDbType.Date).Value = txt_date.Text
        cmmd.Parameters.Add("@user_name", OleDbType.VarChar).Value = txt_cshr.Text
        cmmd.Parameters.Add("@total", OleDbType.Currency).Value = txt_tot.Text
        cmmd.Parameters.Add("@cu_name", OleDbType.VarChar).Value = txt_cunam.Text
        con.Open()
        cmmd.ExecuteNonQuery()


        Dim cmd As New OleDbCommand
        cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)
        For i As Integer = 0 To dgv1.Rows.Count - 1
            Dim code, nam, qty As String
            Dim price, tot As Double
            code = dgv1.Rows(i).Cells(0).Value
            nam = dgv1.Rows(i).Cells(1).Value
            price = dgv1.Rows(i).Cells(2).Value
            qty = dgv1.Rows(i).Cells(3).Value
            tot = dgv1.Rows(i).Cells(4).Value

            cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text
            cmd.Parameters.Add("@code", OleDbType.VarChar).Value = code
            cmd.Parameters.Add("@iname_o", OleDbType.VarChar).Value = nam
            cmd.Parameters.Add("@price_o", OleDbType.Currency).Value = price
            cmd.Parameters.Add("@qty_o", OleDbType.VarChar).Value = qty
            cmd.Parameters.Add("@tot_o", OleDbType.Currency).Value = tot
            cmd.ExecuteNonQuery()


        Next

        con.Close()
        txt_nb.Text = max_order() + 1
        dt.Rows.Clear()
        txt_bay.Clear()
        txt_cunam.Clear()
        txt_cumob.Clear()
        txt_cuadrs.Clear()
        txt_icod.Select()
        clc()


   End Sub



يتم الحفظ في الجدول الاول تمام
ولكن في جدول التفاصيل يتم حفظ اول صنف فقط في الفاتورة بتفاصيله كاملة (السعر والكمية...)
ويكرر هذا الصنف في الحفظ بعدد الاصناف +1
ولا يتم حفظ بقية اصناف الفاتورة

يجب افراغ الباراميترات قبل اضافة الباراميترات لانها داخل for
يعني أظف هذا السطر
cmd.Parameters.Clear
قبل هذا السطر
cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text


RE: ارجو حل هذه المشكلة - علاء الكبابي - 31-01-20

(31-01-20, 06:41 PM)larbihamri كتب :
كود :
For i As Integer = 0 To dgv1.Rows.Count - 1

cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)
           Dim code, nam, qty As String
           Dim price, tot As Double
           code = dgv1.Rows(i).Cells(0).Value
           nam = dgv1.Rows(i).Cells(1).Value
           price = dgv1.Rows(i).Cells(2).Value
           qty = dgv1.Rows(i).Cells(3).Value
           tot = dgv1.Rows(i).Cells(4).Value

           cmd.Parameters.Add(New OleDbParameter("@id_o", OleDbType.Integer)).Value = txt_nb.Text
           cmd.Parameters.Add(New OleDbParameter("@code", OleDbType.VarChar)).Value = code
           cmd.Parameters.Add(New OleDbParameter("@iname_o", OleDbType.VarChar)).Value = nam
           cmd.Parameters.Add(New OleDbParameter("@price_o", OleDbType.Currency)).Value = price
           cmd.Parameters.Add(New OleDbParameter("@qty_o", OleDbType.VarChar)).Value = qty
           cmd.Parameters.Add(New OleDbParameter("@tot_o", OleDbType.Currency)).Value = tot
           cmd.ExecuteNonQuery()


       Next
للأسف تظهر نفس المشكلة كما في الصورة


RE: ارجو حل هذه المشكلة - larbihamri - 31-01-20

هل code الذي في dgv1 لديه قيمة او قيمة فارغة ؟

او ان code غير موجودة قي قاعدة البيانات او غير مكتوبة بطريقة صحيحة


RE: ارجو حل هذه المشكلة - علاء الكبابي - 31-01-20

(31-01-20, 06:49 PM)alsalamoni كتب : يجب افراغ الباراميترات قبل اضافة الباراميترات لانها داخل for
يعني أظف هذا السطر
cmd.Parameters.Clear
قبل هذا السطر
cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text

اسف جدا ظهرت نفس المشكلة
كما في الشكل

(31-01-20, 06:56 PM)larbihamri كتب : هل code  الذي في dgv1 لديه قيمة او قيمة فارغة ؟

او ان code غير موجودة قي قاعدة البيانات او غير مكتوبة بطريقة صحيحة

[quote pid='155753' dateline='1580482896']

(31-01-20, 06:56 PM)larbihamri كتب : هل code  الذي في dgv1 لديه قيمة او قيمة فارغة ؟

او ان code غير موجودة قي قاعدة البيانات او غير مكتوبة بطريقة صحيحة

[/quote]


RE: ارجو حل هذه المشكلة - alsalamoni - 31-01-20

(31-01-20, 07:01 PM)علاء الكبابي كتب :
(31-01-20, 06:49 PM)alsalamoni كتب : يجب افراغ الباراميترات قبل اضافة الباراميترات لانها داخل for
يعني أظف هذا السطر
cmd.Parameters.Clear
قبل هذا السطر
cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text

اسف جدا ظهرت نفس المشكلة
كما في الشكل

مشاركتي كانت على اساس الكود الذي في اول اول الموضوع

(31-01-20, 06:19 PM)علاء الكبابي كتب : السلام عليكم
اريد حل هذا اللغز.....
في برمجة زر حفظ في برنامج مبيعات ظهرت مشكلة كالتالي


Private Sub bat_save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bat_save.Click
        Dim cmmd As New OleDbCommand
        Dim con As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=small cashier.accdb")
        cmmd = New OleDbCommand("insert into orders (id, order_date, user_name, total, cu_name) values (@id, @order_date, @user_name, @total, @cu_name)", con)
        cmmd.Parameters.Add("@id", OleDbType.Integer).Value = txt_nb.Text
        cmmd.Parameters.Add("@order_date", OleDbType.Date).Value = txt_date.Text
        cmmd.Parameters.Add("@user_name", OleDbType.VarChar).Value = txt_cshr.Text
        cmmd.Parameters.Add("@total", OleDbType.Currency).Value = txt_tot.Text
        cmmd.Parameters.Add("@cu_name", OleDbType.VarChar).Value = txt_cunam.Text
        con.Open()
        cmmd.ExecuteNonQuery()


        Dim cmd As New OleDbCommand
        cmd = New OleDbCommand("insert into orders_d (id_o, code, iname_o, price_o, qty_o, tot_o) values (@id_o, @code, @iname_o, @price_o, @qty_o, @tot_o)", con)
        For i As Integer = 0 To dgv1.Rows.Count - 1
            Dim code, nam, qty As String
            Dim price, tot As Double
            code = dgv1.Rows(i).Cells(0).Value
            nam = dgv1.Rows(i).Cells(1).Value
            price = dgv1.Rows(i).Cells(2).Value
            qty = dgv1.Rows(i).Cells(3).Value
            tot = dgv1.Rows(i).Cells(4).Value

            cmd.Parameters.Add("@id_o", OleDbType.Integer).Value = txt_nb.Text
            cmd.Parameters.Add("@code", OleDbType.VarChar).Value = code
            cmd.Parameters.Add("@iname_o", OleDbType.VarChar).Value = nam
            cmd.Parameters.Add("@price_o", OleDbType.Currency).Value = price
            cmd.Parameters.Add("@qty_o", OleDbType.VarChar).Value = qty
            cmd.Parameters.Add("@tot_o", OleDbType.Currency).Value = tot
            cmd.ExecuteNonQuery()


        Next

        con.Close()
        txt_nb.Text = max_order() + 1
        dt.Rows.Clear()
        txt_bay.Clear()
        txt_cunam.Clear()
        txt_cumob.Clear()
        txt_cuadrs.Clear()
        txt_icod.Select()
        clc()


   End Sub



يتم الحفظ في الجدول الاول تمام
ولكن في جدول التفاصيل يتم حفظ اول صنف فقط في الفاتورة بتفاصيله كاملة (السعر والكمية...)
ويكرر هذا الصنف في الحفظ بعدد الاصناف +1
ولا يتم حفظ بقية اصناف الفاتورة

واذا كان هناك حقل ترقيم تلقائي لا تكتبه في جملة insert