التنقل بين السجلات في الجدول

السلام عليكم ورحمه الله وبركاته 

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

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

نبدأ بتنفيذ الكود:


سنقوم بأضافه اربع  Button  (الاول - التالي - السابق - الاخير )
واداه Label  لنكتب بها رقم السجل

نقوم بالتصريح عن متغير عام في الفورم
Dim x As Integer = 0


حتي نسهل علي انفسنا سنقوم بعمل اجراء واحد لنستخدمه مع جميع ازرار الانتقال
Private Sub rowSelection()

        If DataGridView1.RowCount = 0 Then Label4.Text = "0 of 0 " : Exit Sub

        With DataGridView1

            '  الغاء التحديد في الجريد

            .ClearSelection()

            'تحديد السجل حسب الرقم

            .Rows(x).Selected = True

            'التركيز (الانتقال) الي السجل المعروض

            .FirstDisplayedScrollingRowIndex = x

            TextBox1.Text = .Rows(x).Cells(0).Value.ToString

            TextBox2.Text = .Rows(x).Cells(1).Value.ToString

            TextBox3.Text = .Rows(x).Cells(2).Value.ToString

            Label4.Text = x + 1 & " of " & dt.Rows.Count

        End With

    End Sub
كود السجل الاول
x = 0
  rowSelection()
كود السجل السابق
If x > 0 Then
  x -= 1
  rowSelection()
  End If
كود السجل التالي
If x < dt.Rows.Count - 1 Then
   x += 1
   rowSelection()
   End If

كود السجل الاخير
x = dt.Rows.Count - 1
   rowSelection()

واخير نضيف هذه السطر في اخر الاجراء Loadgrid حتي تتحدث ارقام السجلات مع عمليات الاضافه والحذف

rowSelection()


وبهذا نكون تعلمنا طريقه التنقل بين السجلات

لتحميل المثال اضغط هـــنـا

حذف البيانات من الجدول | Delete

السلام عليكم ورحمه الله وبركاته 



لحذف البيانات في الجدول نستخدم جمله Delete وتكتب الجمله بهذاالشكل : 

DELETE FROM table_name
WHERE column_name = some_value

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

       'Command وضعنا جمله الاستعلام في متغير نصي ثم اسنادها الي كائن الامر 
        sql = "Delete from employees  Where Emp_code =  @Emp_code "
        Cmd.CommandText = sql
        ' وضع القيمه الخاصه  بالبارميتر
        Cmd.Parameters.Clear()
        Cmd.Parameters.AddWithValue("@Emp_code", TextBox1.Text)
        If Cn.State = ConnectionState.Closed Then Cn.Open()
        'تنفيذ الاستعلام
        Cmd.ExecuteNonQuery()
        ' غلق الاتصال 
        Cn.Close()
       MessageBox.Show("تم الحذف بنجاح", "حذف  ", MessageBoxButtons.OK, MessageBoxIcon.Information)

تذكر  :
  • لابد من وجود شرط في جمله الحذف حتي لا يتم حذف بيانات الجدول بالكامل .
  • لا تنسي ان تحذف البيانات من البارميتر قبل استعماله حتي تتجنب الاخطاء .
  • لاحظ اننا استخدمنا ExecuteNonQuery  ايضا لان الاستعلام لا يرجع لنا ببيانات فقط سيقوم بتنفيذ التعديل دون الرجوع ببيانات .


رابط تحميل المثال هــنــا



تعديل البيانات في الجدول | UPDATE

السلام عليكم ورحمه الله وبركاته 

UPDATE
لتعديل البيانات في الجدول نستخدم جمله UPDATE وتكتب الجمله بهذاالشكل :


UPDATE table_name
SET column_name1 = new_value ,
column_name2 = new_value,.... 
WHERE column_name = some_value 

 يمكنك من خلال هذه  الجمله تعديل عمود او اكثر فقط بكتابه اسم العمود في الجمله column_name1 = new_value
ولكن لابد من وجود شرط في جمله التعديل حتي لا يتم تعديل بيانات الجدول بالكامل 

نكمل علي مثالنا لنري كيفيه كتابه كود التعديل :

'  Command وضعنا جمله التعديل  في متغير نصي ثم اسنادها الي كائن الامر 
        sql = "UPDATE employees set Emp_name = @Emp_name ,Emp_phone=@Emp_phone Where Emp_code =  @Emp_code "

        Cmd.CommandText = sql
        ' وضع القيم الخاصه بكل بارميتر
        Cmd.Parameters.Clear()
        Cmd.Parameters.AddWithValue("@Emp_name", TextBox2.Text)
        Cmd.Parameters.AddWithValue("@Emp_phone", TextBox3.Text)
        Cmd.Parameters.AddWithValue("@Emp_code ", TextBox1.Text)
        'التأكد من حاله الاتصال
        If Cn.State = ConnectionState.Closed Then Cn.Open()
        'تنفيذ الاستعلام
        Cmd.ExecuteNonQuery()
        ' غلق الاتصال 
        Cn.Close()
       
        MessageBox.Show("تم التعديل بنجاح", "تعديل ", MessageBoxButtons.OK, MessageBoxIcon.Information)


ملاحظات هامه :
  • لابد من وجود شرط في جمله التعديل حتي لا يتم تعديل بيانات الجدول بالكامل .
  • انت غير ملزم ان يكون ترتيب الاعمده في جمله الاستعلام بنفس ترتيب الجدول.
  • لا تنسي ان تحذف البيانات من البارميتر قبل استعماله حتي تتجنب الاخطاء .
  • حاول ان يكون ترتيب البارميترات في الكود بنفس ترتيبها في جمله التعديل .
  • لاحظ اننا استخدمنا ExecuteNonQuery  لان الاستعلام لا يرجع لنا ببيانات فقط سيقوم بتنفيذ التعديل دون الرجوع ببيانات .
وبهذا يكون اتضح لنا الفرق بين :
(ExecuteNonQuery و ExecuteScalar  و ExecuteReader )
 
رابط تحميل المثال هــنــا




اضافه البيانات في الجدول | Insert into


السلام عليكم ورحمه الله وبركاته


Insert into


سنتعلم في هذا المثال :

  • الترقيم التلقائي
  • الاضافه في الجدول عن طريق البارميترات 
  • مسح محتويات جميع  التيكست بوكس علي الفورم
  • نقل بيانات السطر المحدد في الداتا جريد الي التيكست  بوكس
  • تنسيق العرض في الداتا جريد

لا ضافه البيانات في الجدول نستخدم Insert into وتكتب الجمله بهذاالشكل :

لاضافه صف كامل بالجدول تكون بالشكل التالي :


INSERT INTO table_name VALUES  (value1, value2,....)

ويمكنك ايضا تحديد الحقول المطلوب إضافتها فقط وتكون كالتالى :

INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,....)


شرح اهم الاكواد في المثال  :



  • كود الترقيم التلقائي 
Cmd.CommandText = "Select Max(Emp_code) from employees "

 If Cn.State = ConnectionState.Closed Then Cn.Open()

 Dim Max As Integer = Val(Cmd.ExecuteScalar.ToString) + Val("1")

من خلال max في جمله الاستعلام نحصل علي اكبر رقم في حقل الكود ،، ثم نقوم بتنفيذ الاستعلام ونضيف عليه واحد 
وهكذا نكون حصلنا علي ترقيم تلقائي 
لاحظ اننا استخدمنا ExecuteScalar   لان ناتج الاستعلام خليه واحده كما ذكرنا في الدرس السابق

  • كود الاضافه
'  Command وضعنا جمله الاستعلام في متغير نصي ثم اسنادها الي كائن الامر 

        sql = "Insert into employees  values (@Emp_code ,@Emp_name,@Emp_phone)"

        Cmd.CommandText = sql

        ' وضع القيم الخاصه بكل بارميتر
        Cmd.Parameters.Clear()
        Cmd.Parameters.AddWithValue("@Emp_code ", Max)
        Cmd.Parameters.AddWithValue("@Emp_name", TextBox2.Text)
        Cmd.Parameters.AddWithValue("@Emp_phone", TextBox3.Text)

        'تنفيذ الاستعلام
        Cmd.ExecuteNonQuery()

        ' غلق الاتصال 
        Cn.Close()

لاحظ اننا استخدمنا ExecuteNonQuery  لان الاستعلام لا يرجع لنا ببيانات فقط سيقوم بتنفيذ الاضافه 
  • مسح محتويات جميع  التيكست بوكس علي الفورم
        For Each ctrl As Control In Me.Controls
            If TypeOf ctrl Is TextBox Then
                CType(ctrl, TextBox).Clear()
            End If
        Next 


  • نقل بيانات السطر المحدد في الداتا جريد الي التيكست  بوكس
 في حدث CellClick  للداتا جريد نكتب هذا الكود 
TextBox1.Text = DataGridView1.Rows(e.RowIndex).Cells(0).Value.ToString

TextBox2.Text = DataGridView1.Rows(e.RowIndex).Cells(1).Value.ToString

TextBox3.Text = DataGridView1.Rows(e.RowIndex).Cells(2).Value.ToString


 لا حظ اننا قمنا بتحويل محتوي خليه الداتا جريد الي نصي من خلال ToString
 وقمنا بالحصول علي رقم السطر المحدد في الداتا جريد من خلال e.RowIndex   

 ان شاء الله يكون الدرس واضح ومفهوم 
اذا واجهك اي صعوبه في الكود لا تتردد في السؤال 

رابط تحميل المثال هــنــا