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

VB 6 et antérieur Discussion :

fermeture d'un recorset ADO


Sujet :

VB 6 et antérieur

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut fermeture d'un recorset ADO
    Bonjour, j'ai une question débutant, désolé...
    Soit une MSHFlexGrid1 liée à un contrôle ADO, une textbox "text1" et une BD Access 2000.
    Pourriez-vous m'expliquer SVP pourquoi je suis obligé de laisser ouvert le recordset dans le code expérimental ci-dessous pour qu'il fonctionne.
    Si on ferme le Recorset en fin de procédure, impossible de mettre à jour la nouvelle requête dans la grille le coup suivant quand on change la valeur de "text1". (Je ne comprends pas car il devrait être réinitialisé à chaque clic sur Command1). Quel serait le code propre et orthodoxe ?
    ------------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Form_Load()
    Set MSHFlexGrid1.DataSource = Adodc1
    Text1 = 0
    End Sub
     
    Private Sub Command1_Click()
    With Adodc1
    .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\COMPTA2000.mdb"
    .CommandType = adCmdText
    .RecordSource = "SELECT * FROM Devis WHERE TotalTTC > " & Replace(Text1, ",", ".") & "" 
    '.Recordset.Close '(Rien ne fonctionne si on ferme ici !)
    End With
    End Sub

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Bonjour,

    Comme je n'ai pas eu de réponse à mon problème j'ai essayé de programmer de façon plus orthodoxe (?) avec l'objet ADODB, conformément au tutoral.

    1) J'ai de bons résultats avec la procédure "Command2_Click".

    2) Mais je n'arrive pas à exécuter correctement la requête dans "Command4_Click" qui ne revoie qu'un seul enregistrement.
    J'aimerais savoir utiliser correctement l'objet ADODB.Command, merci de bien vouloir corriger mon code.

    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
    44
    45
    46
    47
    48
    49
    50
    Private Sub Command2_Click()
    'affiche correctement la requête dans la grille
    'Déclaration des variables
    Dim cnx As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim Str As String
    'Instanciation des variables
    Set cnx = New ADODB.Connection
    Set rst = New ADODB.Recordset
    'Définition de la chaîne de connexion
    cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\COMPTA2000.mdb"
    cnx.Open
    'Définition du recordset
        rst.CursorLocation = adUseClient
        rst.CursorType = adOpenForwardOnly
        rst.LockType = adLockReadOnly
        rst.ActiveConnection = cnx
    'Exécution de la requête
        rst.Open "SELECT * FROM Devis WHERE TotalTTC > " & Replace(Text1, ",", ".") & "", cnx
    'Affichage dans la grille
    Set MSHFlexGrid1.DataSource = rst
    'Fermeture de la base de données
        rst.Close
        Set rst = Nothing
    End Sub
     
    Private Sub Command4_Click() 
    ' Echoue et n'affiche que le premier rang de la table
    'Déclaration des variables
    Dim cnx As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rst As ADODB.Recordset
    'Instanciation des variables
        Set cnx = New ADODB.Connection
        Set cmd = New ADODB.Command
        Set rst = New ADODB.Recordset
    'Connexion à la base de données
        cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\COMPTA2000.mdb"
        cnx.Open 
    'Préparation de l'objet Command
        cmd.ActiveConnection = cnx
        cmd.CommandText = "SELECT * FROM Devis"
    'Exécution de la requête
        Set rst = cmd.Execute
    'Affichage dans la grille
        Set MSHFlexGrid1.DataSource = rst
    'Fermeture de la base de données
        rst.Close
        Set rst = Nothing
    End Sub

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Salut

    Peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'Affichage dans la grille
        Set MSHFlexGrid1.DataSource = rst
        DoEvents '<------------------------Ajout--------
        MSHFlexGrid1.Refresh '<-------------Ajout--------
        'Fermeture de la base de données
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Salut

    Peut être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'Affichage dans la grille
        Set MSHFlexGrid1.DataSource = rst
        DoEvents '<------------------------Ajout--------
        MSHFlexGrid1.Refresh '<-------------Ajout--------
        'Fermeture de la base de données
    Bonsoir ProgElecT et merci pour la suggestion. Malheureusement ça ne change rien, je n'ai toujours qu'un seul enregistrement qui apparait (le premier en fait).
    D'autre part j'ai ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'Exécution de la requête
        Set rst = cmd.Execute
        MsgBox rst.RecordCount '<-------ajout
    Et à ma grande surprise j'obtiens comme valeur dans la Msgbox : -1
    Comment un recordset peut-il avoir un nombre négatif d'éléments et néanmoins en contenir au moins un qui apparait dans la grille ???

  5. #5
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 132
    Par défaut
    Mise a par si tu voulais savoir comment utiliser l'objet Command , il te reste la possibilité d'utiliser l'ouverture de l'objet Recordset , le code suivant a été vérifié, il fonctionne très bien
    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
    ' Echoue et n'affiche que le premier rang de la table
    'Déclaration des variables
    Dim cnx As ADODB.Connection
    'Dim cmd As ADODB.Command
    Dim rst As ADODB.Recordset
    'Instanciation des variables
        Set cnx = New ADODB.Connection
        'Set cmd = New ADODB.Command
        Set rst = New ADODB.Recordset
    'Connexion à la base de données
        'cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\COMPTA2000.mdb"
        cnx.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\PersoFrancis\Constructeur de requetes\BDpourEssais.mdb"
        cnx.Open
    'Préparation de l'objet Command
        'cmd.ActiveConnection = cnx
        'cmd.CommandText = "SELECT * FROM Devis"
    'Exécution de la requête
        rst.Open "Principal", cnx, adOpenDynamic, adLockOptimistic
        'Affichage dans la grille
        DoEvents
        Set MSHFlexGrid1.DataSource = rst
        MSHFlexGrid1.Refresh
    'Fermeture de la base de données
        rst.Close
        Set rst = Nothing
    Personnellement je n'utilise jamais l'objet Command (question d'habitude), et je ne sais pas l'utiliser.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 40
    Par défaut
    Citation Envoyé par ProgElecT Voir le message
    Mise a par si tu voulais savoir comment utiliser l'objet Command , il te reste la possibilité d'utiliser l'ouverture de l'objet Recordset , le code suivant a été vérifié, il fonctionne très bien. Personnellement je n'utilise jamais l'objet Command (question d'habitude), et je ne sais pas l'utiliser.
    Merci d'avoir vérifié, c'est très sympa !
    Effectivement j'expérimente car j'ai lu dans le tutoral que l'objet Command permettait d'utiliser plus facilement des paramètres, d'où ma curiosité. Je ne sais pas si c'est simplement une commodité ou si on peut faire des requêtes impossible autrement avec l'objet Recorset.
    Si quelqu'un a un petit exemple qui fonctionne dans VB6 avec l'objet Command, je suis preneur...
    @+

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/09/2008, 09h56
  2. Connexion ADO AS400 problème de fermeture EXCEL
    Par JYL74 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/11/2007, 11h16
  3. [D7][ADO][Access]Fermeture de la BDD
    Par dleu dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/08/2006, 18h45
  4. Réponses: 31
    Dernier message: 30/03/2006, 16h57
  5. ado et fermeture de recordset
    Par hi_vivie dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 30/11/2005, 14h38

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