Comment utilisé Structure sous VB ?

Signaler
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013
-
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
-
Salut

Je dois réaliser une structure sous VB mais je ne sais pas vraiment comment faire, pour linstant j ai fait ca

Public Type Capteur
  Nom As String           ' nom du capteur (ex: TEMPERATURE_1)
  Emplacement As String   ' emplacement du capteur
  TypeMeasure As String   ' type de mesure du capteur
  TypeSensor As String    ' Type du capteur
  SerialNumber As String  ' numéro de série du capteur
  Interface As String     ' type d'interface du capteur
  Number As Integer       ' Numéro du capteur tel que défini dans le fichier ConfigHard.ini
  LastMeasure As Single   ' Valeur de la dernière mesure
  LastTime As Date        ' Date et heure de la dernière mesure
  DBField As String       ' Nom du champ correspondant dans la base de données
End Type

Public toto() As Capteur


Call IniReadItems(AppIniFile$, "SENSORS", toto().DBField)




Sauf que ca marche pas, en fait ce que je voudrais savoir c si j ai le droit par exemple de faire ca :


for i = 1 to 10

toto(i).number = i



Et si oui pourquoi ce que je vous ai montré au dessus ne marche pas ?

7 réponses

Messages postés
420
Date d'inscription
vendredi 17 novembre 2006
Statut
Membre
Dernière intervention
15 juillet 2014
5
Bonjour,

Oui vous pouvez faire
toto(i).number = i


Le problème dans votre exemple est que vous ne donnez pas l'index du capteur dans la table toto. Il faut toujours faire référence à un élément de la table.

Exemple
Call IniReadItems(AppIniFile$, "SENSORS", toto(2).DBField)


Ou dans une boucle
For i = 1 to 3
   Call IniReadItems(AppIniFile$, "SENSORS", toto(i).DBField)
Next
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

ha ok merci
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Il ne faut pas oublier de Redimensionner une première fois le tableau, VB ne peut pas connaitre sa taille max sinon ...

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

Au final, voila ce que j'ai fait en fait =)



    '=================variables=======================
    Dim TabNom() As String
    Dim i As Integer
    Dim a As String
    Dim cfg_Capteur() As String
    '=================================================
    
    ReDim MySensors(0)
    Call IniReadItems(AppIniFile$, "SENSORS", TabNom())       'permet de lire le nom des objets dans notre fichier
                                                              'MPEnv.ini (C:\Documents and Settings\chavaroc\Mes documents\ProjetsVB\532_M.P.Env)

    For i = 1 To UBound(TabNom)
     ReDim Preserve MySensors(UBound(MySensors) + 1)
     a = IniReadString(AppIniFile$, "SENSORS", TabNom(i))   'permet d'obtenir les caractérisitiques du capteur par rapport a la base de données
     cfg_Sensors() = Split(a, "")             'permet de séparer les caractéristiques
     cfg_Capteur() = Split(TabNom(i), "_")     'permet d'obtenir le numéro du capteur
     MySensors(i).Nom = TabNom(i)              'écrit dans le tableau structurée a l'emplacement nom, le nom du capteur
     MySensors(i).DBField = cfg_Sensors(0)     'écrit dans le tableau structurée a l'emplacement DBField, la variable correspondante sous la base de données
     MySensors(i).TypeMeasure = cfg_Capteur(0) 'écrit dans le tableau structurée a l'emplacement TypeMeasure, le type de mesure du capteur
     MySensors(i).Number = cfg_Capteur(1)      'donne le numéro du capteur
    Next i
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Dans ta boucle, supprime le ReDim Preserve et juste après ton appel à IniReadItems, fais
ReDim MySensors(UBound(TabNom)+1)
. Normalement ça devrait aller

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Messages postés
87
Date d'inscription
jeudi 2 février 2012
Statut
Membre
Dernière intervention
17 avril 2013

non mais ce que j ai fait marche, c pas utile de rajouter ca
Messages postés
3983
Date d'inscription
jeudi 14 juillet 2005
Statut
Membre
Dernière intervention
30 juin 2013
13
Ton code marche peut-être, mais il est beaucoup plus lent pour rien. Au cas où tu ne le saurais pas, lorsque tu fais un ReDim Preserve, VB alloue une zone plus grande, recopie le tout et désalloue l'ancienne. Sur un gros tableau ça peut trainer. M'enfin tu codes comme tu veux, maintenant tu sais pourquoi ton truc se traine(ra) avec plus de données

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question