2013-10-01 2 views
-1

MS Access 데이터베이스를 사용하여 레코드를 업데이트하려고하는데 모든 레코드가 동일한 값으로 업데이트되고 있습니다 .. 동일한 수정 작업을 SQL Server에서 비트 수정 및이 코딩 작업과 함께 시도했습니다. SQL Server와 완벽하게 ... MS Access의 문제점은 무엇입니까? 여기에 은 내 코드입니다.MS Access 테이블의 모든 행에 동일한 값을 사용하여 레코드 업데이트하기

Try 

con = New OleDbConnection(cs) 
con.Open() 

Dim cb As String = "update ExtraServices set [Item]=?, [Quantity]=?,[UnitPrice]=?, [TotalPrice]=? where [HostelerID]=? and [Servicedate]=?" 
Dim cmd As New OleDb.OleDbCommand(cb, con) 
cmd.Parameters.Add(New OleDbParameter("@item", OleDbType.VarChar, 150, "Item")) 
cmd.Parameters.Add(New OleDbParameter("@quantity", OleDbType.Integer, 6, "Quantity")) 
cmd.Parameters.Add(New OleDbParameter("@unitprice", OleDbType.Integer, 6, "UnitPrice")) 
cmd.Parameters.Add(New OleDbParameter("@total", OleDbType.Integer, 6, "TotalPrice")) 
cmd.Parameters.Add(New OleDbParameter("@hostelerID", OleDbType.VarChar, 20, "HostelerID")) 
cmd.Parameters.Add(New OleDbParameter("@ServiceDate", OleDbType.Date, 30, "ServiceDate")) 
' Prepare command for repeated execution 
cmd.Prepare() 
' Data to be inserted 
For Each row As DataGridViewRow In DataGridView1.Rows 
    If Not row.IsNewRow Then 
     cmd.Parameters("@item").Value = row.Cells(0).Value 
     cmd.Parameters("@quantity").Value = row.Cells(1).Value 
     cmd.Parameters("@unitprice").Value = row.Cells(2).Value 
     cmd.Parameters("@total").Value = row.Cells(3).Value 
     cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text 
     cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text 
     cmd.ExecuteNonQuery() 
    End If 
Next 
con.Close() 
MessageBox.Show("Successfully updated", "Entry", MessageBoxButtons.OK, MessageBoxIcon.Information) 
btnUpdate_record.Enabled = False 
Catch ex As Exception 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 
End Try 

답변

1

다른 @ 스티브 잘입니다. 모든 루프에서는, 수량, 단가 및 TotalPrice는이 마지막 값이 항목에 대한했다 무엇이든, 당신이 반복 완료 이렇게하면 다음에 하나 개의 반복에서 변경되지 않습니다

WHERE HostelerID = cmbHostelerID.Text AND ServiceDate = dtpServiceDate.Text 

모든 레코드를 업데이트하기 위해 데이터베이스를 말해 해당 기준과 일치하는 모든 레코드에 적용됩니다.

ExtraServices 테이블에 기본 키가 있습니까? 그래서, 그것은 당신의 업데이트 SQL에 사용해야합니다.

MSSQL (비트 수정 포함)에서 작동하는 경우 수정 사항은 무엇입니까?

이것이 도움이되지 않는 경우 (해결책 아님) 자세한 정보를 제공하십시오. 샘플 데이터가 도움이됩니다. 일어날 것으로 예상되는 예. 너 여기서 뭘하려는거야. 코드에서 알 수는 없지만 잘못된 것이라고 말할 수 있습니다. 우리가 당신을 도울 수 있도록 도와주세요.

2

WHERE 절에 사용되는 매개 변수는 항상 같습니다. 그래서 당신은 항상 같은 기록을 업데이트 쿼리 (당신은 그리드에서 마지막 행의 값과 동일 레코드를 업데이트 루프 종료)

 cmd.Parameters("@HostelerID").Value = cmbHostelerID.Text ' <- same for every row 
    cmd.Parameters("@ServiceDate").Value = dtpServiceDate.Text 
+0

하지만 다른 필드를 업데이트 중입니다 ...이 쿼리는 SQL 수정과 SQL 서버에서 완벽하게 작동했습니다. MS 액세스에 문제가 있습니까? –

+0

어떻게이 문제를 해결할 수 있습니까? DataGridview를 사용하여 레코드를 업데이트 중입니다. –

+0

어떻게 datagridview의 업데이트 된 값으로 다른 필드의 datagridview 값을 업데이트 할 수 있습니까? –

관련 문제