Problème requête SQL (langage VBA access 2007
nico
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
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
A voir également:
- Problème requête SQL (langage VBA access 2007
- Save as pdf office 2007 - Télécharger - Bureautique
- Langage ascii - Guide
- Langage binaire - Guide
- Incompatibilité de type vba ✓ - Forum Programmation
- Acer quick access - Forum logiciel systeme
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)
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)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
ou 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!
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!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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.
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.
Qu'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)
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)
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Et 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)
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?
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?
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Avant "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".
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...
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...
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Comment 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é.
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 ^^
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 ^^
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Ajoute "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" ?
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!
erreur : trop peu de paramètres : 1 attendu
impossible de mettre "option explicit" dans une procédure, mon code est un évènement!
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
tu 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)
"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)