منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
حفظ كل بيانات الداتاجريد - نسخة قابلة للطباعة

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

الصفحات: 1 2


حفظ كل بيانات الداتاجريد - العيدروس - 15-05-20

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

كود :
  Dim Sql As String = "Insert Iinto Table1 (Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10,Field11) Values (@Field1,@Field2,@Field3,@Field4,@Field5,@Field6,@Field7,@Field8,@Field9,@Field10,@Field11)"
       Dim cmd As New OleDbCommand(Sql, Conne)
       cmd.Parameters.Clear()
       cmd.Parameters.AddWithValue("@Field1", Val(Me.TextBox1.Text))
       cmd.Parameters.AddWithValue("@Field2", Me.TextBox2.Text)
       cmd.Parameters.AddWithValue("@Field3", Me.TextBox3.Text)
       cmd.Parameters.AddWithValue("@Field4", Me.TextBox4.Text)
       cmd.Parameters.AddWithValue("@Field5", Val(Me.TextBox5.Text))
       cmd.Parameters.AddWithValue("@Field6", Me.TextBox6.Text)
       For I As Integer = 0 To DataGridView1.Rows.Count - 1
           cmd.Parameters.Add(New OleDbParameter("@Field7", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(1).Value
           cmd.Parameters.Add(New OleDbParameter("@Field8", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(2).Value
           cmd.Parameters.Add(New OleDbParameter("@Field9", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(3).Value
           cmd.Parameters.Add(New OleDbParameter("@Field10", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(4).Value
           cmd.Parameters.Add(New OleDbParameter("@Field11", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(5).Value
       Next
       cmd.ExecuteNonQuery()
       Conne.Close()
       MessageBox.Show("تمّت بنجاع العمليّة", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information)



RE: حفظ كل بيانات الداتاجريد - ابراهيم ايبو - 15-05-20

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


RE: حفظ كل بيانات الداتاجريد - aljzazy - 15-05-20

دائما باي برنامج يحتوي الى فواتير يكون هناك جزئين لهذه الفاتورة
الجزء الاول يتعلق بالبيانات الاساسية للفاتورة مثل رقم الفاتورة , اسم العميل,تاريخ الفاتورة,المبلغ الاجمالي,عدد المواد
وهي بيانات لن تتكرر فيتم حفظها بجدول لوحدها

اما الجزء الثاني فهو محتوى الفاتورة او تفاصيل المواد
وهنا يجب ان تاذكر ان الفاتورة الواحدة من الممكن ان تحتوي
على عدد غير محدد من المواد لذلك نلجأ بهذه الحالة لعمل
جدول يحتوي على تفاصبل الفاتورة ونعني بالتفاصيل هنا : رقم الفاتورة,رقم المادة,السعر,الكمية,القيمة الاجمالية
وبالتالي تكون هناك علاقة بين هذين الجدولين وهي رقم الفاتورة على سبيل المثال بالجدول الاول وهو جدول بيانات
الفاتورة الاساسية سيتم حفظ التالي على سبيل المثال:
1.رقم الفاتورة : 001
2.تاريخ الفاتورة: 12/12/2202
3.رقم العميل : 005
4. المبلغ الاجمالي : 1252.25
5. عدد المواد :3

اما الجدول الاخر وهو جدول تفاصيل الفاتورة  ولنفرض انه يحتوي على 3 منتجات سيكون بالشكل التالي :
المنتج الاول
1. رقم تفاصيل الفاتورة : 1 وبالعادة يكون ترقيم تلقائي فلا يلزم اضافته بالكود
2. رقم الفاتورة : 001 وهو نفس رقم البيانات الاساسية للفاتورة
3.رقم المنتج او المادة : 120 على سبيل المثال
4. الكمية : 10
5. السعر : 12
6. الاجمالي : 120

المنتج الثاني
1. رقم تفاصيل الفاتورة : 2 وبالعادة يكون ترقيم تلقائي فلا يلزم اضافته بالكود
2. رقم الفاتورة : 001 وهو نفس رقم البيانات الاساسية للفاتورة
3.رقم المنتج او المادة :  110على سبيل المثال
4. الكمية : 5
5. السعر : 6
6. الاجمالي : 30

المنتج المنتج الثالث
1. رقم تفاصيل الفاتورة : 3 وبالعادة يكون ترقيم تلقائي فلا يلزم اضافته بالكود
2. رقم الفاتورة : 001 وهو نفس رقم البيانات الاساسية للفاتورة
3.رقم المنتج او المادة : 130 على سبيل المثال
4. الكمية : 8
5. السعر : 9
6. الاجمالي : 72


وهكذا

اتمنى ان تكون الفكرة قد وصلت


RE: حفظ كل بيانات الداتاجريد - العيدروس - 15-05-20

شكرا جزيلا اخي ابراهي على الشرح الواضح . الكود السابق مثلته فقط براس الفاتورة و تفاصيل الفاتورة لكن هو ليس لحفظ الفاتورة فقط للتوضيح. انا اضفت حقل آخر اسمو id من نوع ترقيم تلقائي.المشكلة يتم حفظ سطر واحد فقط بارك الله فيك اخي ابراهيم

شكرا جزيلا اخي aljzazy على الشرح الواضح ربنا يبارك فيك و يرحم والديك.الفكرة اخي ان الموضوع ليس له علاقة بالفاتورة انا قلت مثل الفاتورة فقط للتوضيح .عندي مجموعة تاكسات بكس و بعض سطور على الداتاجريد اريد احفظهم مرة واحدة بارك الله فيك


RE: حفظ كل بيانات الداتاجريد - aljzazy - 15-05-20

الافضل ان تفصل بين الاوامر
ضع كود حفظ البيانات الاساسية بصب لوحده
وكود حفظ تفاصيل الفاتورة بصب اخر
ان تقوم بتنفيذ الحفظ بعد عمل اللوب خارج اللوب


RE: حفظ كل بيانات الداتاجريد - العيدروس - 16-05-20

كيف يتم عمل كل جزء بصب وحده اخي aljzazy يرحم والديك


RE: حفظ كل بيانات الداتاجريد - aljzazy - 16-05-20

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


كود :
Public Sub Insert_Sale_Tbl(ByVal Sale_ID As Int32, ByVal Sale_Date As Date, ByVal Inv_Type As String, ByVal SalesMan As String, ByVal Cus_ID As Int32, ByVal Item_Count As Int32, ByVal Total As Double, ByVal Tax_Per As Double, ByVal TaxTotal As Double, ByVal Discount_Per As Double, ByVal DiscountTotal As Double, ByVal FinalTotal As Double, ByVal Paid As Double, ByVal UnPaid As Double)
       Dim Cmd As New SqlCommand
       With Cmd
           .Connection = Con
           .CommandType = CommandType.Text
           .CommandText = "Insert Into Sale_Tbl ( Sale_ID,Sale_Date,Inv_Type,SalesMan,Cus_ID,Item_Count,Total,Tax_Per,TaxTotal,Discount_Per,DiscountTotal,FinalTotal,Paid,UnPaid)values(@Sale_ID,@Sale_Date,@Inv_Type,@SalesMan,@Cus_ID,@Item_Count,@Total,@Tax_Per,@TaxTotal,@Discount_Per,@DiscountTotal,@FinalTotal,@Paid,@UnPaid)"
           .Parameters.Clear()
           .Parameters.AddWithValue("@Sale_ID", SqlDbType.Int).Value = Sale_ID
           .Parameters.AddWithValue("@Sale_Date", SqlDbType.Date).Value = Sale_Date
           .Parameters.AddWithValue("@Inv_Type", SqlDbType.VarChar).Value = Inv_Type
           .Parameters.AddWithValue("@SalesMan", SqlDbType.VarChar).Value = SalesMan
           .Parameters.AddWithValue("@Cus_ID", SqlDbType.Int).Value = Cus_ID
           .Parameters.AddWithValue("@Item_Count", SqlDbType.Int).Value = Item_Count
           .Parameters.AddWithValue("@Total", SqlDbType.Decimal).Value = Total
           .Parameters.AddWithValue("@Tax_Per", SqlDbType.Decimal).Value = Tax_Per
           .Parameters.AddWithValue("@TaxTotal", SqlDbType.Decimal).Value = TaxTotal
           .Parameters.AddWithValue("@Discount_Per", SqlDbType.Decimal).Value = Discount_Per
           .Parameters.AddWithValue("@DiscountTotal", SqlDbType.Decimal).Value = DiscountTotal
           .Parameters.AddWithValue("@FinalTotal", SqlDbType.Decimal).Value = FinalTotal
           .Parameters.AddWithValue("@Paid", SqlDbType.Decimal).Value = Paid
           .Parameters.AddWithValue("@UnPaid", SqlDbType.Decimal).Value = UnPaid
       End With
       If Con.State = 1 Then Con.Close()
       Con.Open()
       Cmd.ExecuteNonQuery()
       Con.Close()
       'MsgBox("تم إضافة السجل بنجاح", MsgBoxStyle.Information, "حفظ")
       Cmd = Nothing
   End Sub


وهذا مثال على حفظ تفاصيل الفاتورة


كود :
Public Sub Insert_Sale_Details_Tbl()
       For i As Integer = 0 To dgvSale.Rows.Count - 1
           Dim Cmd As New SqlCommand
           With Cmd
               .Connection = Con
               .CommandType = CommandType.Text
               .CommandText = "Insert Into Sale_Details_Tbl ( Sale_ID,Prd_ID,SalePrice,Qty,TotalAmount)values(@Sale_ID,@Prd_ID,@SalePrice,@Qty,@TotalAmount)"
               .Parameters.Clear()
               .Parameters.AddWithValue("@Sale_ID", SqlDbType.Int).Value = Sale_ID.Text
               .Parameters.AddWithValue("@Prd_ID", SqlDbType.Int).Value = dgvSale.Rows(i).Cells(0).Value
               .Parameters.AddWithValue("@SalePrice", SqlDbType.Decimal).Value = dgvSale.Rows(i).Cells(4).Value
               .Parameters.AddWithValue("@Qty", SqlDbType.Int).Value = dgvSale.Rows(i).Cells(5).Value
               .Parameters.AddWithValue("@TotalAmount", SqlDbType.Decimal).Value = dgvSale.Rows(i).Cells(6).Value
           End With
           If Con.State = 1 Then Con.Close()
           Con.Open()
           Cmd.ExecuteNonQuery()
           Con.Close()

           Cmd = Nothing

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



طبعا" في الزر الخاص بالحفظ اقوم باستدعاء الامرين معا


كود :
Private Sub BtnSave_Click(sender As System.Object, e As System.EventArgs) Handles BtnSave.Click
       Insert_Sale_Tbl(Sale_ID.Text, Sale_Date.Value, Inv_Type.Text, SalesMan.Text, Cus_ID.Text, Item_Count.Text, Total.Text, TaxValue.Text, TaxTotal.Text, DiscountValue.Text, DiscountTotal.Text, FinalTotal.Text, Paid.Text, UnPaid.Text)
       Insert_Sale_Details_Tbl()

   End Sub


وهذه صورة عن الجداول بقاعدة البيانات

جدول البيانات الاساسية


جدول تفاصيل الفاتورة



وهذا رابط للدورة يمكنك الاستفادة من الدروس






RE: حفظ كل بيانات الداتاجريد - عبدالله الدوسري - 16-05-20

يجب أن تجعل الكود بالكامل داخل الجملة For
حتى يتم إدراج كل السجلات في قاعدة البيانات
بالشكل التالي :


[attachment=24750]

كود :
For I As Integer = 0 To DataGridView1.Rows.Count - 1

    Dim Sql As String = "Insert Iinto Table1 (Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10,Field11) Values (@Field1,@Field2,@Field3,@Field4,@Field5,@Field6,@Field7,@Field8,@Field9,@Field10,@Field11)"
    Dim cmd As New OleDbCommand(Sql, Conne)
    cmd.Parameters.Clear()
    '-----------------------------------------------
    cmd.Parameters.AddWithValue("@Field1", Val(Me.TextBox1.Text))
    cmd.Parameters.AddWithValue("@Field2", Me.TextBox2.Text)
    cmd.Parameters.AddWithValue("@Field3", Me.TextBox3.Text)
    cmd.Parameters.AddWithValue("@Field4", Me.TextBox4.Text)
    cmd.Parameters.AddWithValue("@Field5", Val(Me.TextBox5.Text))
    cmd.Parameters.AddWithValue("@Field6", Me.TextBox6.Text)
    '-----------------------------------------------
    cmd.Parameters.Add(New OleDbParameter("@Field7", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(1).Value
    cmd.Parameters.Add(New OleDbParameter("@Field8", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(2).Value
    cmd.Parameters.Add(New OleDbParameter("@Field9", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(3).Value
    cmd.Parameters.Add(New OleDbParameter("@Field10", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(4).Value
    cmd.Parameters.Add(New OleDbParameter("@Field11", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(5).Value
    '-----------------------------------------------
    cmd.ExecuteNonQuery()
    
Next

Conne.Close()
MessageBox.Show("تمّت بنجاع العمليّة", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information)



RE: حفظ كل بيانات الداتاجريد - aljzazy - 16-05-20

(16-05-20, 01:32 AM)عبدالله الدوسري كتب : يجب أن تجعل الكود بالكامل داخل الجملة For
حتى يتم إدراج كل السجلات في قاعدة البيانات
بالشكل التالي :




كود :
For I As Integer = 0 To DataGridView1.Rows.Count - 1

    Dim Sql As String = "Insert Iinto Table1 (Field1,Field2,Field3,Field4,Field5,Field6,Field7,Field8,Field9,Field10,Field11) Values (@Field1,@Field2,@Field3,@Field4,@Field5,@Field6,@Field7,@Field8,@Field9,@Field10,@Field11)"
    Dim cmd As New OleDbCommand(Sql, Conne)
    cmd.Parameters.Clear()
    '-----------------------------------------------
    cmd.Parameters.AddWithValue("@Field1", Val(Me.TextBox1.Text))
    cmd.Parameters.AddWithValue("@Field2", Me.TextBox2.Text)
    cmd.Parameters.AddWithValue("@Field3", Me.TextBox3.Text)
    cmd.Parameters.AddWithValue("@Field4", Me.TextBox4.Text)
    cmd.Parameters.AddWithValue("@Field5", Val(Me.TextBox5.Text))
    cmd.Parameters.AddWithValue("@Field6", Me.TextBox6.Text)
    '-----------------------------------------------
    cmd.Parameters.Add(New OleDbParameter("@Field7", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(1).Value
    cmd.Parameters.Add(New OleDbParameter("@Field8", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(2).Value
    cmd.Parameters.Add(New OleDbParameter("@Field9", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(3).Value
    cmd.Parameters.Add(New OleDbParameter("@Field10", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(4).Value
    cmd.Parameters.Add(New OleDbParameter("@Field11", OleDbType.VarWChar)).Value = Me.DataGridView1.Rows(I).Cells(5).Value
    '-----------------------------------------------
    cmd.ExecuteNonQuery()
    
Next

Conne.Close()
MessageBox.Show("تمّت بنجاع العمليّة", "رسالة تأكيد", MessageBoxButtons.OK, MessageBoxIcon.Information)

الاخ عبدالله الدوسري العزيز
كيف سيتم الامرواللوب هنا يحتوي على مفتاح اساسي
هل ستتم عملية الحفظ ونحن نعلم ان المفتاح الاساسي لا يتكرر
بكل تأكيد سيحدث خطأ

الافضل فصل عملية الحفظ بالتأكيد


RE: حفظ كل بيانات الداتاجريد - عبدالله الدوسري - 16-05-20

(16-05-20, 01:37 AM)aljzazy كتب : الاخ عبدالله الدوسري العزيز
كيف سيتم الامرواللوب هنا يحتوي على مفتاح اساسي
هل ستتم عملية الحفظ ونحن نعلم ان المفتاح الاساسي لا يتكرر
بكل تأكيد سيحدث خطأ

الافضل فصل عملية الحفظ بالتأكيد


إذا كان المفتاح الأساسي ( ترقيم تلقائي ) فلن يحتاج إلى ذكر حقل المفتاح الأساسي في جملة الإستعلام , لأنه من إختصاص قاعدة البيانات وهي من تنشئ هذا الرقم , حتى لو أهملت أسم حقل المفتاح الأساسي من جملة الإستعلام , قاعدة البيانات هي من تنشئ هذا الرقم. حتى لو ذكرت أسم الحقل الأساسي وأعطيته قيمة , فإن قاعدة البيانات تتجاهل القيمة المرسلة لحقل المفتاح الأساسي وتعتمد على إنشاءة بواسطة الترقيم التلقائي.
إذا كان المفتاح الأساسي ( ليس ترقيم تلقائي ) فأكيد أنه سيحتاج إلى تعيين الرقم الجديد في كل لفة من الجملة For , وهو لم يذكر في جملة الإستعلام أي شيء يخص المفتاح الأساسي ولا يوجد أي حقل يدل على أنه مفتاح أساسي. 
وذلك كما قال العيدروس :لكن بالنسبة للداتاجريد يحفظ فقط السطر الأول ) وهذة هي مشكلتة , يريد حفظ كل السجلات في الـ DataGridView , بدون الدخول في تفاصيل هو ماذا يعمل بالضبط. 


(15-05-20, 11:24 PM)العيدروس كتب : شكرا جزيلا اخي ابراهي على الشرح الواضح . الكود السابق مثلته فقط براس الفاتورة و تفاصيل الفاتورة لكن هو ليس لحفظ الفاتورة فقط للتوضيح. انا اضفت حقل آخر اسمو id من نوع ترقيم تلقائي.المشكلة يتم حفظ سطر واحد فقط بارك الله فيك اخي ابراهيم

شكرا جزيلا اخي aljzazy على الشرح الواضح ربنا يبارك فيك و يرحم والديك.الفكرة اخي ان الموضوع ليس له علاقة بالفاتورة انا قلت مثل الفاتورة فقط للتوضيح .عندي مجموعة تاكسات بكس و بعض سطور على الداتاجريد اريد احفظهم مرة واحدة بارك الله فيك

واضح ان المشكلة : يتم حفظ سطر واحد فقط 
ومن الرد أيضاً : نفهم أن :  id من نوع ترقيم تلقائي

فأكيد أنه لا يحتاج إلى تعيين رقم الـ ID في الجملة For
بنائاً على هذة المعطيات أكيد أنه لن يجد خطاء يخص الترقيم التلقائي.