Boucle for dans une datatable

Résolu
Xavleb Messages postés 21 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 26 janvier 2009 - 30 juil. 2008 à 16:20
Xavleb Messages postés 21 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 26 janvier 2009 - 31 juil. 2008 à 11:27
Bonjour,

Je developpe une application utilisant une base de donnée sql serveur permettant l'adressage ip d'une entreprise. Tout dabord, je fais un select pour ensuite remplir une datatable. Ensuite je voudrais faire une boucle for qui me permette de verifier chaque ligne de ma table jusqu'a la dernière ligne. Et si on trouve une valeur égale à la variable Ipp alors on appel une fonction qui modifie Ipp et on recommence la boucle. Le problème c'est que ma boucle for ne fonctionne pas et je ne sais pas pourquoi. Merci d'avance pour vos réponses. le code est le suivant:

      

        strsql1 = "SELECT T_MATER.ADR_IP FROM T_MATER, T_SS_PLAGE WHERE ADR_DEB_SSP='" & ssp & "' AND T_MATER.ID_SSP=T_SS_PLAGE.ID_SSP"
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??> '  recupération de toutes les @ IP où la sous plage = ssp

       

        objetcommand = New SqlCommand(strsql1)

        objetdataadapter = New SqlDataAdapter(objetcommand)

        objetcommand.Connection() = con

        objetdataadapter.Fill(objetdataset, "T_MATER")

        objetdatatable = objetdataset.Tables("T_MATER")

 ' mettre le contenu dans une datatable   

 
           For rownumber 0 To rownumber objetdatatable.Rows.Count - 1

          ' pour toutes les lignes de ma datatable

                          If objetdatatable.Rows(rownumber).Item("ADR_IP") = Ipp Then
                            ' psi le contenu de la ligne rownumber 
                               est egal à la variable Ipp (à l'addresse)

               

                         Dim nbal2 As String

                          nbal2 = propos_ip(troisdernierchar2, troisdernierchar)

                          rownumber = -1

' pour appel de la fonction et remise de rang à zéro pour recommencer la boucle et revérifier               
                          EndIf

            rownumber += 1' j'incrémente la ligne et je recommence la verification

        Next

 

 

    J'éspère avoir été clair. Si qqn peut corriger mon(mes) erreurs svp.

Xavier.

3 réponses

LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
30 juil. 2008 à 18:48
Salut,
je connais pas trop vb net, mais renseignes toi sur les paramètres de ta connection ou de ton objet Command.
Je crois bien que c' est une question de curseur qui doit être dynamic, si toutefois c' est une question de boucle qui n' avance pas.

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
3
Profil bloqué
30 juil. 2008 à 22:26
Salut je ne te donnerais surement pas la solution mais plusieurs choses me chiffonnent1 ) For rownumber 0 To rownumber objetdatatable.Rows.Count - 1 à remplacer par For rownumber = 0 To objetdatatable.Rows.Count - 1

2)  If objetdatatable.Rows(rownumber).Item("ADR_IP") = Ipp Then
   cette condition reviendra sans arrêt car tu ne modifies aucun des 2 éléments dans le code qui est déclenché par cette condition
  
  explication = IF A= B then
       on ne modifie ni A ni B
  end if

Le condition reviendra alors à l'identique et la boucle For tournera sans fin

3) Utiliser un Do Loop qui encadre la boucle (éviter de modifier la variable de boucle)
Dim Trouve as Boolean = False
Do
      For ..............
             Application.doevents()
             if A = B then
                   traitement de cette condition (faire en sorte que cette condition pour cette ligne ne revienne pas : voir au dessus)
                   Trouve  = True
                   Exit do ' on sort de la boucle For  Next
             End If
     Next
     If Trouve = False Then Exit Do  ' on sort de la boucle Do car plus rien à traiter
loop

J'espère que cela t'aidera

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
3
Xavleb Messages postés 21 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 26 janvier 2009
31 juil. 2008 à 11:27
Merci de vos réponses. Cependant je ne suis pas arrivé à faire foncyionner ma boucle, mais je m'y suis pris autrement, j'ai utiilser la méthode foundrow. Les paramètres de connection étaient bon Libre_max. Sino pour répondre à alain, je modifiait mon paramètre B mais je l'ai pas mis dans le message, car le pb ne venait pas de là. Je pense qu'il venait du fait qu' il n'y a pas d'enregistrement courant pour une datatable,pas de pointeur sur un enregistrement, c'est nous même qui gérons RowNumber, une simple variable qui contient le numéro de l'enregistrement (l'index du DataRow) sur lequel on travaillez. Et je pense que je le gérais mal.
0
Rejoignez-nous