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

Windows Forms Discussion :

Opérations du des données, DataTables ou Tableaux ?


Sujet :

Windows Forms

  1. #1
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut Opérations du des données, DataTables ou Tableaux ?
    Bonjour à tous

    Je développe un programme en visual basic sous visual studio 2008.

    Ce programme doit générer un rapport budgétaire à partir de données issues d'une BdD sous MSSQL d'une part et extraites de fichiers .txt d'autre part.

    Pour l'instant, les données sont bien extraites de la BdD et rangées dans des DataTables tandis que celles issues des fichiers .txt sont stockées dans des tableaux.

    Comme je ne suis pas très à l'aise avec les DataTables, j'ai commencé par remplir des tableaux avec les données des DataTables pour ne travailler que sur des tableaux par le suite. Cependant, remplir les tableaux prend beaucoup de temps de traitement !


    Ci-dessous le code utilisé pour remplir un des tableaux (le tableau "TableTaskMean")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Dim ListeSections2() As String = New String() {"Id", "IdTask", "IdMean", "DayNumber", "Quantity"}
     
            Dim NbTaskMean
             NbTaskMean = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site)
     
            ReDim TableTaskMean(4, NbTaskMean - 1)
     
            For i As Integer = 0 To NbTaskMean - 1
            For j As Integer = 0 To 4
     
            TableTaskMean(j, i) = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site).Rows(i)(ListeSections2(j))
     
           Next j
            Next i
    La requète SQL correspondant au GetDataBy :

    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
    SELECT Id, IdTask, IdMean, DayNumber, Quantity
    FROM dbo.TaskMean 
    WHERE IdTask IN
    (
    SELECT Id
    FROM dbo.Task 
    WHERE IdActivity IN
    (
    SELECT Id
    FROM dbo.Activity
    WHERE IdSchedule=
    (
    SELECT Id
    FROM dbo.Schedule
    WHERE IdSite=@ID_Site AND ScheduleType=0
    )
    )
    )


    Est-ce mon code qui fait que ça prend trop de temps ou est-ce normal et il ne faut travailler que sur des DataTables ?

    Merci d'avance
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2008
    Messages
    337
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 337
    Points : 456
    Points
    456
    Par défaut
    Le datatable est pourtant assez facile à utiliser qu'est ce qui te pose des soucis avec le datatable?

    Pour ce qui est du temps, c'est peut être également dut au fait que tu a 3 sous requetes dans ta requete

  3. #3
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Salut,

    petit préalable, je ne supporte pas les DataSet fortement typés (c'est moche !)

    ..;mais bon...

    ton problème ne vient pas du datatable, mais de la façon dont tu l'utilise
    Cette ligne la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            TableTaskMean(j, i) = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site).Rows(i)(ListeSections2(j))
    Rappelle GetDataBy autant de fois que tu l'appelles, donc tu appelles n fois ton select, au lieu d'une fois...

    donc, premiere chose, récupère une seule fois ton datatable...

    Seconde chose, faire des selects imbriqués avec des IN, en terme de performances, c'est mal ! Tu devrais faire des jointures, typiquement, qq chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT Id, IdTask, IdMean, DayNumber, Quantity
    FROM dbo.TaskMean 
    INNER JOIN dbo.Task on Task.Id = TaskMean.TaskId
    INNER JOIN Activity  on Activity .Id = Task.IdActivity 
    INNER JOIN Schedule on Activity.IdSchedule = Schedule.Id
    WHERE IdSite=@ID_Site AND ScheduleType=0
    Troisième chose à faire, remets ton programme en strict on, explicit on...
    Cette ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            Dim NbTaskMean
             NbTaskMean = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site)
    Ca fait carrèment mal aux yeux, GetData est censé renvoyer un datatable, et tu sembles utiliser le count du datatable...

    C'est un projet professionel, ou un stage ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  4. #4
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Pour ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NbTaskMean = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site)
    Le ".count" a disparu lors de la mise en forme de mon post...

    Sinon c'est pour un stage de fin d'étude mais comme vous pouvez vous en douter je ne suis pas un pro de la programmation...

    Bref, le problème c'est que je ne sais pas comment remplir un tableau avec les données de la datatable sans refaire la requete à chaque fois...
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  5. #5
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    GetDataBy te retourne une datatable, non ?

    Si c'est le cas, tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    Dim ListeSections2() As String = New String() {"Id", "IdTask", "IdMean", "DayNumber", "Quantity"}
     
    Dim dt as dataTable = Menu_choix_chantier.TaskMeanTableAdapter.GetDataBy(ID_Site) 
    Dim NbTaskMean as int = dt.Rows.Count
     
    ReDim TableTaskMean(4, NbTaskMean - 1)
     
    For i As Integer = 0 To NbTaskMean - 1
      For j As Integer = 0 To 4
       TableTaskMean(j, i) = dt.Rows(i)(ListeSections2(j))
       Next j
    Next i

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre éclairé Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Points : 813
    Points
    813
    Par défaut
    Effectivement c'est aussi simple que ça ! shame on me
    Je vais aussi remplacer les "IN" par des jointures mais je vais déjà comprendre comment ça marche...


    Merci !
    Geeker c'est comme manger, on ne peut pas s'en passer !!!

    Tout est objet !!!

    ____________________________________

    http://www.geekingmania.com

  7. #7
    Expert éminent sénior

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Points : 12 465
    Points
    12 465
    Par défaut
    Citation Envoyé par methylene Voir le message
    Je vais aussi remplacer les "IN" par des jointures mais je vais déjà comprendre comment ça marche...
    tu as tout interet à maitriser si tu veux continuer dans l'info

    Bon courage

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Extraction des données dans plusieurs tableaux
    Par mayradouane dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/12/2013, 19h05
  2. Opération sur des données
    Par JohnF dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 10/08/2013, 00h11
  3. [Tableaux] Récupération des données de 2 tableaux
    Par assiya dans le forum Langage
    Réponses: 2
    Dernier message: 24/06/2008, 10h24
  4. Réponses: 3
    Dernier message: 26/05/2008, 17h20
  5. [Tableaux] Opérations sur des données temporelles
    Par MmoulinexX dans le forum Langage
    Réponses: 1
    Dernier message: 30/10/2006, 12h26

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