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.NET Discussion :

Pilotage base Access


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Pilotage base Access
    Bonjour, a tous


    Je cherche a piloter une base de donnée Access, avec un script VB.NET.
    Je but actuellement sur un problème, je charge une colonne de ma base de donnée dans une combobox sans problème, par contre quand je sélectionne un nom dans la combo box, j'aimerais lire la ligne et récupère les donnée dans des variables, mais cela ne marche pas car je n'arrive pas a identifier la clef primaire de la ligne a lire.

    Voici mon code et merci par avance de votre aide :
    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
    Dim BaseCnx As New OleDbConnection
    Dim BaseCmd As OleDbCommand
    Dim BaseDta As OleDbDataAdapter
    Dim BaseDts As New DataSet
    Dim BaseSql As String
    Dim BaseDtt As DataTable
    Dim BaseDtr As DataRow
    Dim BaseRownum As Integer
    Dim BaseCnxStr As String
    Dim BaseCmdb As OleDbCommandBuilder
     
    Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged 'lecture info
    'attribution variable
    Dim VARLIGN As Integer
    Dim VAR001 As String
    Dim VAR002 As String
    'ouverture base
    BaseCnxStr = "provider = microsoft.ACE.OLEDB.12.0 ; data source = C:\Cmc Interface 2020\BASE_CMC.accdb"
    BaseCnx = New OleDbConnection
    BaseCnx.ConnectionString = BaseCnxStr
    BaseCnx.Open()
    'selection table
    BaseSql = "select CONTACT.* from CONTACT"
    BaseCmd = New OleDbCommand(BaseSql)
    BaseDta = New OleDbDataAdapter(BaseCmd)
    BaseCmd.Connection() = BaseCnx
    BaseDta.Fill(BaseDts, "CONTACT")
    BaseDtt = BaseDts.Tables("CONTACT")
    'recuperation info ligne
    BaseDtr = BaseDts.Tables("CONTACT").Rows(BaseRownum)
    VARLIGN = (BaseRownum - 1)
    'lecture base
    VAR001 = BaseDtt.Rows(VARLIGN).Item("NOM") ### LIGNE IDENTIFIE EN ERREUR
    VAR002 = BaseDtt.Rows(VARLIGN).Item("PRENOM")
    'affichage des infomation
    TextBox1.Text = VAR001
    TextBox2.Text = VAR002
    End Sub

  2. #2
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonsoir,

    Dta, Dtt, Dts, Dtr ... ça fait beaucoup ...

    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
     
    ' ... ... ...
            BaseDtt = New DataTable
     
    BaseCnxStr = "provider = microsoft.ACE.OLEDB.12.0 ; data source = C:\Cmc Interface 2020\BASE_CMC.accdb"
    BaseCnx = New OleDbConnection
    BaseCnx.ConnectionString = BaseCnxStr
    ' !!!!!!!!!!!   BaseCnx.Open()       ===========>     pas besoin d'OPEN quand usage du DataAdapter
     
    BaseSql = "select CONTACT.* from CONTACT"
    ' ********** BaseCmd = New OleDbCommand(BaseSql)
    BaseDta = New OleDbDataAdapter(BaseSql, BaseCnx)
    'BaseCmd.Connection() = BaseCnx
     
    BaseDta.Fill(BaseDtt)
    BaseDtt.TableName = "CONTACT"  ' superflu car avec Access, le nom de la table sera récupéré par de BaseDta. Mais pss interdit.
    BaseDts.Tables.Add(BaseDtt)
    ' ... ... ...
     
    ComboBox1.DataSource = BaseDts.Tables("CONTACT")
    ComboBox1.DisplayMember = "NOM"    '  A conditon que ce soit bien le nom du champ dans la DB
    ' ...
    TextBox1.DataBindings.Add("Text", BaseDts.Tables("CONTACT"), "NOM")   ' écrire ici le nom du champ à montrer dans cette TextBox
    TextBox2.DataBindings.Add("Text", BaseDts.Tables("CONTACT"), "PRENOM")  ' idem 
     
    ' ... ... ...
    Ne pas mettre ce code dans la procédure ComboBox1_SelectedIndexChanged ....
    Eventuellement dans le Form_Load ou dans la procédure événementielle du click d'un bouton "Charger données", par exemple.

    Si ça ne va pas, envoie le projet avec la DB (un jeu d'enregistrement de test).

    ...

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse, toutefois :

    Le code ne marche pas dans mon programme.
    Je souhaite absolument garder cette action, sur le ComboBox1_SelectedIndexChanged ....

    Enfin dans ton code la donnée est réutilisé de suite pour être mise dans une textbox, alors que moi je souhaiterais pouvoir les récupéré ces données dans des variables.

  4. #4
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    Enfin dans ton code la donnée est réutilisé de suite pour être mise dans une textbox, alors que moi je souhaiterais pouvoir les récupéré ces données dans des variables.
    Cela, c'est du détail.


    Je souhaite absolument garder cette action, sur le ComboBox1_SelectedIndexChanged ....
    Il est absolument inapproprié de rechercher dans la DB, une info qui a déjà été lue, chaque fois qu'on "tripote" la ComboBox.

    Si tu précise mieux ton objectif et que tu envoies ton projet avec un jeu d'enregistrement pour les tests, j'arriverai peut-être à faire mieux.

    Mais, c'est comme tu veux ...

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2015
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2015
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Pour l'instant je fait juste des script d'essai pour apprendre a commander la base access a partir de VB.NET.

    Je te joint mon code et la BD, pour la fonction concerner je vaut choisir un nom dans la combobox et afficher le donne dans des textbox
    Fichiers attachés Fichiers attachés

  6. #6
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    J'ai chargé ton projet mais je n'aurai sans doute pas de temps pour l'examiner avant demain soir.

    En fait, je ne suis pas sûr de bien comprendre ce que tu entends par "Piloter" la DB. S'il s'agit de gérer les données stockées en DB, l'exemple suivant te servira peut-être : TestAccesDBSimpleConMostrar.zip.
    Excuse-moi, il est écrit en espagnol (pas le VB ... ), mais c'est plutôt facile à traduire vu le contexte et puis, en cas de besoin, je peux expliquer ...

    Pour l'exécuter, il faut changer la chaine de connexion, elle sera forcément différente sur ton PC :
    Nom : Ares1.jpg
Affichages : 187
Taille : 71,2 Ko

    Bonne journée ...

  7. #7
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Bonjour,

    J’ai eu un peu de temps ce matin …

    Si tu le permets, je vais oser une petite critique sur la DB. Le champ « nom complet » ne doit pas exister puisque ses valeurs peuvent être à tout moment reconstituées par les champs « nom » et « prénom » : NomComplet = Nom & « » & Prenom. Il faut toujours éviter les répétitions superflues, les redondances.

    Rapport à ton programme, le projet exemple que je t’ai envoyé te montre suffisamment (je crois) comment gérer les données stockées en DB.
    Tu auras pu voir que je ne lis qu’une seule fois la DB (un seul SELECT) pour dispatcher ensuite les différentes infos dans les zones qui leur sont destinées. Il est donc hors de question de relire la DB à chaque changement de sélection dans le ComBox.
    En lisant ton code, je vois que tu as intégré ma proposition de code de l’autre jour (dans la procédure ComboBox1_SelectedIndexChanged … ) mais cela ne donne pas le résultat que tu attends.
    Mon problème ici est de comprendre en quoi consiste ce résultat que tu attends.

    Il me semble que pour une gestion de contacts, si on en choisit un sur base de son nom (par exemple) présenté dans un ComboBox, les autres zones d’affichage doivent présenter les autres infos de ce contact. Inutile de re-présenter son nom puisqu’il est déjà affiché dans le ComBoBox.
    Dans le cas précis de tes contacts, qui ne sont constitués jusqu’à présent que de 2 champs significatifs, le nom et le prénom, si on présente les noms dans le ComboBox, un seul TextBox doit suffire pour montrer le prénom du contact sélectionné dans ce ComboBox.
    Il est normal que le ComboBox ait une sélection dès son remplissage, mais cette sélection pourrait être annulée. Nous serions alors dans cette situation où le ComboBox présente un nom (le premier de tous) dans sa zone de texte et où le TextBox du prénom serait vide. Il faudrait absolument sélectionner ce contact déjà présenté pour voir apparaître son prénom. A quoi bon ? Mias il s’agit là d’aspect d’ergonomie.

    Enfin, outre ces aspects d’ergonomie, il faut absolument réorganiser les codes (en t’inspirant du projet que je t’ai envoyé, par exemple).


    Très bonne journée ...

  8. #8
    Membre émérite Avatar de Phil Rob
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2013
    Messages
    1 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2013
    Messages : 1 613
    Points : 2 865
    Points
    2 865
    Par défaut
    Suite ...

    Comme il me restait un peu de temps cet après-midi , j’ai retravaillé le projet que tu m’as envoyé pour le structurer « dans le bon sens ». Il ne fait rien de plus, rien de moins, il est épuré des variables inutilement répétées et rendu plus lisible. Voici ce projet modifié : Essai_Base_Access.zip
    Ne pas oublier de modifier la chaine de connexion selon ton système (3ème ligne du code).
    A propos de lisibilité, je me suis permis de renommer quelques trucs. Pour assurer une lisibilité confortable des codes, il convient de nommer les composants et les variables avec des mots représentatifs. L’utilisation des majuscules et minuscule rend ces noms faciles à lire, par exemple : NomTableContacts.
    Outre les variables, j’ai renommé :
    • Form1 ==> FGestContacts
    • ComboBox1 ==> CBContacts
    • TextBox1 ==> TBNom
    • TextBox2 ==> TBPrenom
    • Button1 ==> BCharger

    Et j’ai supprimé Button2.

    J’espère que ceci te permettra d’avancer …

    Nom : Ares2.jpg
Affichages : 187
Taille : 52,9 Ko

Discussions similaires

  1. migration de base access vers postgres
    Par greg_ggl dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 09/03/2006, 10h33
  2. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  3. Crash Base Access
    Par Ronald G. dans le forum Access
    Réponses: 4
    Dernier message: 04/08/2003, 11h55
  4. Export base Access vers MySql
    Par jjn1er dans le forum Outils
    Réponses: 7
    Dernier message: 10/03/2003, 23h50
  5. [VB6] [ADO] Like sur base Access
    Par dlpxlid dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 24/01/2003, 11h03

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