Problème requête SQL (langage VBA access 2007
Bonjour,
Voici le code qui me pose un problème :
i = liste_contact.Value
j = contact_rechercher.Value
strSQL = " SELECT [Nom],[type_contact],[type],[date_contact],[Prénom],[Adresse_de_messagerie],[Téléphone_personnel],[Téléphone_mobile],[Adresse],[Ville],[Département],[Code_postal],[Page_Web],[Remarques] FROM [Contacts] WHERE " & i & " Like ' " & j & " ' ; "
Set rst = CurrentDb.OpenRecordset(strSQL)
Me.Nom = rst("nom")
Me.Prenom = rst("prénom")
Me.mail = rst("Adresse_de_messagerie")
Me.telPers = rst("Téléphone_personnel")
Me.telPort = rst("Téléphone_mobile")
Me.rue = rst("Adresse")
Me.Ville = rst("Ville")
Me.Departement = rst("Département")
Me.cp = rst("Code_postal")
Me.Web = rst("Page_Web")
Me.Notes = rst("Remarques")
Me.type = rst("type")
Me.date = rst("date_contact")
Me.type_contact = rst("type_contact")
rst.Close
Set rst = Nothing
Il me met une erreur sur toutes les lignes me.variable = rst("variable") : "Valeur non valide pour ce champ"
Si quelqu'un a une petite idée je suis preneur! Si vous voulez plus de renseignements n'hésitez pas!
Merci de vos réponses
Voici le code qui me pose un problème :
i = liste_contact.Value
j = contact_rechercher.Value
strSQL = " SELECT [Nom],[type_contact],[type],[date_contact],[Prénom],[Adresse_de_messagerie],[Téléphone_personnel],[Téléphone_mobile],[Adresse],[Ville],[Département],[Code_postal],[Page_Web],[Remarques] FROM [Contacts] WHERE " & i & " Like ' " & j & " ' ; "
Set rst = CurrentDb.OpenRecordset(strSQL)
Me.Nom = rst("nom")
Me.Prenom = rst("prénom")
Me.mail = rst("Adresse_de_messagerie")
Me.telPers = rst("Téléphone_personnel")
Me.telPort = rst("Téléphone_mobile")
Me.rue = rst("Adresse")
Me.Ville = rst("Ville")
Me.Departement = rst("Département")
Me.cp = rst("Code_postal")
Me.Web = rst("Page_Web")
Me.Notes = rst("Remarques")
Me.type = rst("type")
Me.date = rst("date_contact")
Me.type_contact = rst("type_contact")
rst.Close
Set rst = Nothing
Il me met une erreur sur toutes les lignes me.variable = rst("variable") : "Valeur non valide pour ce champ"
Si quelqu'un a une petite idée je suis preneur! Si vous voulez plus de renseignements n'hésitez pas!
Merci de vos réponses
15 réponses
-
Bonjour,
Ca ne serait pas plutôt :
Me.Nom = rst.Fields("nom") ' ou Me.Nom = rst.Fields(0)
Me.Prenom = rst.Fields("prénom") ' ou Me.Prenom = rst.Fields(4)
Me.mail = rst.Fields("Adresse_de_messagerie") ' ou Me.mail = rst.Fields(5)
etc ...
;o)
-
Contributeurou rst!nom
-
Non malheureusement ce n'est toujours pas ça.
Je pense que le problème est dans la requête mais vraiment j'ai tout essayé les différentes formes d'écritures, je comprends pas.
Merci quand même de vos réponses! -
As-tu essayé en remplaçant i et j par des valeurs ?
;o) -
Oui j'ai essayé avec WHERE " & liste_contact.Value & " Like ' " & contact_rechercher.Value & " ' ; "
ou avec = sans les '' ...
ça me fait pareil pour cette requête :
strSQL = " SELECT [contacts].[ID],[contacts].[Nom],[contacts].[Prénom],[cotisations].[ID],[cotisations].[valeur_cotisation],[cotisations].[a_cotiser],[cotisations].[Année]"
strSQL = strSQL & " FROM [contacts],[cotisations]"
strSQL = strSQL & " WHERE [contacts].[ID] = [cotisations].[ID] AND [cotisations].[Année] = " & recherche_annee.Value & " ; "
Set rst = CurrentDb.OpenRecordset(strSQL)
tmp_nom = rst("Nom")
tmp_prenom = rst("Prénom")
nom_prenom.Value = tmp_nom + tmp_prenom
resultat_annee.Value = rst("Année")
resultat_cotise.Value = rst("a_cotiser")
resultat_valeur.Value = rst("valeur_cotisation")
rst.Close
Set rst = Nothing -
Je voulais dire avec des valeurs de la base, genre Where 'Toto' Like 'Titi' ... par exemple.
Pas sûr que le contenu de recherche_annee soit numérique ... mets CInt( recherche_annee.Value).
Autre chose, évite les accents dans les noms de champs ou de variables, ensuite si tu veux concaténer 2 variables, il ne faut pas employer "+" qui est le signe de l'addition mais "&" : nom_prenom.Value = tmp_nom & " " & tmp_prenom.
-
-
@yg_beC'est bien ce que je dis ... "+" est l'opérateur de l'addition et non de la concaténation. Si tu veux concaténer un string avec un numérique, tu obtiens une erreur en utilisant le "+". Avec "&" tu as la concaténation sans la levée d'une exception.
-
-
@yg_beQu'entends-tu par "conversion inattendue" ?
Tu peux effectivement faire comme ça, mais ne dis pas que "+" est l'opérande de concaténation. C'est une erreur de le croire.
Faire : string + CStr(numérique) n'est pas propre en programmation et en cas de maintenance du code. Si je dois débeuguer un code et que je trouve ça, j'aurai tendance à penser que c'est une addition et je modifie pour faire : CInt(String) + numérique ...
Si j'ai String & numérique, je ne m'arrête même pas pour me poser la question sur le résultat attendu.
;o)
-
-
ContributeurEt si tu ne rajoutes pas le "where" dans la requete ?
Je me demande aussi si tu ne devrais pas tester
" if not rst.eof "
avant d'exploiter rst (après openrecordset) -
C'est bien les conditions WHERE qui bloque dans chaque requête, j'ai essayé sans et ça marche.
Polux31 le champ cotisations.année est de type text vu que la date est sous la forme 2003/2004
D'autres propositions pour les clauses WHERE? -
ContributeurAvant "Set rst = CurrentDb.OpenRecordset(strSQL)",
fais
debug.print strsql, ou msgbox strsql.
Tout te semble normal ?
Es-tu certain qu'il y a dans la table un enregistrement qui correspond au "where" ?
Essai de récuperer le texte de strsql (debug.print, par exemple), et utilise ce texte pour une requete "à la main". -
Oui il y a bien un enregistrement qui correspondant.
Rien d'anormal sur msgbox(strSQL) => vide
Toutes mes requêtes où j'utilise une variable dans la clause WHERE ne marche pas, je commence à désespérer... -
ContributeurComment cela, msgbox (strsql) n'affiche rien ? J'espérais que cela affiche ta requete SQL...
Fais aussi un msgbox avec la variable que tu inséres dans la requete. C'est sans doute tes variables qui te posent problème.
Je suis surpris que tu n'aies pas de message d'erreur qnad le strsql n'est pas bien rédigé. -
quand je testais msgbox(strSQL) c'était avant le recordset , quand je le met après il m'affiche correctement ma requête.
J'ai un message d'erreur : valeur non valide pour ce champ
QUand je fais un msgbox de ma variable , j'ai bien le nom de ma variable.
A n'y rien comprendre ^^ -
ContributeurAjoute "option explicit", à tout hasard, au début de ton code, et déclare toutes tes variables.
Change
Set rst = CurrentDb.OpenRecordset(strSQL)
tmp_nom = rst("Nom")
tmp_prenom = rst("Prénom")
nom_prenom.Value = tmp_nom + tmp_prenom
resultat_annee.Value = rst("Année")
resultat_cotise.Value = rst("a_cotiser")
resultat_valeur.Value = rst("valeur_cotisation")
en :
msgbox strsql
Set rst = CurrentDb.OpenRecordset(strSQL)
if rst.eof then
msgbox("resultat vide pour la requete : " + strsql)
else
tmp_nom = rst("Nom")
tmp_prenom = rst("Prénom")
nom_prenom.Value = tmp_nom + tmp_prenom
resultat_annee.Value = rst("Année")
resultat_cotise.Value = rst("a_cotiser")
resultat_valeur.Value = rst("valeur_cotisation")
end if
Sur quelle ligne de code as-tu l'erreur "valeur non valide pour ce champ" ? -
toujours pas...
erreur : trop peu de paramètres : 1 attendu
impossible de mettre "option explicit" dans une procédure, mon code est un évènement! -
Contributeurtu ne peux pas mettre "option explicit" tout en haut du module ?
"trop peu de paramètres : 1 attendu" signifie que un des noms de colonne dans la requete SQL ne correspond pas à la definition de la table...
examine bien strsql... (msgbox)