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

IHM Discussion :

Remplacer le recordset d'un formulaire [AC-2003]


Sujet :

IHM

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut Remplacer le recordset d'un formulaire
    Bonjour

    J'aimerais faire un formulaire dynamique dans lequel je définis j'injecte un recordset défini en ADO, mais j'ai une erreur erreur "Opération non autorisée pour ce type d'objet"

    Savez-vous s'il existe une solution pour contourner le problème ?

    Merci

    Mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim oConn As ADODB.Connection
    Dim oRcset As ADODB.Recordset
    Set oConn = New ADODB.Connection
    oConn.Provider = "Microsoft.Jet.OLEDB.4.0"
    oConn.ConnectionString = CurrentProject.Path & "\" & CurrentProject.Name
    oConn.Open
    Set oRcset = New ADODB.Recordset
    oRcset.CursorLocation = adUseClient
    oRcset.Open strsql, oConn
    oRcset.Sort = "LADATE " & sens
    Me.calendrier Form.Recordset = oRcset

  2. #2
    Membre éclairé
    Homme Profil pro
    Regisseur
    Inscrit en
    Octobre 2006
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Regisseur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Octobre 2006
    Messages : 475
    Points : 850
    Points
    850
    Par défaut
    Bonjour guidav.
    La dernière ligne ne me semble pas claire.
    Si c'est un formulaire j'écrirais plutot:
    si c'est un sous-formulaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms!TonForm!TonSSForm.Form.Recordset = oRcset
    Cdlt

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci, c'est un sous-formulaire, d'où le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.calendrier Form.Recordset = oRcset
    Cependant, j'ai fait le test avec un formulaire simple, ça ne fonctionne pas non plus.

  4. #4
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    Pourquoi ré-ouvrir currentproject ???
    Que contient strsql ?

    Il suffit d'écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.RecordSource = "select ... from matable"
    me.orderby = ...
    si c'est fait depuis une autre fenêtre, il y a plusieurs syntaxes, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    forms("masousfenetre").RecordSource = ...
    me.fille.RecordSource = ...
    Enfin je ne vois pas bien ce que VBA pourrait faire de l'espace entre calendrier et form
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  5. #5
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    strsql contient une requête pour laquelle la clause ORDER BY ne fonctionne pas (en conflit avec des DISTINCT), d'où l'utilisation d'un recordset en ADO.

    Autrement, ce n'est pas obligatoire d'ouvrir la connexion en ADO, même dans la base courante ?
    Je ne maîtrise pas bien ADO, DAO est quand même plus simple et mieux optimisé pour Jet.

    (il n'y a pas d'espace dans mon code, c'est bien un point !)

  6. #6
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Je confirme, lorsqu'il s'agit d'un formulaire, on parle de source d'enregistrement.
    C'est donc la propriété recordsource de l'objet form qu'il faut modifier:
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

  7. #7
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Citation Envoyé par mc.schmer Voir le message
    Je confirme, lorsqu'il s'agit d'un formulaire, on parle de source d'enregistrement.
    C'est donc la propriété recordsource de l'objet form qu'il faut modifier:
    NON, la propriété recordsource est une chaîne de caractère. On peut la renseigner par une chaîne représentant une requête SQL ou le nom d'une requête/table.
    Je parle bien de renseigner directement le recordset.

  8. #8
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Guidav
    Dans ta chaîne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRcset.Open strsql, oConn
    Que contient donc strsql : Je ne la vois nulle part initialisée si je ne me trompe sauf si passée comme argument dans ta fonction ??

    JimboLion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  9. #9
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut Guidav
    Re-bonjour,

    Partant de ton code source j'ai essayé de comprendere ! Effectivement on peut modifier le recordset et j'ai réussi en procédent de la manière suivante :

    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
    Private Sub Form_Open(Cancel As Integer)
    '
    strsql = "SELECT Chantier.[Numéro de chantier], Chantier.[Nom du chantier], Chantier.Adresse, Chantier.[Code postal] FROM Chantier;"
    '
    Dim oConn As ADODB.Connection
    Dim oRcset As ADODB.Recordset
    Set oConn = New ADODB.Connection
    I_Database = CurrentDb.Name
    oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & I_Database & ";"
     
    Set oRcset = New ADODB.Recordset
    oRcset.CursorLocation = adUseClient
    oRcset.Open strsql, oConn
     
    Set Me.Recordset = oRcset
    End Sub
    Mettre SET dans l'affectation de ton recordset : dernière ligne de ton code !

    En espérant que cela puisse solutionner ton problème...
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

  10. #10
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci, c'est exactement ça. J'ignorais que le recordset d'un formulaire devait être modifié avec Set.


    Citation Envoyé par jimbolion Voir le message
    Re-bonjour,

    Partant de ton code source j'ai essayé de comprendere ! Effectivement on peut modifier le recordset et j'ai réussi en procédent de la manière suivante :

    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
    Private Sub Form_Open(Cancel As Integer)
    '
    strsql = "SELECT Chantier.[Numéro de chantier], Chantier.[Nom du chantier], Chantier.Adresse, Chantier.[Code postal] FROM Chantier;"
    '
    Dim oConn As ADODB.Connection
    Dim oRcset As ADODB.Recordset
    Set oConn = New ADODB.Connection
    I_Database = CurrentDb.Name
    oConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & I_Database & ";"
     
    Set oRcset = New ADODB.Recordset
    oRcset.CursorLocation = adUseClient
    oRcset.Open strsql, oConn
     
    Set Me.Recordset = oRcset
    End Sub
    Mettre SET dans l'affectation de ton recordset : dernière ligne de ton code !

    En espérant que cela puisse solutionner ton problème...

  11. #11
    Membre habitué
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2009
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 97
    Points : 131
    Points
    131
    Par défaut
    Moi j'ignorais carrément qu'il était possible de modifier directement le recordset d'un formulaire!
    Désolé pour ma réponse ignorante

    Mais je ne vois pas bien quelle est l'utilité? Dans quel cas cette manip. devient intéressante?
    Labor omnia vincit improbus (Un travail opiniâtre vient à bout de tout)


    Vous vous posez une question? Quelqu'un se l'est certainement posée avant vous!
    Avant de poster, n'oubliez pas de consulter les FAQ Access et VBA ainsi que les tutoriels.
    Utilisez le champ de recherche sans modération pour fouiller les forums.

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

Discussions similaires

  1. remplacer espace par tiret dans formulaire
    Par referenceur-tv dans le forum Langage
    Réponses: 17
    Dernier message: 03/06/2008, 14h52
  2. Remplacer un texte par un formulaire
    Par robocop333 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 01/05/2008, 15h49
  3. Probleme de recordset sur un formulaire
    Par BugAmbulant dans le forum VBA Access
    Réponses: 3
    Dernier message: 12/07/2007, 11h06
  4. [DAO]DAO.Recordset et sous formulaire
    Par caossak dans le forum VBA Access
    Réponses: 9
    Dernier message: 24/04/2007, 12h32
  5. Réponses: 2
    Dernier message: 03/07/2006, 14h09

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