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 :

trouver une ligne dans une datatable [Débutant]


Sujet :

VB.NET

  1. #1
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut trouver une ligne dans une datatable
    Voici mon problème je cherche a trouver un tableau d'un dataset une ligne particulière et concaténer les cellules qui la suivent pour les renvoyer dans un richtextbox.

    la colonne N° possède une clé primaire ; la méthode select ne me retourne rien??




    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
     Private Sub TreeView1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
            Dim Adr1 As String, Adr2 As String, Adr3 As String, Adr4 As String
            Dim contr As String
            Dim ligne As DataRow()
     
            TextBox1.Text = TreeView1.SelectedNode.Text.Substring(0, 6)
            TextBox2.Text = TreeView1.SelectedNode.Text.Substring(9)
            contr = TextBox1.Text
     
     
            ligne = DBGMAODataSet.Adresses.Select("N°" = contr)
     
     
     
     
     
            If ligne.Length = 1 Then
                Adr1 = ligne(0)(DBGMAODataSet.Adresses.Columns("Ad1").ToString())
                Adr2 = ligne(0)(DBGMAODataSet.Adresses.Columns("Ad2").ToString())
                Adr3 = ligne(0)(DBGMAODataSet.Adresses.Columns("Ad3").ToString())
                Adr4 = ligne(0)(DBGMAODataSet.Adresses.Columns("Ad4").ToString())
     
     
     
                RichTextBox1.Text = Adr1 & vbCrLf & Adr2 & vbCrLf & Adr3 & vbCrLf & Adr4
            End If
     
     
     
     
     
        End Sub
    a mon avis j'ai une erreur de syntaxe dans le code

    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu es sûr que le code compile ? Ce que tu as écrit n'a pas vraiment de sens : "N°" = contr renvoie True si la chaine contr est étale à "N°", sinon ça renvoie False. Et la méthode Select prend une String en paramètre, pas un Boolean...

    la syntaxe correcte est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = DBGMAODataSet.Adresses.Select("N°='" + contr + "'")

  3. #3
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    ok j'ai modifié mais le problème reste entier.
    Ligne a une longueur=0
    j'ai vérifie je cherche bien un string dans une colonne déclaré en string. la valeur existe bien dans cette colonne il devrait me trouver une occurence normalement.
    du coup je ne concatene pas l'adresse dans le richtext box??

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Essaie ça pour voir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ligne = DBGMAODataSet.Adresses.Select("[N°]='" + contr + "'")

  5. #5
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Idem
    Je cherche des exemples de codes avec select et une variable.
    en changeant les quotes je pensais que ca prendrai

    le prob c'est que je ne peux pas mater le site officiel microsoft au taffe pfff

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Bizarre, pourtant j'ai testé chez moi et ça marche bien...
    Tu es sûr qu'il n'y a pas un problème d'espace ou quelque chose comme ça ?

    Citation Envoyé par Ashireon Voir le message
    le prob c'est que je ne peux pas mater le site officiel microsoft au taffe pfff
    Bloqué par un proxy ? Si tu en as besoin pour le boulot tu peux sûrement demander à le débloquer...

  7. #7
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    oui ici la moitie matte des conn... sur leur mail mais on bloque le site microsoft va comprendre.

    je vais prendre le prob d'une autre maniere peut on trouver en cherchant par la cle primaire avec une methode type find...

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Ashireon Voir le message
    je vais prendre le prob d'une autre maniere peut on trouver en cherchant par la cle primaire avec une methode type find...
    Si c'est la clé primaire, effectivement Find est la meilleure solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ligne As DataRow = DBGMAODataSet.Adresses.Rows.Find(contr)
    En plus c'est plus propre...

  9. #9
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    mon probleme reste entier du coup je me demande si cela ne viens pas de la valeur dans la table. elle est declaree en string en 255caracteres est ce que ca joue sur une methode select ou find
    En tous cas merci ca avance

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Vraiment bizarre ton histoire... Tu as essayé de mettre un point d'arrêt et de vérifier le contenu de la table ?

  11. #11
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Salut,

    T'as essayé d'utiliser Linq?

    Je vien d'essayer et ca semble fonctionner.

    Voici comment j'ai fait

    La première étape mais non la moindre


    Deuxièmement -

    J'ai travailler avec une datatable qui contient des élément qui ont un type spécifique, je recherche un type en particulier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Public Function getSpecificType(ByVal _type As String) As EnumerableRowCollection
            Dim query = From row In dtMatPerMacPos.AsEnumerable _
                      Where row.Field(Of String)("Type court").Contains(_type)
                      ' Where row.Field(Of String)("Type court") = _type
            Return query
    End Function
    le .contains ressemble à un like '%' & _type & '%' tandis que la ligne en commentaires effectue une recherche fixe.

    Ca devrait pas être trop compliqué à adapté à ton cas je crois.

    Tu remplace dtMatPerMacPos par ton dataset.tables("ta table"). asEnumerable.

    Ensuite le row.field(of String)("Type court") par la colonne dans laquelle tu veux chercher, avec son type.

    Ensuite dans ta collection de Row tu as accès à chaque item, genre row.item("machinChouette").

    En espérant t'avoir aider!
    Logic is like the sword -- those who appeal to it, shall perish by it.

  12. #12
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    MAis bon, que tu utilise ma méthode ou celle de Tom ca change rien.

    Car comme Tom a dit, si ta table est mal remplie t'arrivera pas à grand chose
    Logic is like the sword -- those who appeal to it, shall perish by it.

  13. #13
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Bon , mon Ligne= nothing donc du coup je rapatrie pas de Ligne normale que le reste ne fonctionne pas
    J'essai de voir avec un dataview.
    PEut être que je n'ai pas declaré kkchose ?
    j'ai rereverifié la structure

  14. #14
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    come je ne connais pas link j'ai un prob de declaration pour Query
    ???

  15. #15
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Bon premièrement, tu remplie ton dataset comment?

    Est-il vraiment rempli.

    Si oui, en utlisant le .find ou le .select sur tonDataSet.tables("taTable") tu devrait y arriver.

    Si tu veux essayer en Linq, tu doit importer System.Linq
    Logic is like the sword -- those who appeal to it, shall perish by it.

  16. #16
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    mes tables je les ai ramener manuellement par une connexion a access pour récupérer les tables.
    je crée une maquette avec un reliquat de Base de données ( d’où le dataset)pour démonstration de ce que le service veut faire prochainement


    Me suis inscrit a des cours VB mais c 'es pas avant Octobre alors pour le moment je me debrouille avec les tutos, forums etc...

    J'ai déclarer link mais bon ou alors la

  17. #17
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Bon, je vien de tout taper et ca fonctionne.



    Je t'explique ce que j'ai fait.


    Pour me permettre de tester, j'Ai créer un dataset avec une table qui contient un N° avec adr1 adr2 adr3 adr4. J'y ai ajouté 3 lignes.

    Soit :

    n° adr1 adr2 adr3 adr4
    1 121 rue 1 122 rue 2 123 rue 3 123 rue 4
    2 221 rue 1 222 rue 2 223 rue 3 223 rue 4
    3 321 rue 1 322 rue 2 323 rue 3 323 rue 4


    Ensuite j'Ai taper une petite fonction que j'ai nommée getLine. Elle recoit en parametre le N° que tu veux chercher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Public Function getLine(ByVal _No As Integer) As enumerablerowcollection
     
    End Function
    Maintenant le Linq. Tu doit déclarer System.Linq dans l'Espace prévu à cette fin, soit avant toute déclaration de fonction, sub, variable, classe. Bref, en haut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Imports System.Linq
     
    Public Class Form1
    Mon imports est donc complètement en haut, avant ma classe form1.

    Ensuite, la requête Linq sur le datatable.

    Ca ressemble à une requête SQL un petit peu.

    Avec Linq, tu sélectionne des données dans une collection qui est "enumarable".

    Pour filtrer la sélection, on utilisera le mot-clé Where, comme en SQL.

    Maintenant, le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Dim result = From row In ds.Tables(0).AsEnumerable _
                      Where row.Field(Of String)("N°") = _No
    Avec ton oeil de lynx tu a surement remarqué que j'utilise le type String lorsque je renseigne le type des valeurs dans row.field . Il est possible que dans ton cas ce soit (Of Integer) qui se retrouve la, tout dépend du type des données qui peuplent ton datatable.

    Ajoute ce code dans la fonction que je t'ai donnée précédemment, et ajoute le retour de result.

    Ensuite, comme tu devrais avoir une seule "row" à chaque fois qu'on va chercher ( si ton N° est unique), tu peux aller chercher directement les infos de la première ligne de la collection.

    Pour remplir la collection, tu déclarer une variable de type enumerableRowCollection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim rowCol As enumerableRowCollection
    Ensuite, comme ta fonction retourne un type enumerableRowCollection, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rowCol = getLine(TextBox1.Text)
    Dans mon exemple, je cherche avec la valeur de textbox1. Tu cherchera avec ce que tu récupère dans ton treeview.

    Ensuite, tu peux écrire dans ton richtextbox.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            RichTextBox1.Text += rowCol(0).item(0) & vbCrLf
            RichTextBox1.Text += rowCol(0).item(1) & vbCrLf
            RichTextBox1.Text += rowCol(0).item(2) & vbCrLf
            RichTextBox1.Text += rowCol(0).item(3) & vbCrLf
            RichTextBox1.Text += rowCol(0).item(4) & vbCrLf
    En espérant t'avoir aider
    Logic is like the sword -- those who appeal to it, shall perish by it.

  18. #18
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Merci mais je comprends absolument rien a link en plus ca ne veut pas charger le module link

    Bon suit fatiguer /suicide snif

  19. #19
    Membre averti Avatar de Saintelaitlait
    Homme Profil pro
    Responsable ServiceDesk
    Inscrit en
    Août 2011
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Responsable ServiceDesk
    Secteur : Service public

    Informations forums :
    Inscription : Août 2011
    Messages : 179
    Points : 355
    Points
    355
    Par défaut
    Bon si tu veux laisse moi 7 min et je refait ca avec la méthode de Tom.

    Sinon repose toi au lieu de te suicider
    Logic is like the sword -- those who appeal to it, shall perish by it.

  20. #20
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Merci de vous donner tant de mal mais plus j'y pense plus je me dis que j'ai oublier kkchose car le code de Tom me parait correspondre de plus je l'ai trouver sur d'autres forums.
    il faut que je declare kkchose kk part mais ou ???
    la semaine dernière c'est avec OleDB que j'ai galerer mais j'ai finit par meetre le pilote 2007 et la paf ca a marcher nickel les transfert Access

    Je link la tete de ma tabler sur fichier xls
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. copié une ligne d'une table dans une autre
    Par Invité dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/11/2009, 20h48
  2. Réponses: 15
    Dernier message: 21/10/2009, 13h31
  3. [E-00] Syntaxe pour insérer une ligne ou une colonne dans une feuille
    Par Benjycool dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/02/2009, 09h27
  4. [MySQL] inserer une ligne d'une table dans une autre table
    Par piero53 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 14/12/2008, 18h29
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h08

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