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 :

Modifier le contenus d'une table Access affiché dans un FlexGrid


Sujet :

VB 6 et antérieur

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut Modifier le contenus d'une table Access affiché dans un FlexGrid
    Bonjour à tous,

    je suis novice en programmation & je commence mes premiers pas en Visual Basic 6, notament pour cause de stage. J'aurais aimé savoir comment modifier le contenus de mes tables Access qui elles sont affichés dans un FlexGrid. Pour effectuer la liaison Access - VB j'utilise DAO.

    Merci, Camille

  2. #2
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Hé bien je te conseil donc de jeter un oeil sur les tutoriels(liens dans ma signature) dans la section Base de données, tu verras il y a des tutoriels DAO très bien fait...

    Cordialement

    PS: je préfère personnellement ADO à DAO, je trouve celà plus "facile" et intuitif...

  3. #3
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Justement pour reussir à connecter ma base de données j'ai utilisé des tutoriels (très bien faits au passage) présents sur le site. Si ma mémoire et bonne j'avais trouvé le lien sur un des forum & c'etait toi qui les recommandais.

    J'ai décidé de m'inscrire sur le forum justement car je ne trouve plus l'aide necessaire dans les tutoriels.

    Merci d'avoir répondu, Camille

  4. #4
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Il me semblais bien avoir croisé ton pseudo en effet ^^

    Et bien le fait que ta table soit ou non afficher dans un FlexGrid ou un DataGrod ne change rien à l'affaire il me semble.
    En toute logique tu travaille sur ta table et lorsque les changements(ajout ou suppression) sont terminer tu "met à jour" ton FlexGrid...

    Là encore plusieurs moyen...
    Le bourin rechargerait la page, de cette manière le FlexGrid serait automatiquement à jour...

    En espérant t'aider...

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Par défaut
    En utilisant un DbGrid lié à un DataControl, la mise à jour est automatique dès que tu changes de ligne.

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    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
    Private Sub fxgClients_Click()
     
    If fxgClients.Col = 0 Then 
       If fxgClients.Row < NbEnregistrement + 1 Then
       Toto = MsgBox("Le numéro d'identifiant ne peut être modifié!", vbInformation, "Numéro d'identifiant")
       End If 
    End If
     
    If fxgClients.Col = 1 Then
       If fxgClients.Row < NbEnregistrement + 1 Then
       Toto = InputBox("Modifier le contenu du champs :", "Modifictation du Nom")
     
       ' Modification & mise à jour du recordset
     
       Set rsClients = dbTaBaseDeDonnees.OpenRecordset("clients", dbOpenTable)
     
       ' O_o Selectionner un enregistrement dans la table, pour le modifier: Mon souci
     
       fxgClients.Row = IdentifiantOccurenceChamps
     
    ' Que mettre ici ?
     
       rsClients.Edit
       rsClients.Fields("Nom").Value = Toto
       rsClients.Update
     
       'rafraichir l'affichage & le mettre en forme du flexgrid
     
       Call FonctionPerso_RafraichirEnregistrement
       Call FonctionPerso_MiseEnForme
     
       End If
    End If
     
    End Sub
    Depuis hier j'ai en partie résolu mon souci mais quelque chose bloc toujours j'ai préféré citer mon code pour que cela soit plus clair & me permettre d'avoir une réponse précise.

    Pour plus de precison mon flexgrid contient 4 colonnes, identifiant (que l'on ne peut modifier), nom, prénom & age, pour l'instant 6 enregistrements y sont listés. Le tout est contenus dans une table nommée clients.

    Merci aux personnes qui ont eu la gentillesse de me repondre hier & celle qui le feront peut etre par la suite.

    Camille

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Par défaut
    Bonjour,

    puisque tu remplis ta grille manuellement, comment affectes-tu l'index du champ dans la grille ? Il faudrait voir la façon de la remplir...

    Par la suite, tu récupères cet index lors du clic sur une colonne cachée ou non, puis en DAO, tu utilises la propriété .Index de ton recordset, et tu recherches ton enregistrement avec la méthode Seek

    ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    rsClients.Index = "monidex"
    rsClients.Seek "=", valeur_index_récupéré_dans_la_grille
    If rsClients.NoMatch = False Then
        rsClients.Edit
        ...

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    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
    ' Indique le nombre d'enregistrement dans la table Clients
     
    NbEnregistrement = rsClients.RecordCount
    Label2.Caption = NbEnregistrement
     
    For I = 1 To NbEnregistrement
     
    fxgClients.Rows = NbEnregistrement + 1
    fxgClients.Cols = 4
     
       fxgClients.TextMatrix(0, 0) = "Num Id"
       fxgClients.TextMatrix(0, 1) = "Nom"
       fxgClients.TextMatrix(0, 2) = "Prénom"
       fxgClients.TextMatrix(0, 3) = "Age"
     
       fxgClients.TextMatrix(I, 0) = rsClients![NumID]
       fxgClients.TextMatrix(I, 1) = rsClients![Nom]
       fxgClients.TextMatrix(I, 2) = rsClients![Prenom]
       fxgClients.TextMatrix(I, 3) = rsClients![Age]
     
       rsClients.MoveNext
     
    Next I
     
    Call FonctionPerso_MiseEnForme
     
    End Sub
    Voici ma facon de remplir ma grille, comme je débute je ne sais pas si s'est la meilleur facon mais je comprend au moins le mecanisme.

    Cordialement

  9. #9
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Bonjour,

    Ton code n'a pas l'air faux...
    Si je devais me permettre une remarque c'est que ces instructions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    fxgClients.Cols = 4
     
       fxgClients.TextMatrix(0, 0) = "Num Id"
       fxgClients.TextMatrix(0, 1) = "Nom"
       fxgClients.TextMatrix(0, 2) = "Prénom"
       fxgClients.TextMatrix(0, 3) = "Age"
    N'ont pas besoin d'être dans la boucle For étant donné que tu les fixes toi, sans utiliser l'indice de boucle. Tu gagnerais en rapidité d'exécution(mais surtout en logique^^) à les faire avant...

    Mais ceci n'est pas la source de ton problème...
    Et j'avoue, excuse moi d'avance, que je ne sais plus trop quel est ton problème...

    Je pense qu'une récapitulation serait, au moins pour moi, nécessaire...

    Cordialement

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Tu gagnerais en rapidité d'exécution(mais surtout en logique^^) à les faire avant...
    Merci pour cette precision je n'y avais jamais songé. Maintenant je l'aurais en tête pour la suite du projet.

    Tu dis que mon code n'a pas l'air faux, c'est un peu vrai, dans mon precedent post j'ai oublié de preciser une chose lorsque j'execute mon projet j'arrive à modifier la premiere ligne de la colonne designée, mais uniquement celle ci.

    Cordialement. Camille

  11. #11
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Citation Envoyé par Agrume-Framboise
    j'arrive à modifier la premiere ligne de la colonne designée, mais uniquement celle ci.
    Alors si je comprend bien tu voudrais changer les données de ta base de données en changeant ce qu'il y a d'écrit dans ton FlexGrid ???

    Si c'est le cas ce n'est plus exactement la même question que lorsque tu es arrivé...

    Parce que changer les données d'une base c'est facile. Les changer à travers un FlexGrid "en temps réel" risque d'être une autre paire de manche!



    Parce que n'oublie pas que tu n'es pas utilisateur, je précise ceci car tu souligne que tu es débutant, tu es le programmeur. C'est à dire que c'est peut être toi qui doit faire croire à l'utilisateur qu'il change les données directement dans le FlexGrid...
    Mais entre être et paraitre il y a une marge


    Redéfinis, s'il te plait, exactement ce que tu veux, ce que tu as, dans quel but veux-tu obtenir ceci... Car certaines fois ce n'est pas le code qui est faux, mais la manière de le concevoir


    Cordialement

  12. #12
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    Alors si je comprend bien tu voudrais changer les données de ta base de données en changeant ce qu'il y a d'écrit dans ton FlexGrid ???
    C'est exactement ce que je cherche à faire! Mes données sont affichées dans un Flexgrid qui devrait me permettre de m'informer du contenus de la table & aussi pouvoir le changer à tout moment par un simple clic & une Inputbox sur l'une des cases: excepté celle contenant les identifiants (mais ceci est résolu).

    Redéfinis, s'il te plait, exactement ce que tu veux, ce que tu as, dans quel but veux-tu obtenir ceci... Car certaines fois ce n'est pas le code qui est faux, mais la manière de le concevoir
    Alors j'ai une table clients sous Access 2003, sous Visual Basic je souhaite afficher son contenu dans un Flexgrid (pour faciliter la lecture des données & sa modification) en effet par la suite cette table devrait contenir enormement d'information donc le flexgrid me semble le contrôle le plus adapté, et je ne veux pas en changer.

    J'espere que c'est assez precis comme description.

    Cordialement, Camille

    Ps: je suis débutante

  13. #13
    Membre chevronné Avatar de La Praline
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Par défaut
    Citation Envoyé par Agrume-Framboise
    C'est exactement ce que je cherche à faire!
    Certaines fois il m'arrive de comprendre... chose rare, aprécie-le
    Citation Envoyé par Agrume-Framboise
    Mes données sont affichées dans un Flexgrid qui devrait me permettre de m'informer du contenus de la table
    Ca tu sais déjà le faire il me semble. A vrai dire ce n'est pas bien compliqué !
    Citation Envoyé par Agrume-Framboise
    & aussi pouvoir le changer à tout moment par un simple clic & une Inputbox sur l'une des cases
    Le gros du problème va donc réisder ici... nous sommes d'accord
    Citation Envoyé par Agrume-Framboise
    excepté celle contenant les identifiants (mais ceci est résolu).
    Faites péter le Champomy !!!
    Citation Envoyé par Agrume-Framboise
    Alors j'ai une table clients sous Access 2003, sous Visual Basic je souhaite afficher son contenu dans un Flexgrid
    On admettra Visual basic 6 (en toute logique...)
    Citation Envoyé par Agrume-Framboise
    par la suite cette table devrait contenir enormement d'information donc le flexgrid me semble le contrôle le plus adapté
    Ca se pourrait bien
    Citation Envoyé par Agrume-Framboise
    et je ne veux pas en changer.
    Ainsi soit-il !!
    Citation Envoyé par Agrume-Framboise
    J'espere que c'est assez precis comme description.
    Autant que mes citations
    Citation Envoyé par Agrume-Framboise
    Ps: je suis débutante
    Autant pour moi...
    Je suis désolé (sans e )


    ___________________________________________________

    Comme je te le disais, à moins d'une grave erreur de ma part, auquel cas je me flagèlerais le dos en guise de punition, il ne me semble pas qu'il soit possible de changer les données d'une base de données simplement en les changeant dans le FlexGrid.
    Ce qui m'intrigue c'est que tu arrives à le faire pour la première ligne seulement... Seulement quoi? Que se passe-t-il pour la seconde ???


    Donc si mes supputations s'avèrent correctes, il faudra te dirigé vers ce que je t'ai préconisé plus haut... A savoir l'entourloupe d'utilisateur !

    N'ayant pas le temps de tester ça tout de suite(ben ouais y'en a qui bosse aussi !!) j'ai tout de même eu une sorte de petite idée, qui aura au moins la descence de te faire réfléchir un peu...

    En partant du principe que l'on ne peut changer directement une case du FlexGrid, on peut tout de même savoir sur quelle case l'utilisateur clique(ca c'est faisable!).
    Ce que tu pourrais faire(ca reste un exemple...) c'est d'afficher une TextBox aux coordonnées de la souris lors du clique.
    Ensuite l'utilisateur entre la nouvelle valeur. Et lorsqu'il appui sur la touche Entrée(ou autre...) ca va changer la valeur voulues en base de données, et, dans la foulée, on rafraichit l'affichage du FlexGrid donnant ainsi l'impression à l'utilisateur d'avoir changé en temps réel la valeur qu'il voulait modifier...

    Sur le principe tu me suis ?



    Bon alors j'en conviens c'est tout beau tout jolie... Maintenant il va falloir le faire !! Et de fait ca risque de devenir nettement plus sportif
    Après tout ce ne serait pas drôle sinon !

    Donc pour cela il va falloir que tu apprennes à te servir de plusieurs controls et mécanismes aussi pratique que puissant...
    A savoir l'access aux bases de données via ADO.
    Ca tu sais à priori(merci Jean Marc!!)
    La manipulation de Recordset.
    Dans les mêmes tuto normalement. Comprendre le principe, etc...(nous sommes là pour t'aider...)
    Savoir creer une TextBox dynamiquement
    Nous sommes là pour t'expliquer aussi...
    Receuillir les coordonnées de la souris...
    Très simple...
    Et pour finir savoir récupérer un appui sur la touche Entrée...


    Si déjà tu arrives à "maitriser" ces quelques points, on pourra faire quelques chose de bien marrant!!!


    J'espère t'avoir, sinon aidé, au moins fait réfléhir. Je te souhaite beaucoup de courage !
    Ne perd pas de vue que est ton ami, que la , et les tutos le sont aussi. Evidement si tu as une question n'hésite pas à nous la poser, il y aura toujours quelqu'un pour répondre...

    Amitiés

  14. #14
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 10
    Par défaut
    En partant du principe que l'on ne peut changer directement une case du FlexGrid, on peut tout de même savoir sur quelle case l'utilisateur clique(ca c'est faisable!).
    Ce que tu pourrais faire(ca reste un exemple...) c'est d'afficher une TextBox aux coordonnées de la souris lors du clique.
    Ensuite l'utilisateur entre la nouvelle valeur. Et lorsqu'il appui sur la touche Entrée(ou autre...) ca va changer la valeur voulues en base de données, et, dans la foulée, on rafraichit l'affichage du FlexGrid donnant ainsi l'impression à l'utilisateur d'avoir changé en temps réel la valeur qu'il voulait modifier...
    C'est exactement ce que je voulais, tu as bien ciblé le souci.

    Donc pour cela il va falloir que tu apprennes à te servir de plusieurs controls et mécanismes aussi pratique que puissant...
    A savoir l'access aux bases de données via ADO.
    Ca tu sais à priori(merci Jean Marc!!)
    DAO, je ne veux pas utiliser ADO meme si tu as l'air de le préférer.

    PS: je préfère personnellement ADO à DAO, je trouve celà plus "facile" et intuitif...
    Personnelement je ne le trouve pas insurmontable & le tutoriel présent sur le site m'a permis d'apprendre de 0 à l'utiliser.

    Pour finir j'ai reussis à resoudre mon souci avec votre aide & celle d'une connaissance, je vous en remercie. Je post mon code pour les curieux et peut etre servira t'il à quelqu'un qui rencontrera le meme souci que moi.

    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
    Private Sub fxgClients_Click()
     
    ' CLIC SUR LE N°ID
     
    If fxgClients.Col = 0 Then
       If fxgClients.Row < NbEnregistrement + 1 Then
       Toto = MsgBox("Le numéro d'identifiant ne peut être modifié!", vbInformation, "Numéro d'identifiant")
       End If  
    End If
     
    ' CLIC DANS LA COLONNE NOM & MODIFICATION
     
    If fxgClients.Col = 1 Then   
       If fxgClients.Row < NbEnregistrement + 1 Then
       Toto = InputBox("Modifier le contenu du champs :", "Modifictation du Nom")
       If Toto = "" Then Exit Sub
     
       'Modification & mise à jour du recordset
     
    intNumID = fxgClients.TextMatrix(fxgClients.Row, 0)
     
    rsClients.Close
    Set rsClients = Nothing
     
    Set rsClients = dbTaBaseDeDonnees.OpenRecordset("SELECT * FROM clients WHERE NumID=" & CStr(intNumID)) ', dbOpenTable)
     
       rsClients.Edit
       rsClients.Fields("Nom").Value = Toto
       rsClients.Update
     
    rsClients.Close
    Set rsClients = Nothing
    Set rsClients = dbTaBaseDeDonnees.OpenRecordset("clients", dbOpenTable)
     
       '& rafraichir l'affichage & le mettre en forme du flexgrid
     
       Call FonctionPerso_RafraichirEnregistrement
       Call FonctionPerso_MiseEnForme
     
       End If
    End If
    Voilà mon souci est officiellement résolu

    Cordialement, Camille

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

Discussions similaires

  1. Afficher le code SQL d'une table access | Possible ? |
    Par beegees dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 18/01/2019, 17h30
  2. Réponses: 11
    Dernier message: 12/09/2012, 17h25
  3. [ACCESS 2000] Problème pour modifier un champ d'une table
    Par DeFCrew dans le forum VBA Access
    Réponses: 4
    Dernier message: 21/08/2008, 15h25
  4. [VB 2005 express] Afficher un champ d'une table Access 2007
    Par Xsara 167 cv dans le forum Windows Forms
    Réponses: 4
    Dernier message: 22/03/2007, 14h16
  5. [SQL Access] Modifier la structure d'une table
    Par Le Lézard dans le forum Bases de données
    Réponses: 6
    Dernier message: 28/06/2004, 15h03

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