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

Signaler
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012
-
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012
-
[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


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.
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012

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 :)

Pourquoi avoir choisi un temps comme ID ?
Pourquoi ne pas faire un champ auto_increment comme ID ?
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012

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 ?

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.
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012

Je vais essayer sa, pour voir si sa marche correctement.
Merci
Messages postés
41
Date d'inscription
mercredi 22 juin 2011
Statut
Membre
Dernière intervention
22 juillet 2012

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.