Imports System.Data
Imports System.Data.OleDb
Imports System.Data.SqlClient
Module module1
Friend _constr As String = _
"provider=microsoft.ace.oledb.12.0;" & _
"data source=" & Application.StartupPath & "\mydatabase.accdb"
End Module
Public Class Form1
Private _dataset As DataSet
Private _conn As OleDbConnection
Private _cmd As OleDbCommand
Private _rowcount As Integer = 0
Private _position As Integer = 0
Private Sub From1_load() Handles Me.Load
_conn = New OleDbConnection(_constr)
_conn.Open()
readdata()
filllistbox()
bindings()
End Sub
Private Sub Form1_Formclosed() Handles Me.FormClosed
_conn.Close()
End Sub
'_ _อ่านข้อมูลมาเก็บไว้ใน Dataset
Private Sub readdata()
Dim sql As String = "select*from student"
_cmd = New OleDbCommand(sql, _conn)
Dim adapter As New OleDbDataAdapter(_cmd)
_dataset = New DataSet()
adapter.Fill(_dataset, "stud")
_rowcount = _dataset.Tables("stud").Rows.Count
End Sub
'_ _เพื่มรายขื่อนักศึกษาลงใน listbox
Private Sub filllistbox()
Dim flname As String = "" 'ประกาศชื่อและนามสกุล firstname และlastname
ListBox1.Items.Clear()
For i = 0 To _dataset.Tables("stud").Rows.Count - 1
flname = _dataset.Tables("stud").Rows(i)("firstname")
ListBox1.Items.Add(flname)
Next
'_ _ ให้รายการลำดับแรกในlistbox ถูกเลือก
'_ _ ซึ่งจะเกิดอีเวนต์ selectedindexchanged ตามมา
If (ListBox1.Items.Count > 0) Then
ListBox1.SelectedIndex = 0
End If
End Sub
'_ _ทำการbinding ข้อมูลกับ Textbox
Private Sub bindings()
txtnoun.DataBindings.Add("text", _dataset, "stud.noun")
txtstudentID.DataBindings.Add("text", _dataset, "stud.studentID")
txtfirstname.DataBindings.Add("text", _dataset, "stud.firstname")
txtlastname.DataBindings.Add("text", _dataset, "stud.lastname")
txtnickname.DataBindings.Add("text", _dataset, "stud.nickname")
txtsex.DataBindings.Add("text", _dataset, "stud.sex")
'txtclass.DataBindings.Add("text", _dataset, "stud.class")
' txtgroup.DataBindings.Add("text", _dataset, "grp.group")
End Sub
Private Sub listbox1_selectedindexchanged() Handles ListBox1.SelectedIndexChanged
Dim index As Integer = ListBox1.SelectedIndex
Me.BindingContext(_dataset, "stud").Position = index
_position = index
updatestatus()
End Sub
Private Sub updatestatus()
ToolStripStatusLabel1.Text = (_position + 1) & " of " & _rowcount
End Sub
Private Sub tabcontrol1_selectedindexchanged() Handles TabControl1.SelectedIndexChanged
'_ _ ถ้าคลิกแท็บเพิ่มข้อมูล
If (TabControl1.SelectedIndex = 1) Then
'_ _ยกเลิกการ Binding เดิมเพื่อรอรับการใส่ข้อมูลใหม่
clearbindings()
btndelete.Enabled = False
ListBox1.Enabled = False
'_ _ถ้าคลิกแท็บแสดง แก้ไขข้อมูล
ElseIf (TabControl1.SelectedIndex = 0) Then
'_ _อ่านข้อมูลใหม่()
readdata()
If (_rowcount = 0) Then '_ _ถ้าไม่มีข้อมูล
Return
End If
'_ _ ทำการbinding ข้อมูลใหม่
bindings()
btndelete.Enabled = True
ListBox1.Enabled = True
ListBox1.SetSelected(0, True)
End If
End Sub
'_ _ถ้าจะทำการ Binding ใหม่ต้องยกเลิกการBinding เดิม
Private Sub clearbindings()
For Each c As Object In GroupBox1.Controls
If (TypeOf c Is TextBox) Then
c.text = ""
c.databindings.clear()
End If
Next
End Sub
Private Sub btnsave_click() Handles btnsave.Click
If (txtnoun.Text = "" Or txtfirstname.Text = "" Or txtlastname.Text = "" Or txtnickname.Text = "" Or txtsex.Text = "") Then
MsgBox("กรุณาใส่ข้อมูลให้ครบ")
Return
End If
Dim sql As String = ""
If (txtstudentID.Text = "") Then
sql = "insert into student(noun,firstname,"
sql &= "lastname,nickname,sex)values(@noun,@nm,@lnm,@nn,@sex)"
Else
sql = "update student set"
sql &= "noun=@noun,firstname=@nm"
sql &= "lastname=@lnm,nickname=@nn,sex=@sex"
sql &= "where studentID=" & txtstudentID.Text
End If
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("noun", txtnoun.Text)
_cmd.Parameters.AddWithValue("nm", txtfirstname.Text)
_cmd.Parameters.AddWithValue("lnm", txtlastname.Text)
_cmd.Parameters.AddWithValue("nn", txtnickname.Text)
_cmd.Parameters.AddWithValue("sex", txtsex.Text)
Dim affectedrow As Integer = _cmd.ExecuteNonQuery()----------------------------------------------------------errorตรงนี้ค่ะ
If (affectedrow < 1) Then
ToolStripStatusLabel1.Text = "เกิดข้อผิดพลาดในบันทึกข้อมูล!"
Else
ToolStripStatusLabel1.Text = "ข้อมูลถูกจัดเก็บแล้ว"
Dim name As String = txtfirstname.Text
'_ _อ่านข้อมูลเข้ามาใหม่
readdata()
filllistbox()
clearbindings()
'_ _ถ้าอยู่ที่แท็บ แสดงแก้ใขข้อมูล ให้ Binding ใหม่
If (TabControl1.SelectedIndex = 0) Then
bindings()
End If
'_ _ให้ทำไฮไลท์listbox รายการที่เราเพิ่มหรือแก้ไขใหม่
Dim idx As Integer = ListBox1.FindStringExact(name)
If (idx > -1) Then
ListBox1.SetSelected(idx, True)
End If
updatestatus()
End If
End Sub
Private Sub btndelete_click() Handles btndelete.Click
If (txtstudentID.Text = "") Then
Return
End If
If (MsgBox("ลบข้อมูลแถวนี้ ?", MsgBoxStyle.OkCancel) = MsgBoxResult.Cancel) Then
Return
End If
Dim sql As String
sql = "delete*from class"
sql &= "where firstname=@std"
_cmd = New OleDbCommand(sql, _conn)
Dim r As Integer = _cmd.ExecuteNonQuery()------------------------------------------------------------------ตรงนี้ด้วยค่ะ
If (r > 0) Then
ToolStripStatusLabel1.Text = "ข้อมูลถูกลบแล้ว"
End If
Dim idx0 As Integer = ListBox1.SelectedIndex
clearbindings()
readdata()
filllistbox()
bindings()
If (idx0 > 0) Then
ListBox1.SetSelected(idx0 - 1, True)
End If
'--ลบข้อมูลของนักศึกษาออกจากตาราง class ด้วย
sql = "delete *from class where firstname=@std"
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("std", txtfirstname.Text)
_cmd.ExecuteNonQuery()
End Sub
End Class