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


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
ولا يتم حفظ بقية اصناف الفاتورة
الرد
تم الشكر بواسطة:
#2
قم بإدخال جملة insert داخل for
الرد
تم الشكر بواسطة: علاء الكبابي , علاء الكبابي
#3
(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
ويتوقف البرنامج عن العمل رغم ان كل قيمة بتدخل في مكانها الصحيح في الجدول وبيتم حفظ تفاصيل الفاتورة بشكل صحيح
الرد
تم الشكر بواسطة:
#4
كود :
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
الرد
تم الشكر بواسطة: علاء الكبابي
#5
(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
الرد
تم الشكر بواسطة: علاء الكبابي , علاء الكبابي
#6
(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
للأسف تظهر نفس المشكلة كما في الصورة


الملفات المرفقة صورة/صور
   
الرد
تم الشكر بواسطة:
#7
هل code الذي في dgv1 لديه قيمة او قيمة فارغة ؟

او ان code غير موجودة قي قاعدة البيانات او غير مكتوبة بطريقة صحيحة
الرد
تم الشكر بواسطة: علاء الكبابي , علاء الكبابي
#8
(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]


الملفات المرفقة صورة/صور
           
الرد
تم الشكر بواسطة:
#9
(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
الرد
تم الشكر بواسطة:



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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم