[Access2003] Problème de requête SQL en VBA

Résolu/Fermé
Makushiimu Messages postés 6 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 10 février 2010 - 10 févr. 2010 à 14:46
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 - 10 févr. 2010 à 17:58
Bonjour,
étant plutôt novice en programmation Access, je m'en remets à vous car je suis littéralement en train de m'arracher les cheveux >_<

Voilà, je suis en train de coder une fonction qui, lors du chargement du formulaire, va aller rechercher dans une table de la base une valeur (user_type) en comparant l'id de l'utilisateur (CurrentUser) à une autre valeur de la table (user_id).

Seulement, problème, on dirait que je n'arrive pas à trouver la base O_o. Access me renvoie sans cesse l'erreur "3601 : Trop peu de paramètres. 1 attendu"

Voici le code de la fonction :


Private Sub Form_Load()

Dim db As DAO.Database, rst As DAO.Recordset, fld As DAO.Field
Dim sql As String // Stockage de la requête SQL
Dim utilisateur As String
utilisateur = currentuser // Stockage du Windows ID


sql = "SELECT * FROM tbl_user WHERE user_id = " & utilisateur & ";" // Création de la requête SQL

Set db = CurrentDb()

Set rst = db.OpenRecordset(sql)

If (rst!user_type = "RF") Or (rst!user_type = "RS") Or (rst!user_type = "RG") Then
button_new.Enabled = False
End If
rst.Close

End Sub


Sachant qu'Access 2003 me mets le point d'erreur sur la ligne en gras, que dans la variable sql, j'ai bien la chaîne "SELECT * FROM tbl_user WHERE user_id = [monid];", et que tbl_user fait partie de la base que je manipule actuellement, je suis totalement perdu ^^".

Je vous remercie d'avance pour votre aide

Cordialement

Maku

7 réponses

garion28 Messages postés 1545 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 406
10 févr. 2010 à 14:55
où est stocké la valeur de currentuser que tu met dans utilisateur ?
tu as oublié d'entourer ta chaine utilisateur de ' dans ta requète (même si la variable est en string, ca ne dispense pas de mettre les ' ' dans la requete)
0
Makushiimu Messages postés 6 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 14:58
Bah en fait, CurrentUser est une fonction d'Access qui renvoie l'id de l'utilisateur en cours.

Pour les quotes, je vais les rajouter, mais quand je mets un point d'arrêt et que je regarde ma requête, elle est propre, avec la bonne valeur d'id... ^^".
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
10 févr. 2010 à 15:03
Salut,

si user_id est de type nuémrique pas besoin de quotes, si type chaine alors l'enquoter (quote simple).

Par contre, pour un cas comme ça, il est superfétatoire d'utiliser un recordset (qui dans la théorie renvoie plusieurs lignes). Un dlookup renverrait le résultat en une ligne.
0
Makushiimu Messages postés 6 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 15:06
user_id est de type chaine (en gros, c'est un truc du style "a8062063"), mais je viens d'essayer de mettre les quotes, ça me met une erreur de syntaxe ^^.

Et je vais essayer le dlookup (je connaissais pas, concrètement, j'ai commencé le VBA y'a un mois et demi à tout casser, et encore, j'en ai pas fait pendant un mois ^^")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Makushiimu Messages postés 6 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 15:24
Alors, je viens de tester le DLookUp comme ceci :


Dim type_utilisateur As Variant
type_utilisateur = DLookup([user_type], [tbl_user], "[user_id] =" & utilisateur)

Et là, j'ai droit à l'erreur 2465 : Impossible de trouver le champ "|" auquel il est fait référence dans votre expression.

Une idée ? ^^
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
10 févr. 2010 à 15:32
Essaye ça :

"...[user_id] = '" & utilisateur & "'") 
Note les simples quotes comme séparateur de chaine...
0
Makushiimu Messages postés 6 Date d'inscription jeudi 3 décembre 2009 Statut Membre Dernière intervention 10 février 2010
10 févr. 2010 à 17:02
C'est bon, ça marche ^^.

Merci Blux =).

Je poste ici la réponse, des fois que ça intéresse d'autres personnes :


Dim type_utilisateur As Variant
type_utilisateur = DLookup("[user_type]", "[tbl_user]", "[user_id] = '" & utilisateur & "'")
0
blux Messages postés 26531 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 16 décembre 2024 3 317
10 févr. 2010 à 17:58
Le problème initial était sûrement aussi dû aux quotes...
0