Comment parcourir rapidement une base de données ?? VB 2010 WPF

Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012 - 29 déc. 2011 à 08:02
Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012 - 30 déc. 2011 à 11:17
[Aperçu de votre message]
Bonjour,

j'ai un souci pour parcourir ma base de données.

Ma base de données enregistre des puissances tout les minutes 24h/24

L'ID de ma table correspond à la date sous forme d'entier64 (date format automate)
par exemple 111117171608 (17/11/2011 17:16:08)

Je parcours ma table avec un while et une incrementation de 1.
Problème beaucoup trop long au chargement car énormément de valeur n'existe pas sont parcourus, je m'explique:

je parcours tout les valeurs entres
111117171208 et 111117235913 donc mon while exécute 64705 point en prenant seulement les point existant.
TRES TRES LONG... juste pour 7H d'intervalle.


17/11/2011 17:12:08 et 17/11/2011 23:59:13 en réalité il y a 420 point.

Je voudrais parcourir cette table à partir d'une valeur à une autres sans passé par les ID inexistant et sans devoir incrémenter de 1 en 1.

Si je ne suis pas compris je reformulerais autrement. Merci.

Voici une idée du code

Code Visual Basic :

While (valeurX <= fin) ' Voici la valeur de debut et la valeur de fin avec le pas de 1
Try
table = MaDataTable.FindByHoraire(valeurX) ' horaire etant la colonne des ID
valeurY = table.PuissanceGeneral
myPoint(valeurX) = New System.Windows.Point(filtreX(valeurX), filtreY(valeurY))
myPointCollection.Add(myPointA)
Catch ex As Exception
End Try
valeurX = valeurX + 1
End While

7 réponses

Utilisateur anonyme
29 déc. 2011 à 19:51
Bonsoir,

Ma base de données enregistre des puissances tout les minutes 24h/24

L'ID de ma table correspond à la date sous forme d'entier64

Tu peux donc sauter chaque fois 60 secondes.
Utilise une boucle for next avec un step de 60.
0
Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012
29 déc. 2011 à 20:00
Bonsoir,


Sa ne pourra pas marché car les valeurs ne sont pas forcement espacer de 60, des fois 58 des fois 61. Étant donner la latence du programme et le fait de récupérer l'horaire dans un automate via un OPC server.

Il n'y a pas une méthode pour parcourir seulement les ID existants ?


Horaire Puissance
111117171208 150000
111117171268 150000 <- Cela n'existe pas 17H12 et 68 S
111117171308 150000
111117171402 150000
111117171501 150000
111117171558 150000
111117171600 150000
111117171701 150000


Pas évident... Merci quand même pour ta réponse, si tu à d'autre idée hésite pas :)
0
Utilisateur anonyme
29 déc. 2011 à 20:15
Pourquoi avoir choisi un temps comme ID ?
Pourquoi ne pas faire un champ auto_increment comme ID ?
0
Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012
29 déc. 2011 à 20:21
Car quand je vais consulter ma base de données je dois parcourir q'une partie de ma base en fonction du choix de deux dates (début et fin)
pour ensuite récupérer les valeurs et tracer ma courbes.

Cette base de données garde en mémoire plusieurs moi de consommation énergétique.

Avec une ID qui s'auto incrémente je ne connaitrai pas la correspondance entre la date et l'ID si ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
29 déc. 2011 à 20:29
Tu n'as qu'a faire une requête avec BETWEEN :
SELECT *
FROM Store_Information
WHERE Date BETWEEN '06-Jan-1999' AND '10-Jan-1999'

Ainsi, tu n'auras plus qu'à énumérer le résultat de ta requete.
0
Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012
29 déc. 2011 à 20:37
Je vais essayer sa, pour voir si sa marche correctement.
Merci
0
Shindaraa Messages postés 41 Date d'inscription mercredi 22 juin 2011 Statut Membre Dernière intervention 22 juillet 2012
30 déc. 2011 à 11:17
Bonjour,


J'ai fait pas mal de recherche sur les bases de données, tout les explications sont différente et vétuste...

Pour VB 2010:
comment faire ma requête sql sur ma base local .sdf
et récupéré les informations.
Un exemple m'aiderai beaucoup.

actuellement le code de ma requete et le suivant si j'ai bien compris t'es explications:

Dim MonTableAdapter As New PuissanceDataSetTableAdapters.EnregistrementTableAdapter
        Dim MaDataTable As New PuissanceDataSet.EnregistrementDataTable
        MaDataTable = MonTableAdapter.GetData



Dim debutstring As String = 20111117000000 'datadebut.Day * 1000000 + datadebut.Month * 100000000 + (datadebut.Year Mod 100) * 10000000000
        Dim finstring As String = 20111117235959 'datafin.Day * 1000000 + datafin.Month * 100000000 + (datafin.Year Mod 100) * 10000000000 + 235959
        Dim requete As String
        requete = "SELECT  Horaire, Consigne, PuissanceGeneral" & _
                  "FROM Enregistrement" & _
                  "WHERE Horaire BETWEEN " + debutstring + " AND " + finstring



Voici une idée de mon code... je cherche encore actuellement comment faire.
0
Rejoignez-nous