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

Windows Forms Discussion :

Mode connecté en vb.net?


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut Mode connecté en vb.net?
    BOnjour,

    JE me pose la question suivante : Est-il intéressant, et si oui, comment procéder, de faire mon application en mode connecté (car jusqu'ici, j'ai tjrs fait du mode déconnecté, à par pour remplir des listbox). Mon appli est composé de formulaires reliés à une Bdd, qui va me permettre de mettre à jour,n ajouter, supprimer, etc...

    Le problème du mode déconnecté pour ma part, c'est que dans mon entreprise, plusieurs personnes sont sur la même Bdd et la gardent tout le temps ouverte : si une personne modifie un enregistrement, les autres ne vont pas le voir de suite, si elles se rendent sur cet enregistrement par la suite. En effet, en mode déconnecté, elles ne le verront pas, puisque tous les enregistrement de la table ont été chargés au démarrage de l'application.

    Je connais le datareader, mais mis à part le fait de remplir rapidement des liste, ou autre, celui-ci ne permet pas de faire comme l'équivalent de accès, si je ne me trompe, non? Que puis-je alors faire? J'ai pensé à faire du mode déconnecté, et vérifier à chaque fois si il y avait eu une modification. Mais à ce moment, le principe de faire du mode déconnecté ne perd-il pas tout son sens, car je vais être tout le temps en train de faire des requêtes pour vérifier s'il y a eu modif?

    Si je reste en mode déconnecté, suis-je alors obligé de vider tout mon dataset et de le re-remplir lorsque un seul enregistrement a été modifié, afin que l'utilisateur visualise la modif ? Ce serait lourd, puisque recharger 1000 enregistrement pour un modifié est plûtot tordu.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Y'a des choses pas très claires dans ta demande : c'est quoi "l'équivalent de accés" ?

    Qu'utilise tu comme SGBD ? si c'est SQL Server 2005 tu peux utiliser des "Listener" (je n'ai plus la déclaration en tête) permettant à une appli cliente d'être informée d'une mise à jour de la BDD.

  3. #3
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    apparement y a plus de mode déconnecté en .NET 2 à part en utilisant adodb du framework 1.1, à la vb6 donc

    par contre charger 1000 lignes ca prend moins d'une demi seconde donc c'est pas grave

    ou sinon sq server 2005 permet de faire des "évènements de modification"
    donc ca lance un evenemnt dans ton code vb.net qui te permet de savoir quand mettre à jour si tu ne veux pas le faire basiquement toutes les x minutes

    une autre possibilité c'est quand un utilisateur fait une modif sur une table, tu dialogue avec les autres applis des autre utilisateurs via des sockets pour leur dire de rafraichir, possibilité dans ce cas là de faire une appli server pour gérer ca
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    Equivalent de access, pour moi, c'est:

    ex :5 enregistrements dans ta bdd :-)
    A chaque fois que tu avance d'un enregistrement, celui que tu affiches correspond à la Bdd. c'est à dire qu'au moment t où tu affiches l'enregistrement, il correspond à ce qu'il y a sur la bdd. (pour moi, c'est access).

    Merci à toi sperot51, ça me donne une bonne idée de ce que je peux faire. Ok pour le fait que ce soit rapide de recherger tout le dataset, c noté. J'ai peut-être une solution pour mon appli, mais j'ai toujours un problème, par contre, en mode déconnecté, avec l'accès concurrentiel. Quand il détecte une modif, il met un message à l'utilisateur comme quoi l'enreg a été modifié entre temps, et si celui-ci choisit oui, je veux forcer l'enregistrement dans la Bdd. Comment forcer l'update de mon dataset?

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    si c'est pas pour une grille de données et que tu veux vraiment un accès ligne par ligne, tu peux utiliser un datareader
    au moins t'as qu'une ligne ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    Non, je pense que je vais me résoudre à du déconnecté. De plus, j'ai une datagrid.
    Ma solution : lorsqu'un utilisateur se place sur un enregistrement, et clique sur un des textbox (donc qu'il veut modifier quelque chose), je compare l'enregistrement en cours avec la Bdd. S'il est modifié, je mets à jours mes champs de ma DataTable.

    Par contre, personne n'a pu me donner une réponse :
    Comment forcer un update du dataset malgré que .net détecte qu'un enregistrement a changé entre temps? Car même lorsque je modifie ma DataTable pour que les données de celle-ci correspondent à la Bdd, celui-ci fait comme si elles étaient différentes. Comment lui indiquer qu'elles sont identiques, ou même si ce n'était pas le cas, comment lui dire de faire quand même la mise à jour?

  7. #7
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    Mode connecte ou deconnecte, si tu charge les infos dans une collection ou un controle, c'est le meme probleme. Il n'y a pas d'update magique en temps reel dans l'interface, il y a une levee d'exception si t'as un conflit.

    Le mode deconnecte est interessant car plus efficace en terme de montee en charge du cote de la base de donnees.

    Comment forcer un update du dataset malgré que .net détecte qu'un enregistrement a changé entre temps? Car même lorsque je modifie ma DataTable pour que les données de celle-ci correspondent à la Bdd, celui-ci fait comme si elles étaient différentes. Comment lui indiquer qu'elles sont identiques, ou même si ce n'était pas le cas, comment lui dire de faire quand même la mise à jour?
    C'est pas comme ca que ca marche, tout l'art reside dans la creation une interface utilisateur efficace en forcant l'utilisateur a afficher que ce qu'il cherche (minimiser les resultats). Au lieu de garder en memoire un liste colossale de donnees a rafraichir en permanence. Il faut par exemple proposer que les donnees de la semaine, celles en attente de traitement etc... Bien sur il faut parfaitement comprendre comment travaillent les utilisateurs pour proposer l'interface la plus pratique.

    Cependant il y a des cas particuliers ou les utilisateurs doivent avoir des donnees affichees en temps reel, mais est-ce vraiement ton cas?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 34
    Par défaut
    Bonjour,

    Dans mon cas, on a déjà des filtres qui minimisent le nombre d'enregistrements en cours : par exemple, les appartements à la vente. On a alors 50 à 60 enregistrements grand max, ce qui n'est pas bcp, je pense, mais qui suffit à augmenter grandement le risque qu'un autre utilisateur modifie un de ces 50 enregistrements, et qu'il ait donc un message d'erreur, ou qu'il visualise tout simplement un enreg qui ne correspond pas à la réalité.

    C'est donc pour cela que j'avais pensé à la solution suivante :
    sur click de l'utilisateur sur un champ du formulaire (qui signifie donc qu'il veut modifier quelque chose), j'effectue une requete dans la Bdd sur l'enregistrement concerné et compare la date de dernière modif. Si elle est différente du formulaire, je raffraichis les champs de cet enregistrement. (Mais j'ai le pb que .net détecte toujours que l'enreg de la base est différent du dataset, même s'ils sont alors identiques, après cette modif).

  9. #9
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 204
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 204
    Par défaut
    dans ton cas en effet, il serait bien de se tenir au courant, 50 lignes c'est rien sachant que plusieurs milliers ca prendrait moins d'une seconde à remonter quand meme


    tu devrais peut etre te passer du dataset

    rempli une datatable avec un datareader
    donne la datatable au datagridview

    et sur clic, réactualise la datatable avec un datareader et tu modifies aussi le grid
    ou alors tu aimes le clignotement et tu recommences
    (rempli une datatable avec un datareader
    donne la datatable au datagridview)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  10. #10
    Membre Expert
    Avatar de Piotrek
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 869
    Par défaut
    C'est donc pour cela que j'avais pensé à la solution suivante :
    sur click de l'utilisateur sur un champ du formulaire (qui signifie donc qu'il veut modifier quelque chose), j'effectue une requete dans la Bdd sur l'enregistrement concerné et compare la date de dernière modif. Si elle est différente du formulaire, je raffraichis les champs de cet enregistrement.
    Imagine un instant qu'un utilisateur commence a editer le formulaire. Il n'a pas termine son edition qu'un autre tente d'editer le meme enregistrement, que se passe-t-il dans ce cas precis. Ta solution permet de minimiser le risque, mais elle ne supprime pas ce risque pour autant. Il te faudra gerer les acces concurents

    (Mais j'ai le pb que .net détecte toujours que l'enreg de la base est différent du dataset, même s'ils sont alors identiques, après cette modif).
    Normal, c'est pas prevu de synchronyser les donnees du dataset de maniere manuelle. Cependant chaque Datarow du dataset possede une propriete RowState (unchanged, added...) qui va determiner l'operation de mise a jour en base de donnees. Petit probleme, cette propriete est en lecture seule, il faut dont proceder a une bidouille

    Je campe sur ma postion, et je dis que tu devrais leur proposer une interface leur proposant d'afficher les appartement par nombre de pieces, prix, arrondissement. Ca les forcerait a fermer cette maudite fenetre (et afficher moins de donnees accessoirement, ce qui ameliore les perfs)

Discussions similaires

  1. [Débutant] mode connecté gridview asp.net avec c#
    Par encours dans le forum ASP.NET
    Réponses: 0
    Dernier message: 03/05/2012, 04h11
  2. ADO.NET : Mode connecté ou déconnecté?
    Par rabihm81 dans le forum ADO.NET
    Réponses: 4
    Dernier message: 08/04/2011, 16h04
  3. Réponses: 4
    Dernier message: 11/05/2006, 16h57
  4. VB.Net Exécution des requetes paramettrées en mode connecté
    Par TIBE Patrick Walter dans le forum Windows Forms
    Réponses: 1
    Dernier message: 07/05/2006, 10h21
  5. [OOo2] Comment se connecter sous vb6/.net ?
    Par NiamorH dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 08/02/2006, 14h12

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