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 :

[VB]Pb update entre mon group textbox(i) et ma DataSource


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Par défaut [VB]Pb update entre mon group textbox(i) et ma DataSource
    salut,

    suite à mon message précédent, voici mon code (qui fonctionne !! ) :
    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
     
    Dim bnd As BindingCollection
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set bnd = New BindingCollection
     
    Dim MonSQL As String
     
    MonSQL = "SELECT * FROM donnees where donnees.id=13328"
    cn.Provider = "MSDataShape"
    cn.Open ChaineADO
    rs.CursorLocation = adUseClient
    rs.Open MonSQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
    rs.MoveFirst
    If rs.EOF <> True Or rs.BOF <> True Then
        Set bnd.DataSource = rs
        With bnd
            .Add MyText(0), "Text", "Nom", , "Nom"
            .Add MyText(1), "Text", "Prenom", , "Prenom"
            .Add MyText(2), "Text", "Adresse", , "Adresse"
            ...
        End With
    End If
    mon enregistrement s'affiche parfaitement mais lorsque je modifie la valeur d'un champ sur mon textbox, la maj de ma datasource ne s'effectue pas.
    je dois donc passer à côté d'une propriété de type allowupdate sur mon textbox ? non ?

  2. #2
    Membre éprouvé
    Inscrit en
    Mars 2005
    Messages
    131
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 131
    Par défaut
    Bonjour MITCH31

    c'est quoi d'abords le BindingCollection ?

    le BindingCollection c'est relier une propriété d'un objet avec une valeur d'un champ d'une Table

    dans ton code tu as relier la propriété Text des Objets MyText(0).,MyText(1).... avec les valeurs des champs Nom,Prenom...

    Autre exemple :

    si par exemple t'as une table qui contient un champ Couleur qui contient des couleurs en hexa , tu veux lier la propiété BackColor d'un Label par exemple pour qu'elle prenne la valeur De Ce Champ

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bnd.Add label1, "Backcolor","Couleur"
    Alors , on relie Juste les valeurs , et pas le Champs Lui Même, c'est Pourquoi ,tu modifie ta zone de texte,les changement ne sont pas affecté dans la base de donnée

    Merci

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Par défaut
    salut,

    aucun moyen donc d'afficher ma source dans un textbox et de modifier celle ci ?

  4. #4
    Membre expérimenté Avatar de AdHoc
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 245
    Par défaut
    Personnellement je mettrai un bouton "enregistrer" qui permet de faire une requete d'update de l'enregistrement.
    Mais faut ecrire du code

  5. #5
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Par défaut
    Bonjour

    On peut parfaitement modifier les valeurs d'un enregistrement, ou en créer un nouveau, en utilisant des champs liés aux données par un collection Binding. Je l'ai d'ailleurs précisé à MITCH. Sinon, à quoi serviraient ces objets :

    Pour s'en convaincre, il n'y a qu'à voir le praticiel "Acces aux données ADO" accessible par l'adresse en signature. L'opération y est décrite et UTILISEE.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Par défaut
    re-salut,

    1 - j'ai conservé mon code ci-dessus !
    2 - j'ai téléchargé le projet de JACMA (les modifications sont bien prises en compte = modification à partir du textbox)

    mais là, je ne sais comment avancer sur ce problème ??

  7. #7
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Par défaut
    Citation Envoyé par MITCH31
    j'ai téléchargé le projet de JACMA (les modifications sont bien prises en compte = modification à partir du textbox)
    Ouf, heureusement

    Citation Envoyé par MITCH31
    mais là, je ne sais comment avancer sur ce problème ??
    Là, moi non plus. Je ne vois pas d'anomalie dans ton code...

    Si j'ai bien compris, tes TextBox affichent correctement les données issues de ton recordset. Les binding sont donc opérants. Bien que tu ne le précises pas, je pense que tu as des boutons qui te permettent de naviguer dans le recordset.

    Que fais-tu (exactement et en détail) après avoir inséré une modification dans une des TextBox? (validation, passage à l'enregistrement suivant, passage à un autre champ, précédent..., fermeture de la feuille, etc.).

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Par défaut Re JACMA
    J'affiche l'ensemble de mes données ds un MSHFlexGrid (pourquoi ? = pour une meilleure ergonomie et une meilleure visibilité (ex= l'ensemble des contacts attachés au user connecté IDuser)

    suite à l'évènement : clic sur grille (je récupère l'IDContact) je veux afficher mon contact selectionné dans mon fameux gpe de contrôle TextBox d'ou 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
     
    Dim bnd As BindingCollection
    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset
    Set bnd = New BindingCollection
     
    Dim MonSQL As String
     
    MonSQL = "SELECT * FROM CONTACT where CONTACT.id=13328"
    cn.Provider = "MSDataShape"
    cn.Open ChaineADO
    'rs.CursorLocation = adUseClient
    rs.Open MonSQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
    rs.MoveFirst
     
    If rs.EOF <> True Or rs.BOF <> True Then
        Set bnd.DataSource = rs
        With bnd
            .Add MyText(0), "Text", "Nom"
            .Add MyText(1), "Text", "Prenom"
            .Add MyText(2), "Text", "adresse"
        End With
    end if

  9. #9
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Par défaut
    Quelques points:
    1°/ pourquoi MSDataShape? A l'évidence tu ne travaille pas sur un recordset hiérarchique et donc une connexion classique avec le simple provider Provider=Microsoft.Jet.OLEDB.4.0 y suffirait.
    De toutes façons, je ne pense pas que ta chaîne SQL convienne avec le provider MSDataShape.
    2°/ même remarque pour l'utilisation d'une mshFlexGid. Une simple DataGrid serait suffisants, voire une simple liste. Tu as un exemple dans Initiation accès aux données, où un clic sur l'item d'une liste t'affiche les information de l'nregistrement correspndant dans des TextBox.
    3°/ La chaîne SQL???...

    Enfin bref, un certain nombre de choses. Je crois préférable de repartir sur de bonnes bases, c'est à dire sur le code qui suit.

    Il te faut créer un projet, une feuille avec un groupe de 3 txtbox, deux boutons de commande pour la navigation et une datagrid. Tu colles le code dans ta feuille, et cela fonctionne (adapte au besoin la chaîne de connexion en fonction de la position de ta base de données).

    Tu peux parcourir le recordset avec les deux boutons de navigation (attention, pas de sécurité pour EOF et BOF). Les textbox et la grille sont synchro (c'est normal, c'est le même recordset pour la grille et la collection binding). Si tu cliques sur une ligne de la grille, les textbox affichent le contenu de l'enregistrement sélectionné. Si du modifies une textbox, passes à l'enregistrement suivant (ou précédent) et reviens sur l'enregistrement modifié, ou encore ferme la feuille et relance, tu verras que la modif a été prise en compte.
    Je n'ai pas traité l'ajout d'un nouvel enregistrement.
    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
    Option Explicit
    Dim cn As ADODB.Connection
    Private WithEvents rsCorrespondants As ADODB.Recordset
    Dim bndCorrespondant As BindingCollection
     
    Private Sub Form_Load()
     
      Dim SQL As String
      Dim strConnex As String
      Dim i As Integer
      Set cn = New ADODB.Connection
      Set rsCorrespondants = New ADODB.Recordset
      Set bndCorrespondant = New BindingCollection
     
      'Chaîne de connexion
      strConnex = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Developpez.com\Essais réponses\Agenda\Agenda.mdb;Persist Security Info=False"
      'Requête SQL
      SQL = "SELECT * FROM Correspondants"
      'Connexion
      cn.Open strConnex
      'Création du recordset
      rsCorrespondants.CursorLocation = adUseClient
      rsCorrespondants.Open SQL, cn, adOpenDynamic, adLockOptimistic, adCmdText
     
      Set DataGrid1.DataSource = rsCorrespondants
     
      'Définit le jeu d'enregistrements comme source de données (DataSource) de la collection Bindings.
      Set bndCorrespondant.DataSource = rsCorrespondants
      With bndCorrespondant
        .Add txtCorresp(0), "Text", "Nom", , "Nom"
        .Add txtCorresp(1), "Text", "Prenon", , "Prenom"
        .Add txtCorresp(2), "Text", "Adresse", , "Adresse"
      End With
     
    End Sub
     
    Private Sub cmdNav_Click(Index As Integer)
     
      Select Case Index
        Case 0
          rsCorrespondants.MovePrevious
        Case 1
          rsCorrespondants.MoveNext
      End Select
     
    End Sub

  10. #10
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 81
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Par défaut
    Bonjour
    Vas voir à l'adresse indiquée ci-après. Cela devrait t'intéresser aussi.
    http://www.developpez.net/forums/vie...b05785ade2a278

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    88
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 88
    Par défaut
    Salut,

    j'ai oublié de clôturer le problème sorry ! en référence au tutoriel de JACMA et de l'aide ci dessus mon problème est résolu !
    je n'avais pas mis en place un bouton qui se plaçait sur l'enregistrement suivant et donc qui validait mes modicications.

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

Discussions similaires

  1. [VB.NET] Pb sur update à partir champs Textbox
    Par patdez dans le forum ASP.NET
    Réponses: 5
    Dernier message: 28/06/2006, 09h28
  2. interaction entre mon programme & openOffice
    Par artatum dans le forum C
    Réponses: 4
    Dernier message: 10/10/2005, 22h28
  3. Mon contrôle ne se "colle" pas dans mon groupe d'o
    Par saucisson dans le forum Access
    Réponses: 4
    Dernier message: 16/09/2005, 18h08
  4. Communication entre mon appli et un site web
    Par Neilos dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/05/2005, 07h53
  5. Update entre 2 tables
    Par jfox dans le forum SQL
    Réponses: 8
    Dernier message: 04/11/2003, 10h22

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