Mise à jour de l'erreur d'accès
Question
Dim conn As OleDbConnection
Dim cmd As OleDbCommand
Public Sub openDB()
conn = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Application.StartupPath & "\VFMS_DB.mdb;" & "Jet OLEDB:System Database=Security.mdw;User ID=Adster;Password=300624;")
conn.Open()
End Sub
Public Function UpdateUser() As Integer
Dim retCode As New Integer
Try
openDB()
cmd = conn.CreateCommand()
La commande de mise à jour ci-dessous continue à me donner cette erreur: « Conversion de chaîne » « WHERE [Nom d'utilisateur] = » « taper « Double » est pas valide. » et je ne sais pas pourquoi. Le champ aUserName est un champ de chaîne et j'ai vérifié pour vous assurer qu'il est rempli.
cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & "', [Last Name] = '" & aSurname & "', [Contact Number] = '" & aContactNum & "', [Password] = '" & aPassword & "', [User Rights] = '" & aUserRights + "' WHERE [Username] = '" + aUserName + "' "
cmd.ExecuteNonQuery()
conn.Close()
'rsAddRecs = rsConn.Execute("UPDATE Users ([First Name], [Last Name], [Contact Number], [User Name], [Password], [User Rights]) VALUES ('" & aName & "','" & aSurname & "','" & aContactNum & "','" & aUserName & "','" & aPassword & "','" & aUserRights & "')")
retCode = 0
'rsConn.Close()
Return retCode
Catch ex As Exception
MessageBox.Show(ex.ToString, ex.Message, MessageBoxButtons.OK)
retCode = 1
Return retCode
End Try
End Function
La solution
Vous avez une faute de frappe. Vous utilisez + caractères concat à la fin de la chaîne sql au lieu de caractères
Mauvais
cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
"', [Last Name] = '" & aSurname & _
"', [Contact Number] = '" & aContactNum & _
"', [Password] = '" & aPassword & "', [User Rights] = '" & _
aUserRights + "' WHERE [Username] = '" + aUserName + "' "
' ^ ^ ^
droite
cmd.CommandText = "UPDATE Users SET [First Name] = '" & aName & _
"', [Last Name] = '" & aSurname & _
"', [Contact Number] = '" & aContactNum & _
"', [Password] = '" & aPassword & "', [User Rights] = '" & _
aUserRights & "' WHERE [Username] = '" & aUserName & "' "
' ^ ^ ^
Autres conseils
le code SQL utilise [Username]
:
cmd.CommandText = "UPDATE Users SET ... [Username]...
Alors que vous avez dit sur le code utilisé [User Name]
:
'rsAddRecs = rsConn.Execute("UPDATE Users ... [User Name]...
pourrait le nom de mauvaise colonne la source du problème?
Une autre pensée: avez-vous aseptisée vos valeurs de paramètres par exemple la valeur pourrait contenir une seule citation qui est bouleversant le SQL dynamique. Dans tous les cas, je pense que vous devriez envisager d'utiliser des déclarations préparées (ou même procédures) et l'utilisation d'objets de paramètre pour appeler le SQL, respectant ainsi l'désinfectante des valeurs de paramètres au fournisseur OLE DB, qui bien sûr en savoir plus sur le sujet que vous ou moi:)