Martijn Kok
Я думаю, что db7uk прав, ошибка находится в поле даты. Строка SQLQuery должна выглядеть следующим образом:
SQLQuery = "UPDATE tblBookBorrowed SET status = '" & shar & "' WHERE #" & String.Format("{0:d}", dd) & "# > datereturn AND penaltyyesno = 'True'"
С помощью строки.Формат("{0:d}", dd) вы преобразуете дату в короткую дату на основе ваших местных настроек страны и языка. Я проверил это на своем компьютере nl-NL, он работал, но я ожидал, что мне придется использовать en-US (07\24\2012 вместо голландского 24-07-2012). Когда у вас есть другие локации, я думаю, это может сработать. Использование парамеров решило бы эту проблему.
Вопрос о форматировании параметров в команде может быть лучше решен с помощью параметров. Ваш код будет выглядеть примерно так:
Dim dd = Date.Today.Date
Dim shar As String = "Overdue"
Connect()
SQLQuery = "UPDATE tblBookBorrowed SET status = ? WHERE ? > datereturn AND penaltyyesno = ?"
cmd = New OleDb.OleDbCommand(SQLQuery, conn)
'Parameters are defined based on their sequential order in the SQL statement
cmd.Parameters.Add("Status", OleDb.OleDbType.VarChar, 50) 'The last parameter is the size, adjust to actual size
cmd.Parameters.Add("Returndate", OleDb.OleDbType.Date)
cmd.Parameters.Add("Penalty", OleDb.OleDbType.Boolean)
cmd.Parameters("Status").Value = shar
cmd.Parameters("Returndate").Value = dd
cmd.Parameters("Penalty").Value = True
cmd.ExecuteNonQuery()
conn.Dispose()
conn.Close()
cmd = Nothing
Я надеюсь, что это полезно