Option Explicit On
Option Strict On
Imports System.Data
Imports System.Data.OleDb
Imports System.Text
Public Class frmDevice
Dim Conn As OleDbConnection
Dim com As OleDbCommand 'กำหนดคำสั่งsqlเพื่อส่งไปประมวลผล
Dim da As OleDbDataAdapter
Dim dr As OleDbDataReader
Dim Active As Boolean 'สถานะการทำงาน พิจารณาว่าเป็นการบันทึก หรือ แก้ไข
Dim tr As OleDbTransaction
Private Sub ClearAllData()
Dim myCtl As Control 'myCtl ตัวแปรออบเจ็กต์คอนโทรล
For Each myCtl In grbDataDevice.Controls
If myCtl.GetType.Name Is GetType(System.Windows.Forms.TextBox).Name Then myCtl.Text = ""
If myCtl.GetType.Name Is GetType(System.Windows.Forms.ComboBox).Name Then myCtl.Text = ""
Next
txtDeviceNo.Text = "####"
End Sub
Private Sub LockTrue() 'กำหนดสถานะการทำงานของคอนโทรล(ให้ใช้งานได้)
Dim myCtl As Control
For Each myCtl In grbDataDevice.Controls
If myCtl.GetType.Name Is GetType(System.Windows.Forms.TextBox).Name Then
If myCtl.Name <> "txtDeviceID" Then 'ไม่เท่ากับtxtDeviceID
myCtl.Enabled = True
End If
End If
If myCtl.GetType.Name Is GetType(System.Windows.Forms.ComboBox).Name Then myCtl.Enabled = True
'If myCtl.GetType.Name Is GetType(System.Windows.Forms.DateTimePicker).Name Then myCtl.Enabled = True
Next
End Sub
Private Sub LockFalse() 'กำหนดสถานะการทำงานของคอนโทรล(ไม่ให้ใช้งาน)
Dim myCtl As Control
For Each myCtl In grbDataDevice.Controls
If myCtl.GetType.Name Is GetType(System.Windows.Forms.TextBox).Name Then myCtl.Enabled = False
If myCtl.GetType.Name Is GetType(System.Windows.Forms.ComboBox).Name Then myCtl.Enabled = False
'If myCtl.GetType.Name Is GetType(System.Windows.Forms.DateTimePicker).Name Then myCtl.Enabled = False
Next
End Sub
'โหลดข้อมูล
Private Sub frmDevice_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strConn As String
strConn = DBConnString.strConn
Conn = New OleDbConnection()
With conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn 'เอาข้อความที่เก็บใน strConn ไปติดต่อ
.Open() 'เชื่อมต่อกับฐานข้อมูล
End With
Call LoadComboLink()
With cboSearch
.Items.Add("ปี")
.Items.Add("ข้อมูลอุปกรณ์")
.SelectedIndex = 0
End With
Call ShowData(False)
Call FormatdgvDataList()
cmdAdd.Enabled = True
cmdEdit.Enabled = False
cmdSave.Enabled = True
cmdDelete.Enabled = False
cmdExits.Enabled = True
Call LockTrue()
Active = False
Call ClearAllData()
txtDataDevice.Focus()
End Sub
Private Sub LoadComboLink()
da = New OleDbDataAdapter
com = New OleDbCommand
End Sub
Private Sub ShowData(ByVal bShow As Boolean)
Dim tSQL As String 'ตัวแปรเก็บชุดคำสั่งsql
Dim tFed As String = ""
Dim tWhe As String = ""
Dim dr As OleDbDataReader
tSQL = "SELECT * FROM DEVICE " 'ดึงข้อมูลจากตารางDEVICEทั้งหมด
If bShow And txtSearch.Text.Trim() <> "" Then
Select Case cboSearch.SelectedIndex
Case 0 'ปี
tSQL = tSQL & " WHERE (DEVICE_YEAR LIKE @DEVICE_YEAR)"
tWhe = txtSearch.Text.Trim()
tFed = "DEVIVE_YEAR"
Case 1 'รหัสอุปกรณ์
tSQL = tSQL & " WHERE (DEVICE_NAME LIKE @DEVICE_NAME)"
tWhe = txtSearch.Text.Trim()
tFed = "DEVICE_NAME"
End Select
End If
tSQL = tSQL & " ORDER BY ID_DEVICE"
Dim dt As DataTable
com = New OleDbCommand()
With com
.CommandText = tSQL 'ใช้ชุดคำสั่ง tSQL
.CommandType = CommandType.Text
.Connection = conn
.Parameters.Clear()
If bShow Then
If tWhe <> "" Then
.Parameters.AddWithValue(tFed, OleDbType.VarChar).Value = "%" & tWhe & "%"
End If
End If
dr = .ExecuteReader 'รันชุดคำสั่ง sql ที่อยู่ในตัวแปร dr
If dr.HasRows Then 'ถ้ามีรายการข้อมูล
dt = New DataTable() 'ในดาต้าเทเบิล
dt.Load(dr) 'ให้โหลดข้อมูลมา
dgvDataList.DataSource = dt 'แสดงข้อมูลออกมา
Else 'ถ้าไม่มี
dgvDataList.DataSource = Nothing 'ล้างข้อมูล
End If
End With
dr.Close() 'ปิดการใช้งานออบเจ็กต์ dr
End Sub
'กดปุ่มบันทึก
Private Sub AddData()
If MessageBox.Show("คุณต้องการเพิ่ม" & Me.Text & "ใหม่ ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
tr = Conn.BeginTransaction()
Try
da = New OleDbDataAdapter
da.InsertCommand.CommandText = ("INSERT INTO DEVICE(DEVICE_NO,DEVICE_NAME,PRICE_PER_MONTH,DEVICE_YEAR)")
da.InsertCommand.CommandText = (" VALUES (@DEVICE_NO,@DEVICE_NAME,@PRICE_PER_MONTH,@DEVICE_YEAR)")
Dim sqlAdd As String
sqlAdd = da.ToString()
With com
.CommandText = sqlAdd
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.AddWithValue("@DEVICE_NO", OleDbType.Numeric).Value = txtDeviceNo.Text.Trim() 'ตัวแปร@DEVICE_NO กำหหนดจากtxtDeviceID
.Parameters.AddWithValue("@DEVICE_NAME", OleDbType.VarChar).Value = txtDataDevice.Text.Trim()
.Parameters.AddWithValue("@PRICE_PER_MONTH", OleDbType.Numeric).Value = txtPrice.Text.Trim()
.Parameters.AddWithValue("@DEVICE_YEAR", OleDbType.Numeric).Value = cboYear.Text.Trim()
Dim result As Integer = com.ExecuteNonQuery()
End With
tr.Commit() 'ให้ทรานเซกซันสมบูรณ์
MessageBox.Show("เพิ่ม" & Me.Text & "ใหม่ เรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ShowData(False)
Call FormatdgvDataList()
cmdAdd.Enabled = False
cmdEdit.Enabled = False
cmdSave.Enabled = True
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = False
Call LockTrue()
Active = False
Call ClearAllData()
Catch ex As Exception 'ถ้ามีข้อผิดพลาด'
MessageBox.Show("เกิดความผิดพลาด !!!" & ex.Message, "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
tr.Rollback() 'ยกเลิกการทำ ทรานเซกซัน
End Try
End If
End Sub
Private Sub EditData()
If MessageBox.Show("คุณต้องการบันทึก" & Me.Text & " ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
tr = Conn.BeginTransaction()
Try
' @DEVICE_NO,@DEVICE_NAME,@PRICE_PER_MONTH,@DEVICE_YEAR
da = New OleDbDataAdapter
da.SelectCommand = New OleDbCommand("UPDATE DEVICE")
da.SelectCommand = New OleDbCommand(" SET DEVICE_NO=@DEVICE_NO")
da.SelectCommand = New OleDbCommand(" ,DEVICE_NAME=@DEVICE_NAME")
da.SelectCommand = New OleDbCommand(" ,PRICE_PER_MONTH=@PRICE_PER_MONTH")
da.SelectCommand = New OleDbCommand(" ,DEVICE_YEAR=@DEVICE_YEAR")
da.SelectCommand = New OleDbCommand(" WHERE (DEVICE_ID=@DEVICE_ID)")
Dim sqlEdit As String
sqlEdit = da.ToString()
With com
.CommandText = sqlEdit
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.AddWithValue("@DEVICE_NO", OleDbType.Numeric).Value = txtDeviceNo.Text.Trim()
.Parameters.AddWithValue("@DEVICE_NAME", OleDbType.VarChar).Value = txtDataDevice.Text.Trim()
.Parameters.AddWithValue("@PRICE_PER_MONTH", OleDbType.VarChar).Value = txtPrice.Text.Trim()
.Parameters.AddWithValue("@DEVICE_YEAR", OleDbType.VarChar).Value = cboYear.Text.Trim()
Dim result As Integer = com.ExecuteNonQuery()
If result = 0 Then
tr.Rollback()
MessageBox.Show("เกิดข้อผิดพลาด !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtDataDevice.SelectAll()
Else
tr.Commit()
MessageBox.Show("แก้ไข" & Me.Text & " เรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ClearAllData()
Call ShowData(False)
Call FormatdgvDataList()
Call LockFalse()
cmdAdd.Enabled = True
cmdEdit.Enabled = True
cmdSave.Enabled = False
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = True
End If
End With
Catch ex As Exception
tr.Rollback()
MessageBox.Show("เกิดข้อผิดพลาด เนื่องจาก " & ex.Message, "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End If
txtDataDevice.Focus()
End Sub
Private Sub FormatdgvDataList()
With dgvDataList
If .RowCount > 0 Then
.Columns(0).HeaderText = "ลำดับที่"
.Columns(1).HeaderText = "รหัสอุปกรณ์"
.Columns(2).HeaderText = "ข้อมูลอุปกรณ์"
.Columns(3).HeaderText = "ราคาค่าเช่า/เดือน"
.Columns(4).HeaderText = "ปี"
.Columns(0).Width = 80
.Columns(1).Width = 100
.Columns(2).Width = 250
.Columns(3).Width = 150
.Columns(4).Width = 80
End If
End With
End Sub
'เลือกข้อมูลในดาต้ากิตมาแก้ไข
Private Sub dgvDataList_CellMouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvDataList.CellMouseUp
If e.RowIndex = -1 Then Exit Sub
Dim tstatus As String = ""
With dgvDataList
txtPrice.Text = .Rows.Item(e.RowIndex).Cells(0).Value.ToString()
txtDeviceNo.Text = .Rows.Item(e.RowIndex).Cells(1).Value.ToString()
txtDataDevice.Text = .Rows.Item(e.RowIndex).Cells(2).Value.ToString()
txtPrice.Text = .Rows.Item(e.RowIndex).Cells(3).Value.ToString()
cboYear.Text = .Rows.Item(e.RowIndex).Cells(4).Value.ToString()
Call LockFalse()
Active = True
cmdAdd.Enabled = True
cmdEdit.Enabled = True
cmdSave.Enabled = False
cmdDelete.Enabled = True
cmdExits.Enabled = True
cmdSearch.Enabled = True
txtDataDevice.Focus()
txtDataDevice.SelectAll()
End With
End Sub
Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
'Dim dateIn As Date = dptPet_Age.Value
If txtDataDevice.Text.Trim = "" Or txtPrice.Text.Trim = "" Then
MessageBox.Show("กรุณากรอกข้อมูลที่มี * ให้ครบก่อน !!!", "ผลการตรวจสอบ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
If Active = False Then 'เพิ่มข้อมูล ต้องทำการ Insert ข้อมูลเข้าใจฐาน
Call AddData()
Else 'Update เป็นการแก้ไขข้อมูล
Call EditData()
End If
End Sub
Private Sub cmdSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSearch.Click
Call ShowData(True)
cmdAdd.Enabled = True
cmdEdit.Enabled = True
cmdSave.Enabled = False
cmdDelete.Enabled = True
cmdExits.Enabled = True
cmdSearch.Enabled = True
Call LockFalse()
End Sub
Private Sub cmdEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdEdit.Click
cmdAdd.Enabled = False
cmdEdit.Enabled = False
cmdSave.Enabled = True
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = False
Call LockTrue()
Active = True
End Sub
Private Sub cmdAdd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdAdd.Click
cmdAdd.Enabled = False
cmdEdit.Enabled = False
cmdSave.Enabled = True
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = True
Call LockTrue()
Active = False
Call ClearAllData()
txtDataDevice.Focus()
End Sub
Private Sub cmdDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDelete.Click
If MessageBox.Show("คุณต้องการลบ" & Me.Text & " ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
tr = Conn.BeginTransaction()
Try
da = New OleDbDataAdapter()
da.InsertCommand = New OleDbCommand("DELETE FROM DEVICE")
da.InsertCommand = New OleDbCommand(" WHERE (DEVICE_NO=@DEVICE_NO)")
Dim sqlEdit As String
sqlEdit = da.ToString()
With com
.CommandText = sqlEdit
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.AddWithValue("@DEVICE_NO", OleDbType.Numeric).Value = txtDeviceNo.Text.Trim()
Dim result As Integer = com.ExecuteNonQuery()
If result = 0 Then
tr.Rollback()
MessageBox.Show("รหัสที่คุณป้อน ไม่ถูกต้อง !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtDataDevice.SelectAll()
Else
tr.Commit()
MessageBox.Show("ลบ" & Me.Text & " เรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ClearAllData()
Call ShowData(False)
Call FormatdgvDataList()
cmdAdd.Enabled = True
cmdEdit.Enabled = True
cmdSave.Enabled = False
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = True
Call LockFalse()
End If
End With
Catch ex As Exception
tr.Rollback()
MessageBox.Show("เกิดข้อผิดพลาด เนื่องจาก " & ex.Message, "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End If
txtDataDevice.Focus()
End Sub
'ปุมออก
Private Sub cmdExits_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdExits.Click
If MessageBox.Show("คุณต้องการจบการทำงาน ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
Me.Close()
frmMain.Show()
End If
End Sub
Private Sub txtPrice_keyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPrice.KeyPress
Select Case Asc(e.KeyChar)
Case 47 To 58
e.Handled = False
Case 8, 13, 46
e.Handled = False
Case Else
e.Handled = True
End Select
End Sub
End Class
Private Sub cmdDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDelete.Click
If MessageBox.Show("คุณต้องการลบ" & Me.Text & " ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
tr = Conn.BeginTransaction()
Try
da = New OleDbDataAdapter()
da.InsertCommand = New OleDbCommand("DELETE FROM DEVICE")
da.InsertCommand = New OleDbCommand(" WHERE (DEVICE_NO=@DEVICE_NO)")
Dim sqlEdit As String
sqlEdit = da.ToString()
With com
.CommandText = sqlEdit
.CommandType = CommandType.Text
.Connection = Conn
.Transaction = tr
.Parameters.Clear()
.Parameters.AddWithValue("@DEVICE_NO", OleDbType.Numeric).Value = txtDeviceNo.Text.Trim()
Dim result As Integer = com.ExecuteNonQuery()
If result = 0 Then
tr.Rollback()
MessageBox.Show("รหัสที่คุณป้อน ไม่ถูกต้อง !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtDataDevice.SelectAll()
Else
tr.Commit()
MessageBox.Show("ลบ" & Me.Text & " เรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
Call ClearAllData()
Call ShowData(False)
Call FormatdgvDataList()
cmdAdd.Enabled = True
cmdEdit.Enabled = True
cmdSave.Enabled = False
cmdDelete.Enabled = False
cmdExits.Enabled = True
cmdSearch.Enabled = True
Call LockFalse()
End If
End With
Catch ex As Exception
tr.Rollback()
MessageBox.Show("เกิดข้อผิดพลาด เนื่องจาก " & ex.Message, "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
End Try
End If
txtDataDevice.Focus()
End Sub
ตรงนี้ขึ้นอะไรบ้างครับ
Date :
2010-08-26 17:59:42
By :
webmaster
No. 2
Guest
เวลากดบันทึกแล้ว แจ้งเตือนว่า "เกิดความผิดพลาด !!!Object reference not set to an instance of an object." ค่ะ