Comment utilisé Structure sous VB ?

InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013 - 9 mai 2011 à 10:03
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 10 mai 2011 à 22:20
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

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
9 mai 2011 à 10:37
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
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
9 mai 2011 à 10:42
ha ok merci
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 mai 2011 à 22:48
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
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
10 mai 2011 à 10:18
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
0

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

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 mai 2011 à 18:46
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
0
InfoGeo Messages postés 87 Date d'inscription jeudi 2 février 2012 Statut Membre Dernière intervention 17 avril 2013
10 mai 2011 à 19:25
non mais ce que j ai fait marche, c pas utile de rajouter ca
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 mai 2011 à 22:20
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
0
Rejoignez-nous