المشاركات : 70
المواضيع 33
الإنتساب : Jun 2019
السمعة :
0
الشكر: 16
تم شكره 13 مرات في 11 مشاركات
اقوم بادخال بيانات لقاعدة بيانات باستخدام الفيجوال بيسك وليس باستيرادها مباشرة الى sql حيث اقوم باستيرادها من جدول ايكسيل الى داتا جريد اولا ثم من الداتا جريد الى قاعدة البيانات sql
اقوم بادخال البيانات بشكل يدوي حيث اقوم باختيار الصف ثم الضغط على زر الادخال
اريد عمل عداد يقوم بادخال البيانات من الداتا جريد الى قاعدة البيانات دفعة واحدة
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
ضع مثال بسيط لاعدله لك .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 70
المواضيع 33
الإنتساب : Jun 2019
السمعة :
0
الشكر: 16
تم شكره 13 مرات في 11 مشاركات
لا يوجد مثال ببساطة
اريد عمل عداد يحفظ البيانات معروضة في داتا جريد يحفظها في قاعدة بيانات السيكوال
العداد يعمل لكي يحفظ كل صف على حدة ولكن مرة واحدة
فما أقوم بفعله اختار كل صف على حدة والضغط على زر حفظ لكن ما أريده هو عند الضغط على الزر يقوم بحفظ جميع الصفوف مرة واحدة
المشاركات : 669
المواضيع 88
الإنتساب : Aug 2016
السمعة :
97
الشكر: 788
تم شكره 1155 مرات في 488 مشاركات
ببساطه صديقي ، قم بوضع جملة الاضافة في لوب فقط
PHP كود :
For i = 0 To DataGridView1.Rows.Count - 1 'جملة الاضافة Next
المشاركات : 2,055
المواضيع 49
الإنتساب : Oct 2017
السمعة :
538
الشكر: 10589
تم شكره 5330 مرات في 2095 مشاركات
05-08-19, 10:54 PM
(آخر تعديل لهذه المشاركة : 06-08-19, 01:13 AM {2} بواسطة ابراهيم ايبو.)
السلام عليكم اخي الكريم
لنفترض ان لديك في الداتاغرايد 3 حقول : ID ,Item,Total
والداتاغرايد فيها عدد من السجلات وتريد حفطها في جدول اسمه Table
الامر نفسه جملة الانسرت العادية لكن هنا ستأخذ قيم الحقول من الداتاغرايد وفق جملة For بدلا من مربعات الادخال
بحيث ياخذ الصفوف تباعا واحدا بلو الاخر ويقوم بالحفظ كالمعتاد
واليك الكود للحقول التي ذكرتها لك يبقى ان تغير الاسماء وعدد الحقول لما عندك
كود :
Dim Cmd As New OleDbCommand()
Private Sub Btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Save.Click
'هنا ستقوم بتعريف هذه المتغيرات
Dim Id As Integer
Dim item As String
Dim total As String
Dim Cmd As New OleDbCommand("insert into Table (Id,Item,Total)values(@Id,@Item,@Total)", con)
' تحتاج الى هذه الفور زيادة على الحفظ العادي
For i As Integer = 0 To Datagrid1.Rows.Count - 1
Id = Datagrid1.Rows(i).Cells(0).Value
item = Datagrid1.Rows(i).Cells(1).Value
total = Datagrid1.Rows(i).Cells(2).Value
Next
Cmd.Parameters.Add(New OleDbParameter("@Id", OleDbType.Integer)).Value = Id
Cmd.Parameters.Add(New OleDbParameter("@Item", OleDbType.VarWChar)).Value = item
Cmd.Parameters.Add(New OleDbParameter("@Total", OleDbType.VarWChar)).Value = total
If con.State = ConnectionState.Open Then con.Close()
con.Open()
Cmd.ExecuteNonQuery()
con.Close()
MessageBox.Show("تم حفظ البيانات بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
المشاركات : 2,324
المواضيع 81
الإنتساب : May 2018
السمعة :
522
الشكر: 13917
تم شكره 5687 مرات في 2270 مشاركات
(05-08-19, 10:54 PM)ابراهيم ايبو كتب : السلام عليكم اخي الكريم
لنفترض ان لديك في الداتاغرايد 3 حقول : ID ,Item,Total
والداتاغرايد فيها عدد من السجلات وتريد حفطها في جدول اسمه Table
الامر نفسه جملة الانسرت العادية لكن هنا ستأخذ قيم الحقول من الداتاغرايد وفق جملة For بدلا من مربعات الادخال
بحيث ياخذ الصفوف تباعا واحدا بلو الاخر ويقوم بالحفظ كالمعتاد
واليك الكود للحقول التي ذكرتها لك يبقى ان تغير الاسماء وعدد الحقول لما عندك
كود :
Dim Cmd As New OleDbCommand()
Private Sub Btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Save.Click
'هنا ستقوم بتعريف هذه المتغيرات
Dim Id As Integer
Dim item As String
Dim total As String
Dim Cmd As New OleDbCommand("insert into Table (Id,Item,Total)values(@Id,@Item,@Total)", con)
' تحتاج الى هذه الفور زيادة على الحفظ العادي
For i As Integer = 0 To Datagrid1.Rows.Count - 1
Id = Datagrid1.Rows(i).Cells(0).Value
item = Datagrid1.Rows(i).Cells(1).Value
total = Datagrid1.Rows(i).Cells(2).Value
Next
Cmd.Parameters.Add(New OleDbParameter("@Id", OleDbType.Integer)).Value = Id
Cmd.Parameters.Add(New OleDbParameter("@Item", OleDbType.VarWChar)).Value = item
Cmd.Parameters.Add(New OleDbParameter("@Total", OleDbType.VarWChar)).Value = total
If con.State = ConnectionState.Open Then con.Close()
con.Open()
Cmd.ExecuteNonQuery()
con.Close()
MessageBox.Show("تم حفظ البيانات بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
بعد إذنك أخي ابراهيم يجب وضع الباراميتر داخل اللوب لانها ستاخذ فقط اخر سجل و لم تضيف السجلات التي قبله في حال كان عامل الغريد كاملا للإضافة .
سبحان الله وبحمده سبحان الله العظيم و الحمد لله ولا اله الا الله والله اكبر
المشاركات : 2,055
المواضيع 49
الإنتساب : Oct 2017
السمعة :
538
الشكر: 10589
تم شكره 5330 مرات في 2095 مشاركات
السلام عليكم اخي الكريم
نعم كما اشار اخي عاصم مشكورا يجب ان تكون الباراميترات داخل جملة الفور
شي اخر انتبهت اليه وهو عملية الفتح والاغلاق بجب ان لاتكون داخل جملة الفور
لنتصور ان لدينا مثلا 100 سجل وهنا سيتم الفتح والاغلاق 100 مرة وهذا خطأ
اليك الكود بعد التعديل
كود :
Dim Cmd As New OleDbCommand()
Private Sub Btn_Save_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Btn_Save.Click
'هنا ستقوم بتعريف هذه المتغيرات
Dim Id As Integer
Dim item As String
Dim total As String
Dim Cmd As New OleDbCommand("insert into Table (Id,Item,Total)values(@Id,@Item,@Total)", con)
' تحتاج الى هذه الفور زيادة على الحفظ العادي
If con.State = ConnectionState.Open Then con.Close()
con.Open()
For i As Integer = 0 To Datagrid1.Rows.Count - 1
Id = Datagrid1.Rows(i).Cells(0).Value
item = Datagrid1.Rows(i).Cells(1).Value
total = Datagrid1.Rows(i).Cells(2).Value
Cmd.Parameters.Add(New OleDbParameter("@Id", OleDbType.Integer)).Value = Id
Cmd.Parameters.Add(New OleDbParameter("@Item", OleDbType.VarWChar)).Value = item
Cmd.Parameters.Add(New OleDbParameter("@Total", OleDbType.VarWChar)).Value = total
Cmd.ExecuteNonQuery()
Next
con.Close()
MessageBox.Show("تم حفظ البيانات بنجاح", "حفظ", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Sub
اعمل الخير وأجرك لا تنتظره فالله خير من إليك يرده
البرمجة ليست مجرد كود بل هي منهج تفكير منطقي لحل المشكلات
المشاركات : 50
المواضيع 0
الإنتساب : Aug 2019
السمعة :
4
الشكر: 0
تم شكره 139 مرات في 52 مشاركات
إذا كان تعريف cmd خارج For والباراميترات داخل For فيجب إضافة سطر إفراغ الباراميترات في بداية For هكذا
PHP كود :
For i As Integer = 0 To Datagrid1.Rows.Count - 1 Cmd.Parameters.Clear
|