J_Mohan Ответов: 1

Как обновить одну запись, используя три критерия в предложении WHERE ?


Привет Друзья,

Я использую Visual Basic 2015 в качестве Frontend и Access Database в качестве Backend. Я хочу обновить одну запись в таблице на следующих трех основаниях :

ГДЕ

Sap_No = TxtSap_No и

MNT (то есть месяц) = CmbMonth.Текст (т. е. текст ComboBox) и

YR (то есть год) = CmbYear.Текст (т. е. текст ComboBox)

Я попробовал три различные комбинации команды обновления, но она дает разные сообщения об ошибках :

В синтаксисе ( 1 ) и ( 3 ) я получил - "несоответствие типов данных в выражении критериев", хотя я тщательно проверяю все типы полей, все они имеют правильный тип.

В синтаксисе ( 2 ) я получил – “синтаксическая ошибка в строке в выражении запроса ‘ (Sap_No= ‘ 10798 ’) и (MNT= ‘JAN’) и (YR= ‘ 2018 ‘) ; ‘,

В чем проблема и каково ее решение ?

Кроме того если я попытаюсь опустить“, где” условие, обновление команда заменяет все записи в таблице с одинаковыми значениями и если я применяю “где Sap_No = &ампер; TxtSap_No &ампер; “ обновление команда заменяет все записи, имеющие Sap_No = TxtSap_No независимо от конкретного месяца и года.

Каким будет решение ? Я привел все три синтаксиса ниже Для справки. Пожалуйста помочь.

Что я уже пробовал:

Попробуй

'1

- LvMasterCmd.Свойства commandtext = "LeaveMaster обновить набор Sap_No= @Sap_No, From_Date= @From_Date, даты=@даты, LeaveType=@LeaveType, дн=@дней, LeaveStatus=LesveType" &амп@;
'"Где Sap_No=" & TxtSapID.Текст & "и МНТ=" &амп; &амп млн; "и yr=" &амп; У год &амп; " ;"


'2
-LvMasterCmd.Свойства commandtext = "LeaveMaster обновление комплект [Sap_No]= ?, [From_Date]= ?, [Даты]= ?, [LeaveType]= ?, [Дн]= ?, [LeaveStatus]= ? Где (Sap_No= '" & TxtSapID.Текст &ампер; "') и (МНТ= '"& &усилителя млн; " ') и (Г= '" &амп; У год &амп; " ) ;"

'3
LvMasterCmd.Свойства commandtext = "LeaveMaster обновление комплект [Sap_No]= ?, [From_Date]= ?, [Даты]= ?, [LeaveType]= ?, [Дн]= ?, [LeaveStatus]= ? Где Sap_No= " &амп; Кинт(TxtSapID.Текст) & "и МНТ=" &амп; &амп млн; "и yr=" &амп; У год &амп; " ;"


LvMasterCmd.Параметры.AddWithValue ("@Sap_No", TxtSapID.Text)

LvMasterCmd.Параметры.AddWithValue("@From_Date", DtpFrom.Value)
LvMasterCmd.Параметры.AddWithValue("@To_Date", DtpTo.Value)

LvMasterCmd.Параметры.AddWithValue("@LeaveType", LT)
LvMasterCmd.Параметры.AddWithValue ("@Days", LblDays.Text)
LvMasterCmd.Параметры.AddWithValue("@MNT", MN)
LvMasterCmd.Параметры.AddWithValue("@YR", YRR)
LvMasterCmd.Параметры.AddWithValue("@LeaveStatus", "Y")

LvMasterReader.Закрывать()

LvMasterCmd.Метод executenonquery()
LvMasterCmd.Параметры.Четкий()
Выход Из Субмарины
Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Конец Попытки

1 Ответов

Рейтинг:
2

OriginalGriff

Начните с того, что никогда не объединяйте строки, чтобы сформировать команду SQL. Вы знаете о параметризованных запросах, так почему же вы вдруг используете оба?

Вы уже передаете Sap_no в качестве параметра, просто используйте это значение вместо того, чтобы пытаться отправить его дважды ...

И кстати: какой смысл устанавливать Sap_No как часть обновления, если вы точно знаете, какое значение оно уже имеет?


J_Mohan

Спасибо за повтор сэр,

Я новичок в использовании Visual Basic 2015, ранее я использовал Visual Basic 6 для разработки проектов, поэтому я могу задавать глупые вопросы, извините за это.

Я не могу понять правильный синтаксис для моей проблемы. Это моя просьба исправить синтаксис и отправить его мне , если вы не возражаете, сэр. Заранее спасибо.

J_Mohan

Значения для Sap_No, MNT и YR принимаются из текстового поля и выпадающего списка.

J_Mohan

Привет друг,

Я исправил коды в соответствии с вашими рекомендациями, но он показывает, что " нет значения для одного или нескольких требуемых параметров"

Коды следующим образом :

Попробуй

LvMasterCmd.Свойства commandtext = "обновление LeaveMaster набор From_Date= @From_Date, даты= @даты, LeaveType= @LeaveType, дн= @дней, LeaveStatus= LeaveStatus" &амп @;
"Где Sap_No=" &амп; Сид & "и МНТ=" &амп; МН & "и год=" &амп; У год &амп; " ;"


LvMasterCmd.Параметры.AddWithValue("@From_Date", DtpFrom.Value)
LvMasterCmd.Параметры.AddWithValue("@To_Date", DtpTo.Value)

LvMasterCmd.Параметры.AddWithValue("@LeaveType", LT)
LvMasterCmd.Параметры.AddWithValue ("@Days", LblDays.Text)

LvMasterCmd.Параметры.AddWithValue("@LeaveStatus", "Y")

LvMasterReader.Закрывать()

LvMasterCmd.Метод executenonquery()
LvMasterCmd.Параметры.Четкий()
Выход Из Субмарины
Поймать ex как исключение
Ящик для сообщений.Показать(напр.сообщение)
Конец Попытки

OriginalGriff

- Нет, не видел. Прочтите еще раз, что я сказал.