#vb.net #ms-access-2007 #dao
#vb.net #ms-access-2007 #dao
Вопрос:
Вот код:
Dim tr As Transactions
Set tr = New Transactions
Dim ID As Integer
Dim name As String, username As String, password As String, activate As String
name = cmbName.Value
ID = tr.GetUserID(name)
If (AccountActivated = True) Then
username = txtUsername.Value
password = txtPassword.Value
MsgBox name amp; " " amp; username amp; " " amp; password
activate = "Yes"
Else
username = ""
password = ""
activate = "No"
End If
tr.UpdateAccount name, username, password, activate 'ERROR HERE: Object required
Вот функция, которую я вызываю:
Public Function UpdateAccount(ByVal name As String, ByVal username As String, ByVal password As String, ByVal activation As String)
Call connectDB
sSQL = "update User set Username = '" amp; username amp; "', Password = '" amp; password amp; "', AccountActivated = '" amp; activation amp; "' where Name = '" amp; name amp; "'"
MsgBox sSQL
db.Execute sSQL
End Function
Комментарии:
1. Какое именно сообщение об ошибке вы получаете? И вам определенно следует использовать
Parameters
для привязки значенийusername
,password
,activation
иuser
.2. Ошибка времени выполнения 424: требуется объект
3. Какой синтаксис для этого, чтобы я мог попробовать? Спасибо!
Ответ №1:
Почему здесь вы используете «db», а в другом вопросе «CurrentDb»? Всегда кодируйте, используя параметр явно.
И почему функция, измените на sub, я не помню, может ли это вызвать проблему.
Но самое главное, не используйте текст, введенный из текстовых полей, для построения строки sql, это упрощает использование SQL-инъекции, используйте параметры.
Комментарии:
1. Если вы переключаетесь с функции на Sub, строка становится красной. Кроме того, как мне затем выполнить параметры для SQL? Спасибо!
2. извините.. думаю, dao не поддерживает параметры, вам пришлось бы использовать набор записей. другой способ — очистить строку, чередуя возможный код sql-инъекции, такой как апострофы
3. Но ваш «Требуемый объект», вероятно, является неправильным именем переменной. Включите параметр явно, и вы должны его увидеть.
4. О, проблема решена! Мне просто пришлось изменить ‘db’ на ‘CurrentDb’ 🙂