VB requete SQL avec plusieurs paramètres [Résolu]

Messages postés
9
Date d'inscription
lundi 11 juin 2007
Dernière intervention
12 janvier 2008
- - Dernière réponse : jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
- 25 juin 2007 à 09:46
bonjour,
j'ai créé une base de donnée access et  je récupère les données de la base pour  les afficher  sur une feuille excel. Pour cela, j'écris des requêtes SQL dans Access comme celle-ci qui se nomme "parent"

    SELECT Génotype.*
    FROM Génotype
    WHERE Génotype.père=nom_père;

Puis je l'appelle avec un recordset comme ce-ci:

    Set dsM = New ADODB.Recordset
    dsM.Open "parent " & nom_père, dbI, adOpenStatic, adLockReadOnly

Et cela fonctionne très bien , mais je voudrais introduire un second paramètre comme cela:

    SELECT Génotype.*

    FROM Génotype

    WHERE Génotype.père=nom_père AND Génotype.mère=nom_mère;

Donc de la même façon, j'ai essayé de l'appeller comme ça:

    Set dsM = New ADODB.Recordset

    dsM.Open "parent " & nom_père & nom_mère, dbI, adOpenStatic, adLockReadOnly

mais ça fonctionne pas , et je me retrouve avec cette erreur: 
    erreur d'exécution '-2147217900 (80040e14)'

et malheureusement je ne parviens pas à trouver le moyen de procéder, donc merci à ceux qui pourront m'aider et soyez indulgent car je suis une débutante avec visual basic
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
3
Merci
Sinon, tu peux toujours l'écrire comme ça :

Dim SQL as string

SQL = "SELECT Génotype.* FROM Génotype WHERE Génotype.père=" & """" & nom_père & """" & " AND Génotype.mère=" & """" & nom_mère & """"
Set dsM = New ADODB.Recordset
dsM.Open SQL, dbI, adOpenStatic, adLockReadOnly

Molenn

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de Molenn
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
3
Merci
Salut,
Est ce que tout les champs sont bien de type text (ou string)
Car il est inutile (sauf erreur de ma part) d'entourer avec " " (ou ' ' ) les type  Numerique (long , int, etc..)

@+: Ju£i?n
Pensez: Réponse acceptée

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 106 internautes ce mois-ci

Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Salut,
Peu etre faut il un espace entre les deux parametres.
NOTE: Evitre les accents dans les nom de varaibles (dans le code non commenté en général)
dsM.Open "parent " & nom_pere & " " & nom_mere, dbI, adOpenStatic, adLockReadOnly

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Ou plus simplement
SQL = "SELECT Génotype.* FROM Génotype WHERE Génotype.père=""" & nom_père & """ AND Génotype.mère =""" & nom_mère & """"

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet
Messages postés
9
Date d'inscription
lundi 11 juin 2007
Dernière intervention
12 janvier 2008
0
Merci
merci beaucoup pour vos réponses, ça va énormément me servir dans mon projet
Commenter la réponse de cs_LEXANE
Messages postés
797
Date d'inscription
mardi 7 juin 2005
Dernière intervention
23 février 2011
0
Merci
jrivet : Je me perds toujours avec les "", les """, les """" ... Ca vient sans doute du fait que la rigueur et moi ...

Donc, je sépare toujours mes """" du reste parce que, lorsque je me relis au moins, je suis sûr d'y avoir pensé. C'est pas propre, je sais, et j'en ai honte  ...

Molenn
Commenter la réponse de Molenn
Messages postés
9
Date d'inscription
lundi 11 juin 2007
Dernière intervention
12 janvier 2008
0
Merci
salut,
c'est encore moi
j'ai encore un petit problème parce que dans l'exemple que je vous ai expliqué votre solution fonctionne mais lorsque j'ai voulu l'utiliser avec une autre requête un peu plus complexe ça ne fonctionne pas et je ne comprend pas pourquoi
donc si vous comprenez d'où viens le problème merci de me prévenir parce que moi je suis perdue !!!

voici le code :
Dim Sql As String

Sql = "SELECT Parcelles.nom_parcelle, Parcelles.ligne, Parcelles.ordonnée, Parcelles.id, dernier_année_inventaire.dernière_année, Inventaire.état
FROM (([SELECT id_lieu, max(année) AS dernière_année FROM Inventaire GROUP BY Inventaire.id_lieu]. AS dernier_année_inventaire)
    INNER JOIN Inventaire ON (Inventaire.id_lieu=dernier_année_inventaire.id_lieu) AND (Inventaire.année=dernier_année_inventaire.dernière_année))
    INNER JOIN Parcelles ON Parcelles.id_lieu=Inventaire.id_lieu
WHERE Parcelles.[archive]=0 AND Parcelles.nom_parcelle=" & """" & parcelle & """" & " AND ligne=" & """" & nligne & """"   

Set dsM = New ADODB.Recordset                   
dsM.Open Sql, dbI, adOpenStatic, adLockReadOnly

et lorsque je l'exécute cela m'affiche le message d'erreur suivant :
    erreur d'exécution '-2147217913 (80040e07)'
    Type de données incompatible dans l'expression du critère
Commenter la réponse de cs_LEXANE
Messages postés
9
Date d'inscription
lundi 11 juin 2007
Dernière intervention
12 janvier 2008
0
Merci
c'est dans ces moments là que je me sens vraiment bête
merci de m'avoir ouvert les yeux
Commenter la réponse de cs_LEXANE
Messages postés
7401
Date d'inscription
mercredi 23 avril 2003
Dernière intervention
6 avril 2012
0
Merci
Re,
Mais y a pas de quoi, en plus c'est Lundi matin alors on n'est pas obligé d'avoir les yeux ouvert dès le lundi matin (il y a le reste de la semaine pour ca )

@+: Ju£i?n
Pensez: Réponse acceptée
Commenter la réponse de jrivet

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.