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 :

Dataset qui tourne en rond


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut Dataset qui tourne en rond
    Bonjour à tous,

    Voilà : j'ai créé un petit soft qui fonctionne avec une base mysql. Ce soft utilisait un DataReader pour la lecture des données. Ce DataReader devait intervenir régulièrement pour lire chaque enregistrement, l'un après l'autre. Du coup, pour améliorer ça, je souhaiterais utiliser un DataSet...
    Armé du tuto de Philippe Lasserre et de mes maigres connaissances, je me lance dans la conversion du code... Voici ce que j'ai fait :
    Code VB2005 : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    Private Sub full_race_param_loading()
            add_status_text("Début du chargements de tous les paramètres de l'épreuve...")
            'test connection
            Try
                cnx_database = New MySqlConnection
                cnx_database.ConnectionString = connexion_string
                cnx_database.Open()
                cnx_database.Close()
            Catch ex As Exception
                add_status_text("Perte de la connection avec le serveur. " & ex.Message)
                Exit Sub
            End Try
            'ouverture
            cnx_database = New MySqlConnection
            cnx_database.ConnectionString = connexion_string
            cnx_database.Open()
            ObjetCommand = New MySqlCommand("SELECT * FROM race WHERE race_name = '" & race_lst.SelectedItem.ToString & "'")
            ObjetDataAdapter = New MySqlDataAdapter(ObjetCommand)
            ObjetCommand.Connection() = cnx_database
            ObjetDataAdapter.Fill(ObjetDataSet, "race_parameters")
            ObjetDataTable = ObjetDataSet.Tables("race_parameters")
            'fermeture
            ObjetConnection = Nothing
            ObjetCommand = Nothing
            ObjetDataAdapter = Nothing
            ObjetDataSet = Nothing
            ObjetDataTable = Nothing
            ObjetDataRow = Nothing
            add_status_text("Chargements de tous les paramètres de l'épreuve réussi!")
        End Sub
     
    Private Sub race_parameters_reader()
            RowNumber = gate_selected - 1
            ObjetDataTable = ObjetDataSet.Tables("race_parameters")
            'Lors de l'ouverture de la BD, s'il n'y a aucun enregistrement
            If RowNumber < 0 Then
                add_status_text("Plus de données téléchargeables.")
                Exit Sub
            End If
            ' ObjetTable.Rows(Numéro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donnée
            If RowNumber > ObjetDataTable.Rows.Count - 1 Then
                Exit Sub
            End If
            ' ObjetTable.Rows(Numéro de lignes).Item( Nom de colonne) donne le contenu d'un champ dans une ligne donnée
            gate_latitude = CDbl(ObjetDataTable.Rows(RowNumber).Item(2))
            gate_longitude = CDbl(ObjetDataTable.Rows(RowNumber).Item(3))
            r_action = CDbl(ObjetDataTable.Rows(RowNumber).Item(4))
            cap_consigne = CDbl(ObjetDataTable.Rows(RowNumber).Item(5))
            cap_marge = CDbl(ObjetDataTable.Rows(RowNumber).Item(6))
            bank_consigne = CDbl(ObjetDataTable.Rows(RowNumber).Item(7))
            bank_marge = CDbl(ObjetDataTable.Rows(RowNumber).Item(8))
            pitch_consigne = CDbl(ObjetDataTable.Rows(RowNumber).Item(9))
            pitch_marge = CDbl(ObjetDataTable.Rows(RowNumber).Item(10))
            alt_mini = CDbl(ObjetDataTable.Rows(RowNumber).Item(11))
            alt_maxi = CDbl(ObjetDataTable.Rows(RowNumber).Item(12))
            speed_maxi = CDbl(ObjetDataTable.Rows(RowNumber).Item(13))
            fuel_mini = CDbl(ObjetDataTable.Rows(RowNumber).Item(14))
            fuel_maxi = CDbl(ObjetDataTable.Rows(RowNumber).Item(15))
            land_allowed = CStr(ObjetDataTable.Rows(RowNumber).Item(16))
            comments = CStr(ObjetDataTable.Rows(RowNumber).Item(17))
        End Sub

    Donc, dans mon soft, sur un évènement, je dois lire l'enregistrement suivant...
    Je lui dit donc
    Code VB2005 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    full_race_param_loading()
    RowNumber = 0
    race_parameters_reader()
    Puis sur l'évènement, je fais :
    Code VB2005 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RowNumber +=1
    race_parameters_reader()
    Bon, je vous rassure, ça c'est ce que j'imagine fonctionner...
    Mais au RowNumber = 0, mon soft ne charge pas les valeurs contenues dans la base de données, et tourne en rond dans le sub race_parameters_reader() sans passer par les deux Exit Sub contenu!!!!
    Je comprends pas pourquoi!!!


    Merci d'avance de l'aide que vous pourrez m'apporter...

  2. #2
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Comment appelles-tu ton race_parameters_reader() ? Il y a bien une boucle quelque part non ?

    Sinon, je ne vois pas l'intérêt du dataset dans ton cas étant donné qu'il ne sert que pour la lecture (un reader est bien plus performant).

    Cdt.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Bonjour,

    Citation Envoyé par olsimare
    Sinon, je ne vois pas l'intérêt du dataset dans ton cas étant donné qu'il ne sert que pour la lecture (un reader est bien plus performant).
    En fait, c'est ce que j'avais compris mais... Mon soft sert à chronométrer des courses aériennes sur Flight Simulator. Il charge les paramètres de la porte suivante à chaque franchissement de porte... J'ai un ami canadien qui se prend un gros délai à cause du chargement des données. Les enchainements étant parfois très courts, je ne peux pas me permettre d'avoir des temps aussi longs. Du coup, je passe sur un DataSet... 1 téléchargement avant le début de la course et il sera tranquille sur les différents enchainements.

    Pour ce qui est de mon DataSet, donc si je comprends bien pour toi, tout est bon... C'est juste que je dois avoir une boucle dans mon code avec race_parameters_reader()...
    Code VB2005 : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Private Sub AxFSCopilot1_ValueUpdateEnd(ByVal sender As Object, ByVal e As System.EventArgs) Handles AxFSCopilot1.ValueUpdateEnd
            Select Case type_procedure
                '......................................................................................................................
                Case "flight_retrieved"
                    'procédure si la position sauvegardée de l'appareil est reprise
    
                    If gate_valid Then
                        Select Case gate_selected
                            Case 1
    
                                gate_selected += 1
                                gate_param_loading()
    
                            Case gate_nb
    
                                gate_selected += 1
    
                                type_procedure = "flight_completed"
    
                            Case Else
    
                                gate_selected += 1
                                gate_param_loading()
    
                        End Select
                    Else
                    End If
    
    '__________________________________________________________________________________________________________________
                        Case "rallye"
                            'On verra ce que je dois mettre
                        Case Else
                            'Rien... il se passe rien
                    End Select       
             '..................................................................................................................
                Case "retrieving_flight"
                    'procédure pour la reprise du vol
                    …
                    'si position ok + appareil au sol = passage à flight_retrived sinon maintient état
                    Select Case race_mode
                        Case "Training"
                            If g_force_etat Then
                                'si l'appareil est au sol et à la bonne position
                                'reprise du chrono si porte 1 déjà franchie
                                If Not gate_selected = 1 Then Stopwatch.Start() Else Stopwatch.Stop()
                                gate_param_loading()
                                type_procedure = "flight_retrieved" 
                                …
                            Else
                                'si l'appareil n'est pas au sol et/ou à la bonne position et/ou avec g_force over limit
    
                            End If
                        Case Else
                            If pl_onground And flight_distance < 1 And g_force_etat Then
                                'si l'appareil est au sol et à la bonne position
                                If Not gate_selected = 1 Then Stopwatch.Start() Else Stopwatch.Stop()
                                'reprise du chrono si porte 1 déjà franchie
                                gate_param_loading()
                                type_procedure = "flight_retrieved"
                                …
                            Else
                                'si l'appareil n'est pas au sol et/ou à la bonne position et/ou avec g_force over limit
    
                            End If
                    End Select
    
    '..................................................................................................................
                Case "end_flight"
                    'procédure à la suite d'une sauvegarde ou si l'épreuve est terminée
                    'laissé vide de manière à stoppé les valeurs monitorées
     
    '..................................................................................................................
                Case "flight_completed"
    
    '..................................................................................................................
                Case Else
                …
            End Select
        End Sub 'code à chaque MAJ des valeurs monitorées
    Private Sub gate_param_loading()
            race_parameters_reader() 
            ...
    End Sub 'charge les paramètres de la porte sélectionnée (tps de chgt moy = +/-9ms)
    Je vous fais grâce de tout ce qui n'est pas lié! lol Je comprends toujours pas... J'espère sincèrement que vous allez pouvoir m'aider parce que je nage complétement!!!
    Merci d'avance

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Je viens de trouver les lignes qui font la boucle...
    Il s'agit de :
    Code VB2005 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            RowNumber = gate_selected - 1
            ObjetDataTable = ObjetDataSet.Tables("race_parameters")
    ... dans race_parameters_reader()
    C'est donc mon code pour le dataset qui n'est pas bon...
    Retour au cours de Philippe Lasserre mais je pense pas que je comprendrais mieux aujourd'hui!!! Une suggestion?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 89
    Par défaut
    Bon alors, j'ai tenté des modifs : ça charge des valeurs mais c'est pas du tout la table que je souhaites et ça fait ça en continue!!!!
    Est ce que quelqu'un pourrait m'expliquer comment faire :
    1. Chargement d'une table de ma base mySQL dans le DataSet (fermeture connection)
    2. Lecture à la demande d'une ligne de la table chargée...

    Je précise que j'ai des DataRedear qui sont utilisés pour d'autres tables... On ne sait jamais, dès fois que ça foute le bordel dans le DataSet mais bon... j'y crois pas trop!

    Merci d'avance de votre aide

  6. #6
    Membre Expert
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 182
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 182
    Par défaut
    Bonjour.

    Désolé mais je ne comprend pas tout bien ...

    C'est une lecture séquentielle que tu veux faire : t'appelles la proc et ça te retourne la ligne suivante ?
    Si c'est ça, charge ton dataset est utilise un DataTableReader sur le table(0), comme tout se passe en mémoire c'est trés rapide.

    Si c'est un enreg donnée que tu veux, utilise un dataview pour filtrer ta datatable(0).

    Cdt.

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

Discussions similaires

  1. Erlang - Installation qui tourne en rond
    Par dafpp dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 27/05/2012, 09h29
  2. Paramètres GET & fonction qui tourne en rond
    Par bigltnt dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2007, 11h06
  3. Requete qui tourne en rond
    Par hugo69 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/11/2005, 20h02
  4. Prog qui tourne en rond :-(
    Par FranckDev dans le forum CORBA
    Réponses: 2
    Dernier message: 07/09/2005, 13h50

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