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

VBA Access Discussion :

Probléme selection avec Recordset [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Probléme selection avec Recordset
    Saut tout le monde,
    En fait j'ai rencontré un erreur :
    Erreur d'exécution "91" :
    Variable objet ou variable de bloc non définie,
    Je veux faire un sélection d'un enregistrement d'une table Affaire selon un Num_Affaire choisi à partir d'une liste déroulante qui affiche tous les Num_Affaire disponible, tous sa pour Modifier avec Update !
    dans un module nommé ModuleConnexion j'ai utilisé sa :

    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
     
    Option Compare Database
     
    Public Com As String 'Variable qui va contenir les commandes SQL de type INSERT, UPDATE...
    Public affaire As DAO.Database 'La variable qui va faire le lien entre l'application et la base de données, pour pouvoir exécuter les commandes SQL
    Public dataset As DAO.Recordset 'Variable qui va contenir les données d'une resultat sql temporairememnt dans la RAM
     
    Function Connect()
        Set affaire = CurrentDb 'Initialiser la variable affaire à la base de données courante
    End Function
     
    Function valider_selection()
     
      Set dataset = affaire.OpenRecordset(Com, dbOpenDynaset) 'Initialise dataset exécute la dernière commande SQL par le biais de la variable de commande et remplit l'ensemble de données dans la mémoire
    End Function
    j'ai écrit le code pour l'ajout dans tous les tables sa tourne bien avec cette méthode !
    Dans un formulaire nommé frmModification j'ai une bouton pour rechercher l'affaire à modifier, la partie qui nous intéresse :

    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
     
    Private Sub b_rech_aff_Click()
    Dim numaff As String
     
     
    'Vérifier que l'utilisateur a bien choisi un numéro
     
    If IsNull(ld_numaff_mod.Value) Or IsEmpty(ld_numaff_mod.Value) Then
    MsgBox "Vous devez choisir un numéro d'affaire !"
    Else:
        numaff = ld_numaff_mod.Value
        Com = "SELECT * FROM Affaire WHERE Num_Affaire=" & numaff    'J'ai essayer avec les crochets, toujours pas de résultat 
        valider_selection
       Form_frmModCons2.zt_statut = dataset("Statut") 'Statut est un champ dans la table affaire, je veux affecter la valeur récupérer de la requête SELECT à un champ d'un Formulaire nommé frmModCons2  préalablement  
     
        MsgBox "Trés bien !!"   'juste en mode Test lol :p
     
    DoCmd.Close acForm, "Modification"
    DoCmd.OpenForm "frmModCons1"
    End If
     
    End Sub
    Alors il affiche l'erreur 91 comme cité ci-dessus, et lors du débogage ce ligne du ModuleConnexion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set dataset = affaire.OpenRecordset(Com, dbOpenDynaset)
    devient jaune !

    Merci bien les amis de vouloir m'aider à sortir de cette problème.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    D'abord Function Connect() et Function valider_selection() ne doivent pas être des fonctions mais des routines (Sub), une fonction est faire pour retourner une valeur.

    Dans ton code tu fait appel à la fonction (qui devrait être une routine) valider_selection, mais avant il faut lancer la routine Connect pour initialiser la variable objet Affaire.

    Philippe

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    j'ai remplacé Function par Sub pour Connect et valider_selection dans ModuleConnexion,
    et pour le bouton Modifier :

    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
     
    Private Sub b_rech_aff_Click()
    Connect
    Dim numaff As String
    'Vérifier que le champ numéro affaire à rechercher n'est pas vide
     
    If IsNull(ld_numaff_mod.Value) Or IsEmpty(ld_numaff_mod.Value) Then
        MsgBox "Vous devez choisir un numéro d'affaire !"
    Else:
      numaff = ld_numaff_mod.Value
      'Instruction sql
      Com = "select * from Affaire where Num_Affaire=" & numaff
      valider_selection
     
     
     
     
    MsgBox "Trés bien !!"   ' Juste pour s'assurer qu'il n’y a pas de bug !
     
    DoCmd.OpenForm "frmModCons1"
     
    End If
    End Sub
    Maintenant l'erreur d'exécution 3061:
    Trop peu de paramétres : 1 attendu !

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Maintenant le problème est résolu
    le problème vient de la requête sql ! :

    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
     
    Private Sub b_rech_aff_Click()
    Connect
    Dim numaff As String
    'Vérifier que le champ numéro affaire à rechercher n'est pas vide
     
    If IsNull(ld_numaff_mod.Value) Or IsEmpty(ld_numaff_mod.Value) Then
        MsgBox "Vous devez choisir un numéro d'affaire !"
    Else:
      numaff = ld_numaff_mod.Value
      'Instruction sql
      Com = "select * from Affaire where Num_Affaire='" & numaff & "';"
      valider_selection
     
    DoCmd.OpenForm "frmModCons2"
    Form_frmModCons2.zt_numaff = dataset("Num_Affaire")
    Form_frmModCons2.zt_statut = dataset("Statut")
    Form_frmModCons2.zt_datedem = dataset("Date_demande")
     
     
    End If
    End Sub
    Merci beaucoup pour aide !

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Juste une question !
    Est-ce que la fermeture du Recordset est obligatoire !?
    Par ce que je sent que la table Affaire est occupé ! en entrant en Mode création !
    Il écrit Objet dépendent de la table Affaire est ouvert !

  6. #6
    Invité
    Invité(e)
    Par défaut
    Re

    Dés que tu n'as plus besoin d'un objet il faut le libérer, c'est impératif.

    Philippe

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

Discussions similaires

  1. problème select avec utilisation de if
    Par Florent08800 dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 22/06/2007, 22h12
  2. problème select avec gettexte()
    Par ulysse031 dans le forum JDBC
    Réponses: 6
    Dernier message: 06/06/2007, 11h04
  3. Réponses: 3
    Dernier message: 07/02/2006, 14h25
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 11h20
  5. Problème de "select" avec des valeurs a null
    Par SchpatziBreizh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/07/2005, 17h08

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