Я работаю над этой проблемой целую вечность! У меня есть MSAccess 2007 db, и я использую Visual Studio 2010 и Visual Basic для записи приложения, которое читает и записывает из базы данных. Чтение работает очень хорошо, но когда я пытаюсь написать обновленный пароль обратно в базу данных, он терпит неудачу. Первоначально у меня была простая «Синтаксическая ошибка», которая не была такой полезной, но с небольшим количеством исследований я заметил, что базы данных доступа, похоже, имеют проблемы с столбцами, называемыми паролями. Я переименовал, что и попробовал еще раз, теперь я получаю эту ошибку, когдаОшибка синтаксиса в операторе обновления для базы данных Access (с использованием OleDbCommandBuilder)
da.Update (DS, "all_users")
команды.
полное сообщение об ошибке от VS является: Syntax error (missing operator) in query expression '((ID = ?) AND ((? = 1 AND Forename IS NULL) OR (Forename = ?)) AND ((? = 1 AND Surname IS NULL) OR (Surname = ?)) AND ((? = 1 AND User_Level IS NULL) OR (User_Level = ?)) AND ((? = 1 AND Last Logon IS NULL) OR (Last Logon = ?)) AND ((? = 1 AND Allow IS NU'.
Мой код следующим образом:
Private Sub btnSave_Click(snder as System.Object, e As System.EventArgs) Handles btnSave.Click
Dim Con As New OleDb.OleDbConnection
Dim ConString As String
Dim ds As New DataSet
Dim da As OleDb.OleDbDataAdapter
Dim Sql As String = "SELECT * FROM tblUsers"
'
ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
Application.StartupPath & "\Data\Users.accdb;Jet OLEDB:Database Password=---------;"
Con.ConnectionString = ConString
Con.Open()
da = New OleDb.OleDbDataAdapter(Sql, Con)
da.Fill(ds, "All_Users")
'Now loop through the records until you find the one for this user
For i = 0 To ds.Tables("All_Users").Rows.Count - 1
If ds.Tables("All_Users").Rows(i).Item(0).ToString = CurrentUser.ID Then
ds.Tables("All_Users").Rows(i).Item(6) = txtConfirmPassword.Text
End If
Next
CurrentUser.Password = txtConfirmPassword.Text
'
Dim cb As New OleDb.OleDbCommandBuilder(da)
da.Update(ds, "All_Users")
'
Con.Close()
MessageBox.Show("Your password has been sucessfully updated.", "Success", _
MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Me.Close()
Это кажется у вас есть поле с именем * Last Logon *. Переименуйте это поле в * Last_Logon * (чтобы устранить пробел) и повторите попытку кода. – HansUp