Partage
  • Partager sur Facebook
  • Partager sur Twitter

comment afficher les enregistrements d'une table sql

sur un formulaire vb.net

Sujet résolu
    21 août 2011 à 0:23:28

    salut,
    j'espère que mon sujet attirera plus de coups de main



    j'ai fais un formulaire pour afficher les informations des employés sur visual studio.
    ces informations se trouvent sur plusierus tables de sql server express 2005, liées entre par les clés ètrangères.
    et j'ai ajouté sur ce formulaire, un bouton pour afficher les informations du dernier employé.
    un bouton pour afficher le premier employé.
    et un bouton qui permet de visualiser les informations de l'employé qui suit l'employé qui est en cours d'affichage sur le formualaire. et aussi pour voir le prècedent.

    les 2premiers boutons marchent bien, puisque j'ai utilisé "select * from employe where id_employe=min(id_employe)" et select * from employe where id_employe=max(id_employe).

    pour les autres boutons, ça marche bien, tant que les identifiants des employés ont un ordre ascendant:1,2,3,4,5 parce que j'ai mis pour l'id de la table employe, auto incrémenté de pas 1(identity)
    supposant que j'ai supprimer un employé x d'un id=2, il y'a aura donc sur la table employe:1,3,4,5
    et j'ai ajouté après un employé y, donc on aura :
    1,3,4,5,6
    et je supprime celui de 4=>
    la liste des employé sera comme ceci:
    1,3,5,6

    alors quand je suis sur le formulaire, et j'affiche le 1er employé, et je fais le suivant, :( on m'affiche rien, il reste sur le premier.
    meme chose, lorsque je suis sur le dernier et je fais le precedent, on m'affiche le precedent qui est le 5, mais son precedent, on me l'affiche pas.


    parce que j'ai programmer les boutons suivant et precedent, pour qu'ils affichent l'employé de l'identifiant= identifiant de l'employé qui est affiché sur le formulaire plus 1 (suivant) et moins 1(precedent).

    s'il vous plait pouvez vous m'aider?
    est ce qu'il y'a un moyen, pour traiter l'ajout et la suppression, afin que j'aie les identifiants dans l'ordre croissant et pas de coupure?

    voici le code pour le bouton suivant:
    connect()
            Dim id_courant, id_suivant, max As Integer
            Dim req As String
     
            req = "select id_employe from employe where ppr=" & T_ppr_l.Text
            lecture_BD(req)
            While dr.Read
                id_courant = dr.GetValue(0)
            End While
            ' MsgBox(id_courant)
            dr.Close()
     
            req = "select max(id_employe) from employe"
            lecture_BD(req)
            While (dr.Read)
                max = dr.GetValue(0)
            End While
     
            dr.Close()
     
            If (id_courant = max) Then
                MsgBox("cet employé est le dernier! ")
     
            Else
     
                id_suivant = id_courant + 1
     
                req = "select * from employe where id_employe=" & id_suivant
                lecture_BD(req)
                While dr.Read
     
            '###### affectations des valeurs aux champs du formulaire######
     
                End While
    




    svp aider moi!
    • Partager sur Facebook
    • Partager sur Twitter
      21 août 2011 à 1:07:21

      id_suivant = id_courant + 1

      dans ton code actuel, si ton id_courant = 1 (dans le cas ou tu commence par afficher les informations du 1er employé)
      ton id_suivant prendra la valeur 2
      vu qu'il n'y a pas d'id 2 (vu que dans ton exemple tu passe du 1 au 3. il faut que tu établisse un controle de plus pour savoir si l'id_suivant n'est pas vide.

      If (id_courant = max) Then
      MsgBox("cet employé est le dernier! ")

      Else

      id_suivant = id_courant + 1
      if id_suivant = nothing then 'si ton id_suivant n'existe pas
      id_suivant = id_suivant + 1 'ton id_suivant reçoit +1
      else
      'sinon ton id_suivant existe
      req = "select * from employe where id_employe=" & id_suivant
      lecture_BD(req)

      (je m'excuse si le code fourni ne fonctionne pas, je n'ai pas l'habitude de programmer de cette manière, et je n'ai pas l'intégralité de ton code, ce qui rend la chose difficile, j'espere cependant t'avoir aider un peu)
      • Partager sur Facebook
      • Partager sur Twitter
        21 août 2011 à 2:35:44

        Et qu'est-ce que vous pensez de l'idée qui consiste à demander à la base de renvoyer la première entrée dont l'id est supérieur à l'id courant (en triant les entrées selon leur id bien sûr) ? :-°
        req = "select top 1 * from employe where id_employe > " & id_courant & " order by employe_id"
        

        Si la requête ne renvoie rien, c'est que la dernière entrée avait été atteinte.

        Même principe pour obtenir l'entrée précédente, mais en triant dans l'autre sens :
        req = "select top 1 * from employe where id_employe < " & id_courant & " order by employe_id desc"
        

        (Ne pas oublier le "desc" à la fin de la requête !)

        M'est avis que ça devrait marcher un peu mieux. :)
        • Partager sur Facebook
        • Partager sur Twitter
          21 août 2011 à 4:01:42

          merci :) Kuyoki pour l'idée,tout est clair en ce qui concerne le code.
          je pense qu'il faut faire une boucle :
          tant que le suivant n'existe pas on incrémente.

          alors Orwel, j'ai testé tes requetes sur sql server, et ça marche nickel quelque soit l'ordre
          :D

          je vais les essayer avec visual studio
          je vous remercie infiniment Orwel.



          :) je vous met au courant du résultat

          :euh: sans votre aide je ne saurais quoi faire
          merci à vous deux :)
          • Partager sur Facebook
          • Partager sur Twitter
            21 août 2011 à 12:02:23

            Remarque qu'avec mes requêtes tu n'as pas besoin de boucle : un seul appel suffit pour récupérer l'entrée suivante ou précédente. C'est d'ailleurs un très mauvais principe en général de lancer des requêtes en boucle pour faire une recherche dans une base de données.

            Au passage tu peux aussi modifier légèrement mes requêtes pour renvoyer les 2 entrées suivantes ou précédentes : il suffit d'écrire select top 2 au lieu de select top 1. Le contenu de la seconde entrée ne t'intéresse pas réellement, par contre le fait de savoir si elle existe ou pas (donc si la base a renvoyé un ou deux résultats) te permet d'activer ou désactiver ton bouton "suivant" (ou ton bouton "précédent"). ;)
            • Partager sur Facebook
            • Partager sur Twitter
              26 août 2011 à 23:35:35

              Je vous remercie infiniment pour votre aide.
              • Partager sur Facebook
              • Partager sur Twitter

              comment afficher les enregistrements d'une table sql

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown