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 :

Recherche précise de données dans immense base de données SQL


Sujet :

VB.NET

  1. #1
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut Recherche précise de données dans immense base de données SQL
    Bonjour à vous,

    Me revoilà de plus belle avec un problème qui s'intensifie niveau complexité (enfin pour moi..) et comme j'ai visité des dizaines de pages et que j'ai vu tout et n'importe quoi..
    Voici mon problème, simple mais complexe :

    Je peux avoir accès à une grande base de données matériaux (style modules d'Young, coeff de dilatation, et j'en passe.. bref). Je souhaiterais afficher certaines de ces données dans un datagridview, certaines dans un combobox pour choisir un matériau par exemple et qui lierait alors d'autres textbox pour afficher les propriétés du matériaux.

    Problème 1 : je dois filtrer la BDD car elle contient plein de données mais je veux seulement celles relative à un code particulier (ASME)

    Problème 2 : je galère à faire la liaison sql, je sais qu'il faut que j'importe dans un DataAdapter puis un DataSet puis (enfin) le DataGridView (même si c'est très flou là..)

    Je donne un morceau de code pour savoir si je suis réellement à coté ou pas ..

    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
     
        Sub Main()
     
            Dim Connexion As New SqlConnection("Data Source=NomServer;Initial Catalog=LàFautMettreQuoi?;User Id=******;Password=*******;")
     
            Try
                Connexion.Open()
     
                Dim Requete As String = "SELECT * from P_matieres"   'P_matiere est une table contenant diverses tables dont une par exemple que je veux, la table 'TE'
                Dim Commande As New SqlCommand(Requete, Connexion)
                Dim Adaptateur As New SqlDataAdapter(Commande)    ' créé un DataAdapter
                Dim DSToting As New DataSet
                Try
                    Adaptateur.Fill(DSToting, "P_matieres")   'rempli le DataAdapter
     
                    'Analyse du DataSet
                    For Each Ligne As DataRow In DSToting.Tables("P_matieres").Rows()     'là je sens que c'est du n'importe quoi..
                        Console.WriteLine(Ligne("TE").ToString)
                    Next
                    Dim DataView As New DataView(DSToting.Tables("P_matieres"))
     
                    DataView.RowFilter = "TC = 'ASME'"  ' là j'ai essayer de faire un semblant de filtre pour avoir la table TC pour le code asme uniquement   
     
     
                    TSP.DG_Toting.DataBindings(ds, "DGV1")   ' là ça remplit un DGV .. mais il me met une erreur, il est pas content, il n'aime pas "Databinding"
     
                Catch ex As Exception
                    Console.WriteLine(ex.Message)
                End Try
     
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            Finally
                Connexion.Close()
            End Try
        End Sub
    Ce que je ne comprend pas, entres autres, c'est qu'il y a des trucs à faire sur les forms "lié aux données..." etc et qu'il y a aussi plein de truc à coder derrière ... :/
    Merci de votre aide,
    have a nice day !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  2. #2
    Membre du Club
    Homme Profil pro
    Amateur
    Inscrit en
    Octobre 2011
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Amateur
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2011
    Messages : 37
    Points : 49
    Points
    49
    Par défaut
    Bonjour,

    Déjà pour "filtrer", tu pourrais utiliser une clause WHERE dans ta requête SQL étant donné que tu cherches un code précis, je ne sais pas comment est dessinée ta Table, mais si tu as un champs code (celui qui contient ASME) tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dim requete as String = "SELECT * FROM P_matieres WHERE code='ASME'"
    Ainsi, tu n'aura que les lignes dont le code est ASME
    pour ce qui est de récupérer les données, tu utilises soit une boucle si il y en a plusieurs, soit tu mets directement dans des variables. Mais si tu formules correctement ta requête alors le travail sera déjà bien dégrossi.

    Je ne sais pas si c'était ton problème... Mais voilà peut être déjà une piste

  3. #3
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    C'est déjà une bonne piste ! Merci beaucoup j'essaierai te mettre ca en pratique des que possible !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Salut Adakhum;

    Si tu souhaite afficher les résultats de ta recherche dans un datagridview tu peut procéder de la manière suivante et ainsi éviter de le créer manuellement.

    Tu créer une nouvelle connexion via l'utilitaire de Vb.net directement sur ta BDD.

    Nom : co.png
Affichages : 597
Taille : 52,8 Ko

    Puis dans les paramétrés du datagridview tu te connecte à ton dataset et tu sélectionne ta table.

    Nom : data.png
Affichages : 576
Taille : 24,8 Ko

    Du coup, le datagridview va te génerer ce code qui permet de charger ta BDD sql dans le datagridview.

    Nom : ge.png
Affichages : 533
Taille : 6,4 Ko

    Petite question hors sujet tu est étudiant en quoi ?

    Si tu à encore besoin d'aide n'hésite pas !

    De plus effectivement la requête sql Select where te permet de filtrer les données.

  5. #5
    Membre actif
    Homme Profil pro
    Developpeur
    Inscrit en
    Février 2013
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Février 2013
    Messages : 180
    Points : 271
    Points
    271
    Par défaut
    petite précision supplémentaire sur le poste de "Egeal67"
    quand on connais DOT.NET les source de donnée, c'est ce qu'il y a de plus rapide à faire mais c'est pas top pour apprendre

    ensuite dans la dernière image "les taches du DataGridView" il ne faut pas oublier de décocher les cases qui permette de supprimer des lignes ou modifier ou insérer
    (sinon tu va supprimer des enregistrement dans t'as base)


    si tu veux de l'aide pour tout crée à la main n'hésite pas


    (ps intéresse toi au bindingList même si c'est plus compliqué)

  6. #6
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Hello vous !

    Bonne année déjà ! Merci pour vos réponses que j'ai lues mais n'ai qu'appliquées que maintenant.

    Thanx Egeal67, je suis en master de physique spécialité Mécanique numérique pour être précis, ce qui fait que le vb.net à la base ce n'est pas trop ma branche ...
    Je suis plutot dans la modelisation et le calcul de structure par éléments finis par exemple etc ..

    Mais le programme y'a de la thermomécanique derrière du coup ça m'interesse un peu :p et le vb.net aussi on va pas se mentir mais avec cette BDD je galère ..

    Lorsque je fais comme toi (Egeal67) et que je démarre mon prgramme, j'ai bien les lignes "TODO ..." qui s'affiche au début de mon programme mais il y a une erreur, il ne veut pas accéder à la BDD, je ne sais pas pourquoi mais je me renseigne, pourtant le mot de passe est bon ..

    Normalement y'a que ça à faire ? :o ouah ..


    [EDIT]
    Bon ça faisait quelques temps que je ne m'étais pas penché sur le problème. Je reviens de plus belle pour donner quelques réponse si certains bloque comme moi à chercher dans une base de données SQL.

    Dans ma BDD j'ai plein de tableau, plein, plein. Parce que je n'ai pas trouvé ce que je cherchais sur le net mais j'ai dû pas mal glaner, je vais essayer de faire une synthèse de mes trouvailles.

    Mon But ultime : Choisir un paramètre dans un ComboBox (donc l'utilisateur sélectionne en fait une ligne parmi des centaines dans mon cas dans une Table située sur la BDD) > fait correspondre donc une ligne dans une table > exploiter toutes les infos de cette ligne (contenant plusieurs colonnes) > prendre les infos et les exploiter (car elles me mèneront dans d'autre tables et ainsi de suite ...)

    Pour cela, je créé une combobox, je fais utiliser des éléments liés aux données, puis dans source de données, ajouter la source ... Là en gros c'est Visual Studio qui prend la connexion en charge tout automatiquement. Il vous faut connaitre votre serveur, des identifiants et mot de passe si nécessaire et enfin le nom de la BDD.

    Ne pas oublier de cocher "oui enregistrer dans mon code les informations sensibles etc ..." sinon votre programme ne pourra pas aller taper dans la BDD.

    Quand vous avez fait ça vous pouvez sélectionner toutes les tables que vous souhaitez. ça créé automatiquement un dataSet et des dataTable. De plus, Visual vous a écrit une ligne dans votre prgrm.Load pour lancer la recherche de données dans votre BDD à chaque démarrage de programme.

    Ensuite comme personnellement mes tables sont grandes j'avais besoin de trier le tout. voici la syntaxe à utiliser pour faire des filtres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    'TODO*: cette ligne de code charge les données dans la table 'BDDDataSet.Table_xxx'. Vous pouvez la déplacer ou la supprimer selon vos besoins.
            Me.Table_xxxTableAdapter.Fill(Me.BDDDataSet.Table_xxx)
            TablexxxBindingSource.Filter = "Nom_de_votre_colonne Like 'Critère_de_filtre' And Nom_de_votre_colonne Like 'Critère_de_filtre' And Nom_de_votre_colonne >= 20000"
            'Les And sont là pour ajouter des filtres (ici 3) mais vous pouvez aussi trier selon les symboles >  <  =   etc ...
    J'ajoute que si vous voulez trié seulement avec un début de nom de critère vous pouvez seulement taper : "Nom_de_votre_colonne Like 'Critère%'"

    En espérant que ça aura aider certains, merci !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  7. #7
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Comme a dit simhoney,
    il est beaucoup plus simple et plus vite pour le programme de filtrer directement dans la requête sql.
    Filtrer à partir de la requête sql apporte beaucoup plus de choix de filtre,
    que de filtrer un dataset ou datatable ou datagridview.

  8. #8
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    et bien personnellement je ne pense vraiment pas que ça soit plus simple au niveau de la programmation, c'est peut être fastidieux à expliquer mais ça se fait en quelques clics tout seul, et ça tient en deux lignes.

    Pour quelqu'un qui comme moi qui ne connait pas toutes les phrase magiques du vb c'est très rapide. Les filtres ? ben j'en fait autant que j'en veux, je ne vois pas comment tu veux plus filtré que filtré ? ^^ enfin j'ai obtenu ce que je voulais.

    Le programme une fois lancé, c'est de l'instantané ! surtout en .exe
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Adakhum Voir le message
    et bien personnellement je ne pense vraiment pas que ça soit plus simple au niveau de la programmation, c'est peut être fastidieux à expliquer mais ça se fait en quelques clics tout seul, et ça tient en deux lignes.
    Ca me fait rire ce genre de raisonnement... Tu crois que ton patron va te filer un bonus parce que tu as économisé quelques lignes de code ? Il y a quelques années, j'avais un collègue qui était persuadé que plus une requête SQL était courte, plus c'était performant. Il rechignait à rajouter la moindre jointure et à chaque fois ca partait en débat. Au fil du temps, la volumétrie augmentant et à force d'avoir voulu faire des "économies de lignes de code", son projet était d'une lenteur abominable. Quand le chef a eu écho des plaintes d'utilisateurs à cause des performances très pauvres, et quand celui-ci a estimé le budget nécessaire pour se remettre dans les cordes, il vallait mieux rester chez soi En tout cas ca lui a fait prendre conscience que ce genre de raisonnement est totalement idiot.

    Bien sûr si on est dans le cadre d'un prototypage ou d'un petit projet perso ou dans un concours du binaire le plus petit possible, on n'est pas dans ce genre de considérations...

    Citation Envoyé par Adakhum Voir le message
    Pour quelqu'un qui comme moi qui ne connait pas toutes les phrase magiques du vb c'est très rapide. Les filtres ? ben j'en fait autant que j'en veux, je ne vois pas comment tu veux plus filtré que filtré ? ^^ enfin j'ai obtenu ce que je voulais.

    Le programme une fois lancé, c'est de l'instantané ! surtout en .exe
    Tu peux faire autant de filtres que tu veux que tu sois dans ton code ou dans le SGBDR La différence c'est que sur un jeu de données, ton code va agir de manière séquentielle (une ligne après l'autre) quand le SGBDR va agir de manière ensembliste. Donc par essence, il n'y a pas plus rapide et mieux placé que le SGBDR pour réaliser ce genre d'opération, surtout sur de très grosses volumétries, ce qui ne semble pas être le cas ici contrairement à ce que le titre de la discussion laisse penser.

    Bref ce qu'il faut retenir de tout ca au final c'est qu'en faisant le choix de la facilité, si ta volumétrie augmente, tu risques de constater des lenteurs au fur et à mesure que le temps passe (tout dépend de la facon dont elle augmente et dans quelle proportion bien entendu). Les conseils de simhoney et de gnain sont pertinents.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Si je peux me permettre (et je me permet haha ^^) tu n'argumentes pas le même sujet que moi, je parlais en premier lieu d'une facilité à programmer. Je suis moyen en vb.net (voire mauvais!) et pour moi c'est plus facile de cliquer 3 fois que d'écrire 20 lignes de codes que je ne connais pas et que je ne comprend pas (là est le plus gros problème vois-tu ?).

    Je veux bien te croire que c'est plus rapide à exécuter selon certaines méthodes de programmation. Mais, ce topic ça concerne mon problème, donc j'apporte des solutions pour mon problème et en l’occurrence j'ai un chef sympa mais qui comme tous les chefs veut un résultat pour hier (et moi le premier en fait). Donc en effet tu as raison, je t'ai fais rire et j'en suis fier, mais ce ne sont pas ce genre de considérations à prendre en comte

    En terme de volumétrie, comme mon titre le supposais, j'ai affaire à une p**** de BDD oui, je ne sais quel point t'as fait penser le contraire ! Mais elle ne s'agrandit pas. Par contre je prend très peu de données en considération à la fois si c'est ce que tu entendais !

    Je vais exécuter mon code selon une méthode simple, si un jour ça ralentit, je penserais à toi et je le modifierai Mais un programme fait depuis longtemps marche très bien comme ça, donc à priori, à part la vieillesse des serveurs, ça devrait aller.

    Et je crois avoir compris ce que tu disais mais je ne sais pas ce que veut dire le sigle SGBDR
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  11. #11
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Aucun problème, le principal au final c'est que ca fonctionne ! On voit tellement de choses assez abhérentes, que ce soit dans le monde pro sur les applications dont on hérite, ou même ici sur ce forum, qu'on essaie d'ouvrir les yeux aux membres de la communauté ^^ Après c'est au posteur de voir en fonction de son projet, niveau de connaissances, et de son contexte, choses que l'on ne peut pas connaître.

    Sinon SGBDR veut dire Système de Gestion de Base de Données Relationnelle (RDBMS en Anglais). Ca désigne les systèmes tels que SQL Server, Oracle, etc.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  12. #12
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    très bien je me coucherai moins bête !

    Il ne manquera qu'une dernière chose pour que je ferme ce topic : quand l'utilisateur sélectionne une ligne dans une combobox, je récupère en fait un "texte" qui correspond à une case d'une table de ma BDD.

    Celle-ci comporte plein de colonnes (admettons 3 : A, B, C). Comment je fais pour me promener sur la ligne où il y a le "texte" et récupérer dans la colonne B par exemple un nombre ? (je sais pas si c'est clair ?)

    Le "texte" fixe une ligne dans la BDD, sur cette ligne je veux récupérer une info dans une autre colonne (c'est peut être plus clair)..

    J'ai essayer plusieurs choses/syntaxes mais je n'y parviens pas vraiment .. merci !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  13. #13
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Il faudrait que tu nous poste au moin un petit bout de ton code

    mais sinon, normalement tu devrais avoir quelque chose du genre


    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
            Dim da As New OleDbDataAdapter()
            Dim ds As New DataSet()
            Dim dt As DataTable
     
                .... votre connection et votre requete sql ....
     
     
                da.Fill(ds, "Nom_de_la_table")
     
                Dim resultat as string
     
                dt = ds.Tables("Nom_de_la_table")
     
                Dim row As DataRow
     
                row = dt.Rows(0)
     
                Resultat = row("Nom de la colonne")

  14. #14
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Très bien, merci gnain, j'applique ça lundi matin 8h ! chez moi je n'ai pas accès à la BDD ! =)
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  15. #15
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Bon alors je rencontre un petit problème..

    Dans ton exemple gnain, la "row" que tu prend c'est la "0" (zéro) ?

    Je veux adapter le truc à mon code du coup, moi c'est quand l'utilisateur sélectionne un texte dans une ComboB que je veux sélectionner une ligne dans ma table.

    Or quand je dit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Row As DataRow = BaseRefProdDataSet.Table.Rows(CBB_NameTube.Text)
    Il n'est pas content car il attend un chiffre pour Row et non du texte. Je croyais qu'il allais chercher le texte moi ! Fainéant :p

    Et comme il y a 15000 lignes dans ma table un truc comme ça, y'a pas vraiment de numérotation, bref c'est le bazar :/
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  16. #16
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Voici un exemple complet d'une connection sql. Cela pourait peut être d'aider.
    Moi ce que je ferais au moment de la saisie du combobox je lancerait une requête pour trouver ce que je veux.

    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
        Sub SQL_Connection()
     
            Dim cn As New SqlConnection
            Dim sql As String
            Dim ds As New DataSet
            Dim dt As DataTable
            Dim connectionstring As String
     
            sql = "SELECT * FROM Ta_Table where Ta_Colonne = '" & Combobox1.text & "'"
     
     
            connectionstring = "Persist Security Info=True;User ID=Ton_ID;Initial Catalog=???;Data Source=Endroit_Sur_Le_Server;Packet Size=4096;Password=???"
     
            cn = New SqlConnection(connectionstring)
            cn.Open()
     
            Dim da As New SqlDataAdapter(sql, cn)
     
            da.Fill(ds, "Ta_Table")
     
              'La boucle sert à parcourir tout les ligne dont Ta_Colonne = '" & Combobox1.text & "'"
            For i = 0 To ds.Tables(0).Rows.Count - 1
     
                dt = ds.Tables("Ta_Table")
     
                Dim row As DataRow
     
                row = dt.Rows(i)
     
                Dim Resultat as string
                Resultat = row("Ta_Colonne")
     
                MsgBox Resultat 
     
            Next
     
            cn.Close()
            ds = Nothing
            da = Nothing
     
        End Sub

  17. #17
    Membre du Club Avatar de Adakhum
    Homme Profil pro
    Ingénieur Mécanique Numérique
    Inscrit en
    Mars 2014
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Mécanique Numérique

    Informations forums :
    Inscription : Mars 2014
    Messages : 125
    Points : 58
    Points
    58
    Par défaut
    Merci gnain, même si je n'ai pas fait la connexion avec le code c'est clair !

    Je met ce que j'ai trouvé et qui marche pour ma part ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For Each Me.PMatieresRow In BaseRefProdDataSet.P_Matieres
                If CBB_NameTube.Text = PMatieresRow.Nom Then ' prend le texte de la CBB
                    indiceTM = PMatieresRow.TM 'prend un indice située sur la même ligne
                    indiceTE = PMatieresRow.TE ' idem ...
                End If
              Next
    En ayant déclaré avant (et là est toute la subtilité de la chose!!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim PMatieresRow As baseRefProdDataSet.P_MatieresRow
    C'est principalement cette vieille ligne là que je cherchais ^^

    Merci à tous !! sujet résolu et clos !
    Détaillez votre question et vous obtiendrez une réponse précise ! (c'est un peu magique)
    Et si vous êtes fou de voyage bienvenue ici : http://lenormanditinerant.blogspot.fr

  18. #18
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 206
    Points : 455
    Points
    455
    Par défaut
    Non, mais non !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql = "SELECT * FROM Ta_Table where Ta_Colonne = '" & Combobox1.text & "'"
    ---> Requête paramétrée

  19. #19
    Membre éprouvé
    Homme Profil pro
    Programmeur analyste
    Inscrit en
    Février 2009
    Messages
    546
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Canada

    Informations professionnelles :
    Activité : Programmeur analyste
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2009
    Messages : 546
    Points : 1 116
    Points
    1 116
    Par défaut
    Par curiosité
    On est ici pour apprendre.
    Pourquoi un requête paramétrer pour un combobox qui est chargé en vb
    J'ai pris habitude de le faire quand c'est un textbox pour plus de sureté.

    Il doit surement avoir une raison, j'aimerais bien la connaitre.

  20. #20
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Cela fait partie des best practices. Les requêtes paramétrées doivent être utilisées de partout et tout le temps. Pourquoi ? Parce que :

    • Cela immunise contre le risque d'attaque par injection SQL (un combobox ou autre ne protège en aucun cas...)
    • Ca fige le plan d'exécution de la requête :
      • Si je n'utilise pas de paramètre, et que mon champ contient "A" alors ma requête sera la suivante : SELECT * FROM Ta_Table where Ta_Colonne = 'A', et si le champ contient "B" alors j'aurais : SELECT * FROM Ta_Table where Ta_Colonne = 'B'. Ce sont 2 chaine différentes, et à chaque fois il faudra que le SGBDR calcule le plan d'exécution, etc.
      • Si j'utilise un paramètre, alors la requéte sera toujours identifique : SELECT * FROM Ta_Table where Ta_Colonne = @TonParametre, donc le plan d'exécution sera toujours identique : plus besoin de le calculer à chaque fois, on le récupère du cache directement.
    • Cela permet de ne pas avoir à se soucier des différentes formats de date, de nombre, etc.

    Après ca n'a rien d'obligatoire, mais ca évite pas mal de problèmes, il y a un utilisateur sur le forum ASP.NET qui en fait les frais actuellement
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/06/2013, 17h21
  2. [MySQL] Recherche depuis une page dans une base de données
    Par illidan05 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 27/07/2009, 00h04
  3. recherche a la google dans ma base de données
    Par kanzarih dans le forum Débuter
    Réponses: 5
    Dernier message: 03/04/2009, 17h31
  4. Recherche par mot clé dans une base de donnée
    Par sihamsisim dans le forum ASP
    Réponses: 1
    Dernier message: 24/04/2008, 20h59

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