TinTin19 Ответов: 4

Несоответствие типа данных в ошибке выражения критерия. МС VB.net доступ


Что не так в моем коде? :( это дает ошибку. Несоответствие типов данных в выражении критериев.

Dim dd = Date.Today.Date
       Dim shar As String = "Overdue"
       Connect()
       SQLQuery = "UPDATE  tblBookBorrowed SET status = '" & shar & "' WHERE " & dd & " > datereturn AND penaltyyesno = 'True'"
       cmd = New OleDb.OleDbCommand(SQLQuery, conn)
       cmd.ExecuteNonQuery()

       conn.Dispose()
       conn.Close()
       cmd = Nothing

[no name]

Я бы предположил, что это просто было сказано. У вас есть несоответствие типов данных.

db7uk

Я думаю, что это как-то связано с датой (dd). Попробуйте привести его или отформатировать дату в правильном поместье, которое использует ваша база данных?

4 Ответов

Рейтинг:
34

Christian Graus

Почему ваше истинное значение находится в строке ? Вы храните здесь строку или bool ? Я думаю, что вам нужно удалить эти цитаты.


Рейтинг:
20

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


Я надеюсь, что это полезно


Рейтинг:
2

Member 13684689

Вспомогательный дисплей()
Текст1.Текст = rs!имя
Текст2.Текст = РС!Ролльно
Текст3.Текст = rs!ветвь
Текст4.Текст = rs!Класс
Текст5.Текст = rs!адрес
Текст6.Текст = rs!Контактно
Конец Подводной Лодки

Частная суб gosearch_Click()
РС.Рядом
rs.откройте "Select * from studdata where( Rollno='" & Text7.Text & "')", con, adOpenDynamic, adLockPessimistic
Если не РС.ВФ тогда
дисплей
перезагрузить
Еще
MsgBox "запись не найдена", vbInformation
Конец, Если
Конец Подводной Лодки

Перезарядка субмарины()
РС.Рядом
rs.откройте "Select * from studdata", con, adOpenDynamic, adLockPessimistic
Конец Подводной Лодки


Рейтинг:
1

Nishanth Raj

привет,

Я получаю ошибку при обновлении значений.Это показывает несоответствие типа данных ошибки в выражении критерия,которое не удалось обновить.Я пытаюсь подключиться к базе данных access.

это мой код.

Попробуй
con = New OleDbConnection(cnString)
против.Открыть()
cmd1 = New OleDbCommand("Update Faculty Set FName='" & txtfn.Текст & "', MName='" & txtmn.Текст & " ', LName='" & txtln.Текст & " ',Address='" & txtadd.Текст & "',контакт='" & txtcontact.Текст &ампер; "',пол='" &усилителя; R &ампер; "',OnService='" &амп; Р1 &ампер; "' где FacultyID=" &амп; целое число.Синтаксический Анализ(Label15.Текст) &ампер; "", кон)
cmd1.Метод executenonquery()
Ящик для сообщений.Шоу("Успешно Обновлено!!")
понятно()
Дисплей()
Поймать ex как исключение
Ящик для сообщений.Показать("свойство не удалось обновить!!", напр.сообщение)
Конец Попытки