Problème requête SQL (langage VBA access 2007
Fermé
nico
-
23 juin 2009 à 22:12
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 - 24 juin 2009 à 22:36
yg_be Messages postés 23336 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 18 novembre 2024 - 24 juin 2009 à 22:36
A voir également:
- Problème requête SQL (langage VBA access 2007
- Save as pdf office 2007 - Télécharger - Bureautique
- Langage binaire - Guide
- Find vba - Astuces et Solutions
- Office 2007 windows 11 ✓ - Windows 11
- Vba attendre 1 seconde ✓ - Forum VB / VBA
15 réponses
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
23 juin 2009 à 22:17
23 juin 2009 à 22:17
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
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
23 juin 2009 à 22:33
23 juin 2009 à 22:33
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!
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
24 juin 2009 à 20:52
24 juin 2009 à 20:52
As-tu essayé en remplaçant i et j par des valeurs ?
;o)
;o)
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
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
24 juin 2009 à 21:05
24 juin 2009 à 21:05
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.
yg_be
Messages postés
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
1 551
24 juin 2009 à 21:11
24 juin 2009 à 21:11
L'operateur "+" fait la concaténation de deux strings.
L'avantage de "+" par rapport à "&", c'est que le "+" provoque une erreur si un des deux opérants n'est pas un string.
L'avantage de "+" par rapport à "&", c'est que le "+" provoque une erreur si un des deux opérants n'est pas un string.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
>
yg_be
Messages postés
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
24 juin 2009 à 21:36
24 juin 2009 à 21:36
C'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_be
Messages postés
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
1 551
>
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
24 juin 2009 à 21:42
24 juin 2009 à 21:42
Moi je préfère
string + cstr(numerique)
comme cela j'evite une conversion inattendue.
string + cstr(numerique)
comme cela j'evite une conversion inattendue.
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
>
yg_be
Messages postés
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
24 juin 2009 à 21:52
24 juin 2009 à 21:52
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
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
24 juin 2009 à 21:08
24 juin 2009 à 21:08
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?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
24 juin 2009 à 21:43
24 juin 2009 à 21:43
Si cotisations.annee est un string alors il manque les simples cotes :
[cotisations].[Année] = ' " & recherche_annee.Value & " ' "
EDIT: Remplace recherche_annee.Value par recherche_annee.Text
;o)
[cotisations].[Année] = ' " & recherche_annee.Value & " ' "
EDIT: Remplace recherche_annee.Value par recherche_annee.Text
;o)
yg_be
Messages postés
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
24 juin 2009 à 21:40
24 juin 2009 à 21:40
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
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
24 juin 2009 à 22:10
24 juin 2009 à 22:10
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
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
24 juin 2009 à 22:27
24 juin 2009 à 22:27
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
23336
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
24 juin 2009 à 22:36
24 juin 2009 à 22:36
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)