IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

[VBA] Problème de recordset - "Aucune valeur pour les paramètres requis"


Sujet :

Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut [VBA] Problème de recordset - "Aucune valeur pour les paramètres requis"
    salut

    Je souhaiterai utiliser plusieur recordset ds mon code mais il me met l'erreur suivante sur la ligne en rouge.

    Précisions :
    - sur le rsPrenomPatient il me met (ds le debugger) :
    <variables objet ou variables de bloc whith non définie>
    - apres le message d'erreur :
    "Erreur d'execution '-2147217904 (80040e10)
    Aucune valeur données pour un ou plusieur des paramètres requis"
    - et rqsql2 me renvoyant (msgbox) :
    SELECT PrenomPatient FROM Patient WHERE NomPatient = DUPOND AND PrenomPatient like 'r*'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub procProposition()
        'Connexion à la base courante
        Dim cnCliniqueOuverte As ADODB.Connection
        Set cnCliniqueOuverte = Application.CurrentProject.Connection
        'En fonction de ce que l'on veut :
    '(...Recordset 1...)
        If PrenomOuiNon Then
            Dim rsPrenomPatient As New ADODB.Recordset
            Dim rqSQL2 As String
            rqSQL2 = "SELECT PrenomPatient FROM Patient WHERE " & rqParametre & ";"
            Set rsPrenomPatient = cnCliniqueOuverte.Execute(rqSQL2)
            TxtPrenomPatient = rsPrenomPatient("PrenomPatient")
            rsPrenomPatient.Close
            Set rsPrenomPatient = Nothing
        End If
    '(...Recordset 3 à 6 ...)
        'Ferme la connexion    cnCliniqueOuverte.Close
        Set cnCliniqueOuverte = Nothing
    End Sub
     
     
    'avec 
     
        '(...)
        rqParametre = "NomPatient = " & [TxtNomPatient]
        PrenomOuiNon = AdresseOuiNon = CPOuiNon = VilleOuiNon = True
        procProposition
        PrenomOuiNon = AdresseOuiNon = CPOuiNon = VilleOuiNon = False
        '(...)
    Info supplémentaire :
    ma table Patient(NumSSPatient, NomPatient, PrenomPatient, (...)) est une table lié depuis excel est comprend plus de 62200 lignes.


    Évidemment j'ai consulté la FAQ, et les diverses outils disponible sur ce site (d'ailleur je l'utilise constamment depuis le début de mon stage il y a 3 semaines) mais rien à faire j'ai rien trouver pour cet erreur ...
    dc je suis ouvert à tt sugestion !

    merci d'avance

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    C'est la ligne du dessus qui ne vas pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rqSQL2 = "SELECT PrenomPatient FROM Patient WHERE " & rqParametre
    Elle devrait être comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rqSQL2 = "SELECT PrenomPatient FROM Patient WHERE " & rqParametre & ";"
    => Toujours un point-virgule à la fin d'une requête SQL.
    Voilà, ça devrait fonctionner

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut correction
    merci, j'ai corrigé !
    ... mais il me met tjrs l'erreur ...

  4. #4
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 125
    Points : 128
    Points
    128
    Par défaut
    passe en mode pas pas verifie que la connexion ast vraiment ouverte
    le message<variables objet ou variables de bloc whith non définie> = objet non initialisé
    sinon utilise la metode open de ton record set

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    rsPrenomPatient.open(....)

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut ...
    cette méthode ne lui plait pas du tt :
    Citation Envoyé par Access
    Erreur d'execution '3709':

    Impossible d'utiliser cette connexion pour effectuer cette action.
    Elle est fermée ou non valide dans ce contexte.
    je l'ai essayé avant et en remplacement du :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rsPrenomPatient = cnCliniqueOuverte.Execute(rqSQL2)
    ------------------
    Citation Envoyé par medkarim
    passe en mode pas à pas et vérifie que la connexion est vraiment ouverte
    le message <variables objet ou variables de bloc with non définie> = objet non initialisé
    mon cnCliniqueOuverte a l'air bon puisqu'il renvoie <"Provider = MicrosoftJet ...>

    mais merci qd meme !

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    Je rajoute que je viens de tester avec la méthode ADO de la FAQ pr la création de formulaire et que le problème est exactement le meme - meme message d'erreur (mais sur le open) ! - .

  7. #7
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Et si tu met

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     rqParametre = "NomPatient = '" & [TxtNomPatient] & "'"
    est ce que ça marche mieux?
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut on se raproche ...
    Oui ca marche mieux merci

    C'est pas tt a fait ca mais il passe a la ligne suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TxtPrenomPatient = rsPrenomPatient("PrenomPatient")
    en me disant
    Citation Envoyé par Access
    Erreur d'execution '2113' :

    valeur incorecte pour ce champs
    la solution ne doit pas être loin ...
    merci encore

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    voilà le code corrigé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub procProposition()
        'Connexion à la base courante
        Dim cnCliniqueOuverte As ADODB.Connection
        Set cnCliniqueOuverte = Application.CurrentProject.Connection
        'En fonction de ce que l'on veut :
        If PrenomOuiNon Then
            'Creation du recordset
            Dim rsPrenomPatient As New ADODB.Recordset
            Dim rqSQL2 As String
            rqSQL2 = "SELECT PrenomPatient FROM Patient WHERE " & rqParametre & ";"
            Set rsPrenomPatient = cnCliniqueOuverte.Execute(rqSQL2)
            'Eploitation du recordset
    '        If Not rsPrenomPatient.EOF Then
                TxtPrenomPatient.Text = rsPrenomPatient("PrenomPatient")
    '        End If
            'Fermeture du recordset
            rsPrenomPatient.Close
            Set rsPrenomPatient = Nothing
        End If
        'Ferme la connexion
        cnCliniqueOuverte.Close
        Set cnCliniqueOuverte = Nothing
    End Sub
    
    'avec 
    
    
    rqParametre = "NomPatient like '" & TxtNomPatient.Text & "*'"
    Maintenant il me dit :
    Citation Envoyé par Access
    Erreur d'execution '3021' :

    BOF ou EOF est égal à true ou l'enregistrement actuel à été supprimé.
    L'opération demandée nécessite un enregistrement actuel.
    Ce qui est faux : j'ai testé ma requete en faisant une copie adapté ds le requeteur (mode SQL) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT [PrenomPatient]
    FROM Patient
    WHERE NomPatient like 'p*';
    et il me retourne un résultat !

    dc si vous voyer pourquoi ...
    encore merci d'avance !

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Quand tu testes ton EOF, teste aussi le BOF pour être sûr.
    EOF = Vrai ET BOF = Vrai, alors ton RecordSet est vide.
    Si l'un des deux seulement est vrai, alors fait un "MoveFirst" avant pour se positionner sur le premier enregistrement.

    En espérant t'aider...

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut
    merci bien
    mais j'ai testé et ca ne marche pas ....

    en fait ma requête ne retourne aucun résultat
    j'ai affiché un recordcount pour et il me retourne -1 ...

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 182
    Points : 139
    Points
    139
    Par défaut
    Je suis pas du tout sûr de ce que je vais dire, mais pour cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rqParametre = "NomPatient like '" & TxtNomPatient.Text & "*'"
    Je mettrai plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rqParametre = "NomPatient like '" & TxtNomPatient.Text & "'*"
    =>Inverse l'* et l''.

    Mais comme je viens de le dire, je n'en suis absolument pas sûr, je dis peut être une grosse bêtise...

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut infos complémentaires
    je ne crois pas que cela vienne de la requête car j'ai l'habitude d'en faire
    ... mais j'ai testé qd même ^^ et
    Citation Envoyé par Access
    Erreur de syntaxe
    mais merci qd même

    sinon je rajoute des infos supplémentaire que je viens de tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rsPrenomPatient.state >> 1 ( : Indique que l'objet est ouvert)
    rsPrenomPatient.source >> la requete
    rsPrenomPatient.ActiveCommand >> <variables objet ou variables 
    de bloc whith non définie> 'la c'est embettant
    rsPrenomPatient.ActiveConnection >> <"Provider = MicrosoftJet ...>
    encore merci pr tt ces réponses ...

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 33
    Points : 19
    Points
    19
    Par défaut Résolution :
    ca y'est j'ai trouvé !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub procProposition()
        'Connexion à la base courante
        Dim dbCliniqueOuverte As DAO.Database, fld As DAO.Field
        ' Ouverture de la base de données
        Set dbCliniqueOuverte = DBEngine.OpenDatabase("
    z:\Clinique Ouverte\CLINIQUE_OUVERTE.mdb")
    'En fonction de ce que l'on veut afficher :
        If NomOuiNon Then
            'Creation du recordset
            Dim rsNomPatient As DAO.Recordset
            'Remplissage du recordset
            Set rsNomPatient = dbCliniqueOuverte.OpenRecordset("SELECT NomPatient FROM 
    Patient WHERE " & rqParametre & ";")
            'Vérification de la présence d'au moins un tuple
            If Not rsNomPatient.EOF Then
                'Exploitation du recordset
                TxtNomPatient = rsNomPatient("NomPatient")
            End If
            'Fermeture du recordset
            rsNomPatient.Close
            Set rsNomPatient = Nothing
        End If
        If PrenomOuiNon Then
            Dim rsPrenomPatient As DAO.Recordset
            Set rsPrenomPatient = dbCliniqueOuverte.OpenRecordset("SELECT * FROM 
    Patient WHERE " & rqParametre & ";", dbOpenForwardOnly, dbReadOnly)
            If Not rsPrenomPatient.EOF Then
                TxtPrenomPatient = rsPrenomPatient("PrenomPatient")
            End If
            rsPrenomPatient.Close
            Set rsPrenomPatient = Nothing
        End If
    (etc etc ...)
        'Ferme la connexion    dbCliniqueOuverte.Close
        Set dbCliniqueOuverte = Nothing
    End Sub
    
    'avec 
    rqParametre = "NomPatient like '" & TxtNomPatient.Text & "*'"
    'puis
    rqParametre = "NomPatient = '" & [TxtNomPatient] & "' AND 
    PrenomPatient like '" & TxtPrenomPatient.Text & "*'"
    (etc etc ...)
    En fait il suffisait d'utiliser la méthode DAO au lieu de ADO ... eh oui, ici je n'utilise pas la meme version que chez moi

    voila un grand a tt ceux qui ont essayé de m'aider
    et j'espère que ca aidera ceux qui ont le meme prob que moi
    en tt cas je ne la referai plus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/06/2015, 14h33
  2. Réponses: 0
    Dernier message: 13/04/2013, 08h18
  3. Réponses: 2
    Dernier message: 19/03/2008, 11h22
  4. Réponses: 15
    Dernier message: 23/08/2007, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo