 |
|
No value given for one or more required parameters ช่วยผมทีครับ ทำไมผม ลบข้อมูล และ แก้ไขข้อมูลใน Acc2007 ไม่ได้ |
|
 |
|
|
 |
 |
|
Code (VB.NET)
Imports System.Data
Imports System.Data.OleDb
Public Class FormCustomers
Private _dataset As DataSet
Private _conn As OleDbConnection
Private _cmd As OleDbCommand
Private _rowCount As Integer = 0
Private _position As Integer = 0
ในฐานข้อมูลกำหนดดังนี้ครับ
Table name > Customers
Field > CustomerID : ATnumber, CustomerName : Text , CustomerAddress : Text
Code ตรงปุ่มนะครับ
Private Sub BtnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSave.Click
If (TbxName.Text = "" Or TbxAdrs.Text = "") Then
MsgBox(" กรุณาใส่ข้อมูลให้ครบ ")
Return
End If
Dim sql As String = ""
If (TbxID.Text = "") Then
sql = "INSERT INTO Customers("
sql &= "CustomerName, CustomerAddress)"
sql &= "VALUES(@nm, @adrs)"
Else
sql = "UPDATE Customers SET"
sql &= "CustomerName = @nm, CustomerAddress = @adrs "
sql &= "WHERE CustomerID = " & TbxID.Text
End If
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("nm", TbxName.Text)
_cmd.Parameters.AddWithValue("adrs", TbxAdrs.Text)
Dim affectedRow As Integer = _cmd.ExecuteNonQuery()
If (affectedRow < 1) Then
ToolStripStatusLabel1.Text = "เกิดข้อผิดพลาดในการบันทึกข้อมูล !"
Else
ToolStripStatusLabel1.Text = "ข้อมูลถูกจัดเก็บแล้ว"
Dim name As String = TbxName.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(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDelete.Click
If (TbxID.Text = "") Then
Return
End If
If (MsgBox("คุณต้องการลบข้อมูลใช่หรือไม่ ?", MsgBoxStyle.OkCancel) = _
MsgBoxResult.Cancel) Then
Return
End If
Dim sql As String
sql = " DELETE * FROM Orders "
sql &= "WHERE CustomerName = @cust"
_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
' ลบข้อมูลการสั่งซื้อในตาราง Orders
sql = "DELETE * FROM Orders WHERE CustomerName = @cust"
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("cust", TbxName.Text)
_cmd.ExecuteNonQuery()
End Sub
End Class
เวลากด ปุ่ม ลบข้อมูลมันฟ้องว่า No value given for one or more required parameters.
เวลากด ปุ่ม บันทึก มันฟ้องว่า Syntax error in UPDATE statement.
ขอบคุณทุกท่านครับที่ช่วยเหลือ

Tag : .NET, Ms Access, VBScript, Crystal Report, Win (Windows App), VB.NET
|
|
 |
 |
 |
 |
Date :
2010-09-13 17:33:22 |
By :
นศ.ผู้ศึกษา VB |
View :
1995 |
Reply :
7 |
|
 |
 |
 |
 |
|
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ดูโค้ดแล้วก็แปลก
ของปุ่ม delete จะเห็นว่ามีการรัน Execute 2 รอบ
รอบแรก รันโดยไม่ได้ส่งค่าให้ parameter @cust ที่มัน error ก็ถูกแล้ว
074. sql = " DELETE * FROM Orders "
075. sql &= "WHERE CustomerName = @cust"
076. _cmd = New OleDbCommand(sql, _conn)
077.
078. Dim r As Integer = _cmd.ExecuteNonQuery()
รอบสอง ไม่ได้ทำงานเพราะ error จาก รอบแรก ทำให้หลุดไปก่อน แต่เป็นการทำงานที่ถูกต้อง
093. sql = "DELETE * FROM Orders WHERE CustomerName = @cust"
094. _cmd = New OleDbCommand(sql, _conn)
095. _cmd.Parameters.AddWithValue("cust", TbxName.Text)
096. _cmd.ExecuteNonQuery()
** คำสั่ง DELETE มันใช้อย่างนี้ไม่ใช่เหรอ DELETE FROM ORDERS; ไม่ต้องใส่ DELETE * ควรใช้ให้เป็นมาตรฐานสากลเนาะ เวลาเปลี่ยนฐานข้อมูลจะได้ไม่เกิดปัญหา (ก็ไม่รู้ว่า Access2007 มันใช้ได้จริงเปล่าเหมือนกัน)
ของปุ่ม save
028. sql = "UPDATE Customers SET " ลองเคาะให้มีเว้นซัก 1 ช่องว่างดูครับ ผมว่ามัน syntax error เพราะมันติดกันน่ะ
029. sql &= "CustomerName = @nm, CustomerAddress = @adrs "
030. sql &= "WHERE CustomerID = " & TbxID.Text
|
ประวัติการแก้ไข 2010-09-13 18:15:12
 |
 |
 |
 |
Date :
2010-09-13 18:14:19 |
By :
salapao_codeman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ คุณ salapao_codeman ด้วยนะครับ สำหรับปุ่ม save
แต่ ปุ่ม Delete ผมได้ทำการพิมพ์ใหม่ทั้งหมด และแก้ไขตรงที่คุณบอกแต่ก็ยังเป็นเหมือนเดิมครับ
No value given for one or more required parameters.
|
 |
 |
 |
 |
Date :
2010-09-13 20:22:09 |
By :
นศ.ผู้ศึกษาVB |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ของปุ่ม delete ลองอย่างนี้ดูครับ เพิ่มบรรทัดเอาไว้ตรวจสอบดูด้วย แล้วยังไงให้ลองไปพิพม์ query command ดูจริงๆ ที่ตัวไฟล์ฐานข้อมูลด้วยนะครับ ว่ามันใช้ได้จริง หรือถ้าผิดถูกตรงไหนก็จะได้มาปรับเปลี่ยนที่โค้ดได้ครับ
Code (VB.NET)
Private Sub BtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDelete.Click
If (TbxID.Text = "") Then
Return
End If
If (MsgBox("คุณต้องการลบข้อมูลใช่หรือไม่ ?", MsgBoxStyle.OkCancel) = _
MsgBoxResult.Cancel) Then
Return
End If
messagebox.show(TbxName.text&" " & TbxID.text) <- อันนี้ให้ลองดุค่าว่าถูกต้องไม๊
Dim sql As String
sql = "DELETE FROM Orders WHERE CustomerName = @cust" ลองเปลี่ยนตรงนี้เป็น รหัสลูกค้า ดูครับน่าจะง่ายกว่า
messagebox.show(sql.ToString()) <- เหมือนกันเอาไว้ตรวจสอบดูว่าถูกต้องไม๊
_cmd = New OleDbCommand(sql, _conn)
_cmd.Parameters.AddWithValue("cust", TbxName.Text) <-เปลี่ยนข้างบนแล้วอย่าลืมเปลี่ยนตรงนี้ด้วย
_cmd.ExecuteNonQuery()
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
End Sub
|
 |
 |
 |
 |
Date :
2010-09-13 22:59:39 |
By :
salapao_codeman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
vb 2008 access 2007
มีปัญหาตรงที่ .ExecuteNonQuery() ฟ้องว่า no value given for one or more required parameters. ตรงปุ๋ม Save
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
Dim sqlAdd As String
Dim sqlEdit As String
Select Case btnChk
Case "Add"
If (txtName.Text = "") Or (txtAddress.Text = "") Or (txtTel.Text = "") Or (txtFax.Text = "") Then
MsgBox("โปรดป้อนข้อมูลให้ครอบด้วยครับ")
txtName.Focus()
Exit Sub
End If
sqlAdd = "Insert Into tblCustomer(CustName,Address,Tel,Fax)"
sqlAdd &= "VALUES(" & txtName.Text & ","
sqlAdd &= "" & txtAddress.Text & ","
sqlAdd &= "" & txtTel.Text & ","
sqlAdd &= "" & txtFax.Text & ")"
With comAdd
.CommandType = CommandType.Text
.CommandText = sqlAdd
.Connection = Conn
.ExecuteNonQuery()
End With
MsgBox("บันทึกข้อมูลเรียบร้อยแล้วครับ")
ShowAllEmployees()
Case "Update"
sqlEdit = "UPDATE tblCustomer"
sqlEdit &= "SET CustName=" & txtName.Text & ","
sqlEdit &= "Address=" & txtAddress.Text & ","
sqlEdit &= "Tel=" & txtTel.Text & ","
sqlEdit &= "Fax=" & txtFax.Text & ","
sqlEdit &= "WHERE(CustID=" & CInt(txtID.Text) & ")"
With comAdd
.CommandType = CommandType.Text
.CommandText = sqlEdit
.Connection = Conn
.ExecuteNonQuery()
End With
MsgBox("แก้ไขข้อมูลเรียบร้อย")
ShowAllEmployees()
Case Else
MsgBox("ไม่มีการทำงาน")
End Select
btnInsert.Enabled = True
btnUpdate.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = True
btnDelete.Enabled = True
End Sub
|
 |
 |
 |
 |
Date :
2011-07-15 14:17:38 |
By :
Akera |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
vb 2008 access 2007
มีปัญหาตรงที่ .ExecuteNonQuery() ฟ้องว่า no value given for one or more required parameters. ตรงปุ๋ม Save
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
Dim sqlAdd As String
Dim sqlEdit As String
Select Case btnChk
Case "Add"
If (txtName.Text = "") Or (txtAddress.Text = "") Or (txtTel.Text = "") Or (txtFax.Text = "") Then
MsgBox("โปรดป้อนข้อมูลให้ครอบด้วยครับ")
txtName.Focus()
Exit Sub
End If
sqlAdd = "Insert Into tblCustomer(CustName,Address,Tel,Fax)"
sqlAdd &= "VALUES(" & txtName.Text & ","
sqlAdd &= "" & txtAddress.Text & ","
sqlAdd &= "" & txtTel.Text & ","
sqlAdd &= "" & txtFax.Text & ")"
With comAdd
.CommandType = CommandType.Text
.CommandText = sqlAdd
.Connection = Conn
.ExecuteNonQuery() ตรงนี้ครับที่มีปัญหา ช่วยที่ครับ มันฟ้องว่า no value given for one or more required parameters.
End With
MsgBox("บันทึกข้อมูลเรียบร้อยแล้วครับ")
ShowAllEmployees()
Case "Update"
sqlEdit = "UPDATE tblCustomer"
sqlEdit &= "SET CustName=" & txtName.Text & ","
sqlEdit &= "Address=" & txtAddress.Text & ","
sqlEdit &= "Tel=" & txtTel.Text & ","
sqlEdit &= "Fax=" & txtFax.Text & ","
sqlEdit &= "WHERE(CustID=" & CInt(txtID.Text) & ")"
With comAdd
.CommandType = CommandType.Text
.CommandText = sqlEdit
.Connection = Conn
.ExecuteNonQuery()
End With
MsgBox("แก้ไขข้อมูลเรียบร้อย")
ShowAllEmployees()
Case Else
MsgBox("ไม่มีการทำงาน")
End Select
btnInsert.Enabled = True
btnUpdate.Enabled = True
btnSave.Enabled = False
btnCancel.Enabled = True
btnDelete.Enabled = True
End Sub
|
 |
 |
 |
 |
Date :
2011-07-15 14:22:30 |
By :
Akera |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ น่ะครับที่ช่วย
|
 |
 |
 |
 |
Date :
2011-07-15 14:24:44 |
By :
Akera |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|