ผมกำลังทำฟอร์มยืมอุปกรณ์แล้วพอกดบันทึกมันจะต้องหักค่าจำนวนอุปกรณ์ที่อยู่ในคลังออกตามจำนวนที่ยืม แล้วจะต้องบวกจำนวนยืมตามที่ป้อนในฐานข้อมูลตามบรรทัดที่ 77-90 แต่มันฟ้องว่า Conversion from type 'DBNull' to type 'integer' is not valid. แล้วจำนวนอุปกรณ์ทั้งสองฟิลด์ไม่ยอมเพิ่มลดครับ แต่ผมลอง Debug แล้วมันกลับผ่านบ้างไม่ผ่านบ้าง อย่างงี้มีปัญหาตรงจุดไหนปล่าวครับ
Code (VB.NET)
Private Sub cmdSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSave.Click
If txtEmployeeID.Text = "" Then
MessageBox.Show("กรุณาระบุรหัสพนักงาน !!!", "ผลการตรวจสอบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtEmployeeID.Focus()
Exit Sub
End If
If lsvDeviceList.Items.Count = 0 Then
MessageBox.Show("กรุณาป้อนรายการยืมอุปกรณ์ !!!", "ผลการตรวจสอบ", MessageBoxButtons.OK, MessageBoxIcon.Information)
txtSN.Focus()
Exit Sub
End If
Dim sqlBorrow As String = ""
Dim comBorrow As OleDbCommand = New OleDbCommand
With Conn
If .State = ConnectionState.Open Then .Close()
.ConnectionString = strConn
.Open()
End With
Try
If MessageBox.Show("คุณต้องการบันทึกรายการยืมอุปกรณ์ ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes Then
AutoGenerateTranID()
sqlBorrow = "INSERT INTO Borrow (TransID,EmployeeID,IsReturnAll) "
sqlBorrow &= " VALUES('" & LastTransID & "',"
sqlBorrow &= "'" & txtEmployeeID.Text & "',"
sqlBorrow &= "0)"
With comBorrow
.CommandType = CommandType.Text
.CommandText = sqlBorrow
.Connection = Conn
.ExecuteNonQuery()
End With
Dim i As Integer = 0
Dim tmpSN As String = ""
Dim sqlDevice As String = ""
Dim tmpDeviceInShop As Integer = 0
Dim tmpDeviceInBorrow As Integer = 0
Dim tmpDeviceNum As Integer = 0
Dim tmpDateNum As Integer = 0
Dim tmpDateBorrow As Date
Dim tmpDateReturn As Date
tmpDateBorrow = Date.Now
For i = 0 To lsvDeviceList.Items.Count - 1
sqlBorrow = "INSERT INTO BorrowDetail(TransID,SN,DateBorrow,"
sqlBorrow &= " ReturnDate,IsReturn)"
sqlBorrow &= " VALUES('" & LastTransID & "',"
tmpSN = lsvDeviceList.Items(i).SubItems(0).Text
tmpDeviceNum = CInt(lsvDeviceList.Items(i).SubItems(2).Text)
tmpDateNum = CInt(lsvDeviceList.Items(i).SubItems(3).Text)
sqlBorrow &= "'" & tmpSN & "',"
sqlBorrow &= "'" & tmpDateBorrow & "',"
tmpDateReturn = tmpDateBorrow.AddDays(tmpDateNum)
sqlBorrow &= "'" & tmpDateReturn & "',"
sqlBorrow &= "'0')"
With comBorrow
.CommandText = sqlBorrow
.ExecuteNonQuery()
End With
sqlDevice = "SELECT SN,DeviceInShop,DeviceInBorrow FROM Device"
sqlDevice &= " WHERE (SN='" & tmpSN & "')"
da.SelectCommand.CommandText = sqlDevice
da.Fill(ds, "Device")
tmpDeviceInShop = CInt(ds.Tables("Device").Rows(0).Item("DeviceInShop"))
tmpDeviceInBorrow = CInt(ds.Tables("Device").Rows(0).Item("DeviceInBorrow"))
ds.Tables("Device").Clear()
sqlBorrow = "UPDATE Device"
sqlBorrow &= " SET DeviceInShop=" & tmpDeviceInShop - tmpDeviceNum & ","
sqlBorrow &= " DeviceInBorrow=" & tmpDeviceInBorrow + tmpDeviceNum
sqlBorrow &= " WHERE (SN='" & tmpSN & "')"
With comBorrow
.CommandText = sqlBorrow
.ExecuteNonQuery()
End With
Next
MessageBox.Show("บันทึกรายการยืมอุปกรณ์เรียบร้อยแล้ว !!!", "ผลการทำงาน", MessageBoxButtons.OK, MessageBoxIcon.Information)
ClearAllCustomerData()
ClearAllDeviceData()
lsvDeviceList.Items.Clear()
cboDepartment.SelectedIndex = 0
txtEmployeeID.Enabled = True
txtEmployeeID.Focus()
End If
Catch ErrProcess As Exception
MessageBox.Show("ไม่สามารถบันทึกรายการยืมอุปกรณ์ได้ เนื่องจาก " & ErrProcess.Message, "ข้อผิดพลาด", MessageBoxButtons.OK, MessageBoxIcon.Warning)
Exit Sub
End Try
End Sub
ฟังก์ชั่น CInt เป็นการแปลงค่าจาก String to Integer ถ้าเป็นค่าว่างหรือไม่มีค่า จะไม่สร้างแปลงได้จะเกิด Error อาจจะต้องใช้ If...Else มาใช้ตรวจสอบค่าว่างก่อนใช้ CInt
แก้ไข
Line 083 tmpDeviceInShop = CInt(ds.Tables("Device").Rows(0).Item("DeviceInShop"))
Line 084 tmpDeviceInBorrow = CInt(ds.Tables("Device").Rows(0).Item("DeviceInBorrow"))
ไปเป็น
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInShop")) then return
tmpDeviceInShop = CInt(ds.Tables("Device").Rows(0).Item("DeviceInShop"))
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInBorrow")) then return
tmpDeviceInBorrow = CInt(ds.Tables("Device").Rows(0).Item("DeviceInBorrow"))
หรือ
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInShop")) Then
tmpDeviceInShop = 0
Else
tmpDeviceInShop = CInt(ds.Tables("Device").Rows(0).Item("DeviceInShop"))
End If
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInBorrow")) Then
tmpDeviceInBorrow = 0
Else
tmpDeviceInBorrow = CInt(ds.Tables("Device").Rows(0).Item("DeviceInBorrow"))
End If
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInShop")) Then
tmpDeviceInShop = 0
Else
tmpDeviceInShop = CInt(ds.Tables("Device").Rows(0).Item("DeviceInShop"))
End If
If IsDBNull(ds.Tables("Device").Rows(0).Item("DeviceInBorrow")) Then
tmpDeviceInBorrow = 0
Else
tmpDeviceInBorrow = CInt(ds.Tables("Device").Rows(0).Item("DeviceInBorrow"))
End If