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 :

Déléguer des propriétés DataField, DataSource, etc dans un usercontrol


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut Déléguer des propriétés DataField, DataSource, etc dans un usercontrol
    Salut,

    Dans un usercontrol, je veux déléguer des propriétés comme DataField, DataSource, ... pour lier mon contrôle à des données.

    Or, même si je n'ai pas de problème dans l'ActiveX, le programme qui utilise ce contrôle ne veut rien savoir puisqu'il m'affiche l'erreur suivante quand je veux afficher ma form :

    Erreur d'exécution 91: Variable objet ou variable bloc With non définie
    Voici le code qui délègue cette propriété :

    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
     
    '======================================
    ' Propriété : DataField
    ' Table de la base de données associée
    '======================================
    Public Property Get DataField() As String
      DataField = txtText.DataField
    End Property
     
    Public Property Let DataField(NewValue As String)
       txtText.DataField = NewValue
       PropertyChanged "DataField"
    End Property
     
    Private Sub UserControl_WriteProperties(PropBag As PropertyBag)
      PropBag.WriteProperty "DataField", txtText.DataField, Nothing
    End Sub
     
    Private Sub UserControl_ReadProperties(PropBag As PropertyBag)
     
      txtText.DataField = PropBag.ReadProperty("DataField", Nothing)
    End Sub
    Comment faire ?

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Pas la bonne méthode.
    Retire la propriété DataField de ton source (le get et le let)


    Dans la barre de menu, choisis outils/Attributs de procédure
    Choisis la propriété, liée à la base de données , dans le combobox affiché
    clique sur le bouton Avancés>> et coches la case à cocher : la propriété est liée aux données
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  3. #3
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut,

    Merci pour ta réponse, cela m'a aidé.

    Seulement, j'ai encore un souci.

    En fait, le principe que je veux appliquer est le suivant :

    J'ai mon usercontrol (un "textbox" amélioré) qui est chargé sur ma form (par load). Il doit être lié à un champ d'une table Access, via ADO.

    J'ai définit un champ "datafieldname", en utilisant la boite "attribut de procédure" en spécifiant que ce champ est lié.

    Puis, dans ma form, j'utilise le code suivant :

    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
      strSQL = "select * from " & strTableName
      strSource = "SHAPE {" & strSQL & "} " & _
                        "AS ParentCMD APPEND ({" & strSQL & _
                        "} AS ChildCMD RELATE IDCONTACT " & _
                        "TO IDCONTACT) AS ChildCMD"
     
      adoPrimaryRS.Open strSource, db, _
                        adOpenStatic, adLockOptimistic
     
          Load fldTextZone(intIndex)
     
          'Création du contrôle dynamique
          Set fldTextZone(intIndex).Container = FrScreenOut
     
         'Définie les propriétés de la zone de texte
          With fldTextZone(intIndex)
     
            'Initialise la source de données
            .DataSource = adoPrimaryRS
            .DataFieldName = adoPrimaryRS.Fields("Nom_Contact")
    End With
    En fait, je tente de lier le textbox amélioré, par la propriété DataFieldName, le champ "Nom_Contact" de la table Access. Mais rien n'y fait.

    Comment puis-je y parvenir ?

    J'espère avoir été assez clair.

    Merci par avance.

  4. #4
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Le fait de lier une propriété aux données, ajoute au composant les propriétés DataField,DataFormat,DataMember et DataSource . Comme pour un composant textbox

    Commences par écrire ton code avec un bete textbox
    Quand il fonctionnera, remplace ce textbox par ton composant perso
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  5. #5
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Salut,

    J'ai fait comme tu as dit, à savoir, créer mon code ado pour qu'il fonctionne avec un textbox traditionnel, et ça marche.

    J'ai remplacé ce contrôle par mon usercontrol.

    J'avais définit un champ "Datafieldname" dans le usercontrol, en utilisant l'attribut de procédures avec les paramètres suivants :

    • La propriété est liée aux données
    • Cette propriété est liée à DataField


    Donc, dans ma form utilisant ce contrôle, je fais comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Set .DataSource = adoPrimaryRS
            .DataFieldName = "Nom_Contact"
    Mais le champ affiche son nom "Nom_Contact" et non pas le contenu !

    Que faut-il faire ?

    Merci par avance.

  6. #6
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
           Set .DataSource = adoPrimaryRS
            .DataField = "Nom_Contact"
    En général, on ne demande de conseils que pour ne pas les suivre ou, si on les a suivis, reprocher à quelqu'un de les avoir donnés
    (ALEXANDRE DUMAS)

    N'hésitez pas à visiter ma page de contributions

  7. #7
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    J'ai bien sûr essayé la propriété Datafield mais... rien !

    J'ai dû oublié quelque chose mais ou ?

  8. #8
    Membre habitué

    Inscrit en
    Avril 2004
    Messages
    646
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 646
    Points : 145
    Points
    145
    Par défaut
    Erreur de ma part, j'avais effectivement oublié quelque chose... le problème est réglé et tout fonctionne impécable.

    Merci.

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

Discussions similaires

  1. Enregistrer des fichiers word, pdf, etc. dans une base de données
    Par mallsoul dans le forum Décisions SGBD
    Réponses: 23
    Dernier message: 10/09/2014, 15h48
  2. Réponses: 0
    Dernier message: 27/09/2010, 19h25
  3. Modification des propriétés d'un Report dans une DW
    Par Nyphel dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 06/05/2008, 11h04
  4. Réponses: 1
    Dernier message: 19/12/2007, 12h55
  5. Réponses: 3
    Dernier message: 12/09/2007, 10h53

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