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

Visual Studio Discussion :

Visual Studio 2017 / VB.NET / Tri data base SQL


Sujet :

Visual Studio

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    avril 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2016
    Messages : 53
    Points : 26
    Points
    26
    Par défaut Visual Studio 2017 / VB.NET / Tri data base SQL
    Bonjour,


    Je développe une application en VB-NET sous Visual Studio en utilisant une base de donnée locale (mdf).

    J'arrive à remplir cette base de donnée et à extraire des informations pour les afficher dans un DataGridView.

    Je bloque sur un problème concernant le Tri d'une colonne (pour l'instant de type varchar) qui contient des informations du genre : 1, 2, 11, 12, D1, D3, D17, 15E

    Pour l'instant, voici mon code pour aller afficher dans mon DataGridView le contenu de ma table "tb_list" en triant la colonne "BRDP"

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Dim conn As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Dtb.mdf;Integrated Security=True")
    Dim cmd As New SqlCommand
     
    cmd = conn.CreateCommand()
    cmd.CommandType = CommandType.Text
    cmd.CommandText = "select * from tb_list ORDER BY BRDP"
    conn.Open()
    cmd.ExecuteNonQuery()
    conn.Close()
     
    Dim dt As New DataTable()
    Dim da As New SqlDataAdapter(cmd)
    da.Fill(dt) 'OK
    Form3.DataGridView1.DataSource = dt

    Une fois affiché, le tri est du genre : "1, 11, 12, 15E, 2, D1, D17, D3" au lieu de ce que je souhaiterais : "1, 2, 11, 12, 15E, D1, D3, D17"

    J'ai compris que cela était dû au fait que ma colonne était de type varchar et que donc, je ne pouvais pas avoir un tri numérique.

    J'ai essayé plusieurs variantes trouvées dans des forums :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cmd.CommandText = "select * from tb_list ORDER BY LENGTH(BRDP), BRDP"
    cmd.CommandText = "select * from tb_list ORDER BY CAST(BRDP AS UNSIGNED INTEGER)"
    cmd.CommandText = "select * from tb_list ORDER BY BRDP+0"
    cmd.CommandText = "select * from tb_list Where CAST(BRDP As Integer)

    Aucun de ces tris ne fonctionne, à chaque fois j'ai un plantage de l'application.

    J'ai tenté aussi en modifiant le type de donnée (en passant de varchar à int), mais çà plante aussi.
    J'ai supposé que le int n'accepte pas des valeurs non numériques.

    Quelqu'un pourrait-il m'aider à comprendre pourquoi mes variantes de tri ne fonctionnent pas ?

    Merci d'avance pour votre aide !

  2. #2
    Candidat au Club
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    janvier 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2020
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Cela va être difficile en SQL, tu veux faire un tri un peu particulier.
    Le mieux, c'est que tu récuperes tes données non triées et tu les trie hors SQL dans ton code VB.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien d'essai
    Inscrit en
    avril 2016
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien d'essai
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2016
    Messages : 53
    Points : 26
    Points
    26
    Par défaut
    Bonjour DAIKOZ et merci pour ce retour.

    Ce que j'avais déjà essayé de faire, c'est de trier une fois les données dans le datagridview mais c'est la même chose, le tri numérique ne fonctionne pas non plus.

    Ce que je n'ai pas essayé, c'est de trier les données récupérer de la base SQL avant de les afficher dans le DGV, soit dans le "dt".

    Bête question, le dt c'est une datable ou un dataset, j'avoue que je ne comprends bien la nuance ?

    Et le "da" déclaré dans : Dim da As New SqlDataAdapter(cmd) ?


    En tout cas dans le "dt", j'arrive à manipuler les données avant de les afficher dans le DGV avec le code du genre :

    Code VB.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For IndexLigne = 0 To dt.Rows.Count - 1 
    dt.Rows(IndexLigne).Item("SrTotal") = dt.Rows(IndexLigne).Item("Sr")
    Next

    Mais comme pour la base SQL, je ne comprends pas comment je peux réaliser le tri numérique avec mes données varchar.

Discussions similaires

  1. Réponses: 10
    Dernier message: 11/06/2018, 20h33
  2. Réponses: 0
    Dernier message: 10/04/2017, 07h56
  3. Visual Studio 2005 VB.Net Trop lent
    Par Lebeb dans le forum Visual Studio
    Réponses: 7
    Dernier message: 15/05/2008, 16h54
  4. Réponses: 2
    Dernier message: 01/08/2006, 11h20
  5. Réponses: 1
    Dernier message: 03/03/2005, 10h55

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