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 :

VB 2008 probleme enregistrement BDD bizarre


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut VB 2008 probleme enregistrement BDD bizarre
    Bonsoir,

    Le titre est peut être peu explicite pour vous mais je ne savais pas quoi mettre ... alors je vous explique mon problème, je suis sous visual studio 8 et pour mon application pour des chasseurs, j'ai un soucis au nouveau pour faire des statistique, j'ai une base de données sous access,

    Mon soucis alors j'ai du faire un sum pour savoir le nombre de gibié tué
    en une année, je peux enregistrer le résultat donné donc j'ai rajouté à ma base une nouvelle table statistique qui comporte les champs idstatistique,score,gibier_stat,nom_stat, prenom_stat donc l'enregistrement s'effectue bien. Je veux faire apparaître le résultat dans une datagridview.

    Et à l'affichage de ma DGV au lieu de me mettre la valeur texte du prénom,nom & le nom du gibier il affiche la valeur numérique. Et aussi ( mon programme permet aux chasseurs d'enregistrer chaque journée) admettons que Monsieur a effectué 3 journées de chasse à intervalle différents mais à tué X gibiers ... donc le sum se comporte bien mais dans ma DGV il m'affiche 3 fois le même résultat, 3 fois la même lignes

    Mon code pour afficher la DGV :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    'REMPLIR DGV
            Dim afficherScore As String = "Select score,Statistique.idtype_gibier,nom_stat,prenom_stat,annee_stat from chasseur,tuer,type_gibier,Statistique WHERE chasseur.idchasseur = tuer.idchasseur AND tuer.idtype_gibier = type_gibier.idtype_gibier AND Statistique.idtype_gibier = type_gibier.idtype_gibier"
            Dim da As New OleDb.OleDbDataAdapter(afficherScore, cnx)
            Dim ds As New DataSet
    
            cnx.Open()
            da.Fill(ds, "Statistique")
            cnx.Close()
            DGV_Statistique.DataSource = ds.Tables("Statistique")
            DGV_Statistique.CurrentCell = Nothing 'enleve le fait que la dgv est la premiere de selectionné automatiquement
    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    je pense qu'il n'y a rien de bizarre et que ta requete fait ce qu'elle doit faire, même si ce n'est pas ce que tu veux

    ta requête fait des jointures entre des tables (dont on a pas la description complète ...)
    WHERE chasseur.idchasseur = tuer.idchasseur
    si le chasseur x est une fois dans la table chasseur mais 2 fois dans la table tuer, il est normal que la requête retourne 2 lignes
    et c'est pareil pour toutes les jointures

    il te manque au minimum un group by (et tant qu'à faire une écriture plus professionnelle et plus lisible avec des JOIN (inner, left ou autre) plutot que from t1,t2 where condition de jointure)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    Bonjour,

    C'est comme sa pour les INNER JOIN, ON parce que je ne les ai jamais utilisé donc j’espère pas mettre trompé ... Sa fait bizarre d'avoir idchasseur = idchasseur, non ? ?

    Je vous ai envoyé en PJ mes relations


    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
     
    'REMPLIR DGV
            Dim afficherScore As String = "
            SELECT score,Statistique.idtype_gibier,nom_stat,prenom_stat,annee_stat FROM chasseur
            INNER JOIN tuer
            ON  idchasseur = idchasseur 
            INNER JOIN type_gibier
            ON idtype_gibier = idtype_gibier
            INNER JOIN Statistique
            ON idtype_gibier =  idtype_gibier
     
            Dim da As New OleDb.OleDbDataAdapter(afficherScore, cnx)
            Dim ds As New DataSet
     
            cnx.Open()
            da.Fill(ds, "Statistique")
            cnx.Close()
            DGV_Statistique.DataSource = ds.Tables("Statistique")
            DGV_Statistique.CurrentCell = Nothing 'enleve le fait que la dgv est la premiere de selectionné automatiquement
    Images attachées Images attachées  

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    non il faut préciser les tables comme tu le faisais initialiement, access ne peut pas deviner tout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT score,Statistique.idtype_gibier,nom_stat,prenom_stat,annee_stat
        FROM chasseur
            INNER JOIN tuer           ON  chasseur.idchasseur = tuer.idchasseur 
            (...)
    et essaye un group by chasseur.idchasseur (, autres champs si nécessaire)
    les champs non group byés devront alors être agrégés (SUM, MIN, MAX, AVG ...)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    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
     'REMPLIR DGV
            Dim afficherScore As String = "Select score,Statistique.idtype_gibier,nom_stat,prenom_stat,annee_stat" & _
            " FROM chasseur" & _
            " INNER JOIN tuer ON chasseur.idchasseur = tuer.idchasseur " & _
            " INNER JOIN type_gibier ON tuer.idtype_gibier = type_gibier.idtype_gibier " & _
            " INNER JOIN Statistique ON Statistique.idtype_gibier = type_gibier.idtype_gibier "
     
            Dim da As New OleDb.OleDbDataAdapter(afficherScore, cnx)
            Dim ds As New DataSet
     
            cnx.Open()
            da.Fill(ds, "Statistique")
            cnx.Close()
            DGV_Statistique.DataSource = ds.Tables("Statistique")
            DGV_Statistique.CurrentCell = Nothing 'enleve le fait que la dgv est la premiere de selectionné automatiquement
    comme ceci c'est bien mieux, il y a une erreur de syntaxe

  6. #6
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    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 197
    Par défaut
    Citation Envoyé par gauth62 Voir le message
    comme ceci c'est bien mieux, il y a une erreur de syntaxe
    tu n'as pas jugé utile de préciser le message d'erreur ?

    enfin c'est surement access qui n'arrive pas à la lire norme sql qui date pourtant des années 90 ...
    je pense qu'il veut des parenthèses autour des jointures mais c'est pas clair l'imbrication
    donc soit tu remets tes where, soit tu passes sur une vraie base de données
    parce que la syntaxe des jointures d'access est aussi illisible que les where
    voici l'exemple fournit par microsoft :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    FROM Employees 
      INNER JOIN 
        ( Orders 
            INNER JOIN [Order Details] ON [Order Details].OrderID = Orders.OrderID ) 
               ON Orders.EmployeeID = Employees.EmployeeID
    (et désolé pour la perte de temps éventuelle si tu reviens aux where)
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2011
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 453
    Par défaut
    Euh d'accord si tu veux, mais moi sur le schéma de ta base que tu as mis je vois que le nom et le prénom de ton chasseur sont dans la table "chasseur" pas dans la table "statistiques", après c'est comme tu le sens, mais comme déjà dit précédemment si VB te met un Integer c'est que tu ramènes un Integer pas un String...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 35
    Par défaut
    Oui oui je suis d'accord avec toi mais si tu regardes dans Statistiques il te met bien le nom et le prenom qu'il recupére de la table chasseur.

    Mais tu as raison je vais aller au plus simple je test et je te redit quoi

    Si je fais maintenant quand je rajoute un enregistrement il m'en met 2

    Dites admettons que MOnsieur X chasse et son fils aussi, ils portent à 2 le même nom mais comment dire à la combobix que si il y a le même nom de l'afficher qu'une fois

Discussions similaires

  1. probleme enregistrement fichier en C, bug Bizarre
    Par hl037 dans le forum Débuter
    Réponses: 3
    Dernier message: 07/01/2011, 02h55
  2. [MySQL] probleme enregistrement dans la bdd
    Par nusdo dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/01/2010, 16h23
  3. [access2003] Probleme ouverture BDD access 2000
    Par sandrine dans le forum Access
    Réponses: 1
    Dernier message: 18/11/2005, 20h24
  4. Problème BDD bizarre
    Par helter_skelter dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 25/07/2005, 18h04

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