visual-studio-2010
  • vb6
  • ms-access-2007
  • 2013-02-23 5 views 0 likes 
    0

    Я пытаюсь реализовать модуль пароля изменения в приложении в VB. В запросе обновления возникают некоторые проблемы.Обновление запроса в VB и Access

    Private Sub cmdOK_Click() 
    Query = "Select * From Users Where LoginID='" & txtLoginID & "' and Password = '" & txtCuPassword & "'" 
    Set reSet = myCon.Execute(Query) 
    
    If (Not reSet.BOF) And (Not reSet.EOF) Then 
        Query1 = "UPDATE Users SET Password ='" & txtNewPassword & "' WHERE LoginID='" & txtLoginID & "'" 
        Set reSet = myCon.Execute(Query1) 
    

    При выполнении ошибки в запрос UPDATE возникает ошибка синтаксиса.

    +0

    недостающих цитат ... –

    +0

    @MitchWheat Извините упущенные но также нет никаких изменений в ошибке , – Benjamin

    +0

    В вашем txtNewPassword содержится одиночная цитата? – Steve

    ответ

    2

    Так что, если ваш код апостроф в поле txtNewPassword, ваш запрос заканчивается что-то вроде этого

    Query = "UPDATE Users SET Password ='mypass'word' WHERE LoginID='123'" 
    

    и это, конечно, является синтаксической ошибкой.

    Вы могли бы попытаться заменить апостроф с парой одинарных кавычек

    Query = "UPDATE Users SET [Password] ='" & Replace(txtNewPassword, "'", "''") & "' WHERE .... 
    

    Но помните, что этот код широко открыт для SQL Injection. Вы также должны использовать параметризованные запросы, если это не так просто сделать в VB6. Кроме того, как отметили HansUp в своем комментарии, вам нужно приложить зарезервированное слово Password с помощью квадратных скобок

    Why should I use Parameters instead of putting values into my SQL string

    +0

    Ops, я действительно забыл, что спасибо. – Steve

    +1

    Гораздо проще всегда иметь префикс имени таблицы или, лучше, псевдонима, чем скобки зарезервированных слов. Префикс означает, что слово недвусмысленно, и поэтому вам не нужно скопировать. Кроме того, он будет хорошо работать с другими базами данных и гарантирует, что вы не получите ошибку из двух полей с одинаковым именем в запросе. – Fionnuala

    Смежные вопросы