VB6 tableaux permanents

gefil63 Messages postés 9 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 1 novembre 2006 - 10 oct. 2006 à 17:46
gefil63 Messages postés 9 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 1 novembre 2006 - 18 oct. 2006 à 15:47
Bonjour à tous

Autan vous dire que je ne suis pas un pro de VB6...
Pourriez vous me dire comment je dois declarer mon tableau (8,8) pour qu'il puisse garder en memoire les remplissages successifs.
En effet j'attend en permaence des données sur le port com1. je traite ces infos et remplis un tableau dans une autre Sub, puis le programme attend de nouvelles data sur le port Com 1.
PB a chaque passage mes anciennes données sont ecrasées meme si je passe le Tab en parametre.
FAut il utiliser un pointeur sur le tableau. (je faisais ça en C je crois, il y a fort longtemps). je dois garder ce petit tableau rempli comme cela durant quelques heures . lorques je recevrais les dernieres valeurs attendues je pourrai effacer  le contenu..
 

merci d'avance ....

Dans GestionTablo je verifie que le badge existe et si c'est le cas je pousse les variables(Tabloactivite(), b, dateEncours, heureEncours, badgeEncours) vers   Sub enregistr en vue
d'un stockage a chaque passage.

Sub GestionTablo(Tabloactivite() As String, dateEncours As String, heureEncours As String, badgeEncours As String)

Tabloactivite(0, 0) = "1121011139"
Tabloactivite(1, 0) = "05611121"
Tabloactivite(2, 0) = "11214111119"
Tabloactivite(3, 0) = "051411155"
Tabloactivite(4, 0) = "013611714"
Tabloactivite(5, 0) = "113141118"
Tabloactivite(6, 0) = "0561125"


Tabloactivite(0, 1) = "aaaaaa
Tabloactivite(1, 1) = "bbbbbb"
Tabloactivite(2, 1) = "cccccc"
Tabloactivite(3, 1) = "dddddd"
Tabloactivite(4, 1) = "eeeeeee"
Tabloactivite(5, 1) = "ffffffffff"
Tabloactivite(6, 1) = "gggggg"
Tabloactivite(7, 1) = "hhhhhhh"


Dim b As Integer
b = 0
f = 0
While b <> 7 ' (Tabloactivite(b, 0) <> badgeEncours) 
    If (Tabloactivite(b, 0) = badgeEncours) Then
    f = 1
    Else:
    End If
b = b + 1
Wend




If (f = 1) Then
Call enregistr(Tabloactivite(), b, dateEncours, heureEncours, badgeEncours)
Else:
MsgBox ("Badge inconnu Traitement Impossible")
f = 0
End If


End Sub


Sub enregistr(Tabloactivite() As String, posiEncours As Integer, dateEncours As String, heureEncours As String, badgeEncours As String)

If (Tabloactivite(posiEncours, 3) & Tabloactivite(posiEncours, 4) = "") Then


 Tabloactivite(posiEncours, 3) = dateEncours
 Tabloactivite(posiEncours, 4) = heureEncours
 Print "3", Tabloactivite(posiEncours, 3)
 Print "4", Tabloactivite(posiEncours, 4)
 
 ElseIf (Tabloactivite(posiEncours, 3) & Tabloactivite(posiEncours, 4) <> "") Then
 Tabloactivite(posiEncours, 5) = dateEncours
 Tabloactivite(posiEncours, 6) = heureEncours
  Print "5", Tabloactivite(posiEncours, 3)
 Print "6", Tabloactivite(posiEncours, 4)
 End If

MsgBox ("Badge connu Traitement possible")
End Sub




 

7 réponses

B0mbJacK Messages postés 141 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 25 octobre 2006 1
10 oct. 2006 à 17:55
Lu

Dim Tabloactivite(8,8)
....paf ....tu rempli ton tablo
et voici la commande
Redim Preserve Tabloactivite(10,10)
... info : grace à "preserve", tu garde en mémoire tes anciennces données de ton tablo

voila, bon coding....++
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
10 oct. 2006 à 18:23
Ton problème concernant le tableau ne viens du code publié, il se situe dans le code appelant la routine GestionTablo.
En VB6, sauf demande explicite, les paramètres sont passés par référence aux fonctions (ça reviens à passer un pointeur en C)

il faut effectivement déclarer le tableau en taille fixe.
Par contre BombJack, je ne vois pas l'utilité du ReDim Preserve, Il n'est dit nulle part que le tableau est redimentionné en cours de route.

Par Gefil63 contre ton code me pose problème. Tel qu'écrit, tu vas systématiquement sortir de ta boucle avec b=7. Donc tu av systématiquement enregsitrer tes données à l'indice 7. De plus , pour l'indice 7, la comparaison n'est pas faite, tu sort de la boucle avant.

Perso je remplacerais la boucle While/Wend par ceci

For b = 0 to 7
    If (Tabloactivite(b, 0) = badgeEncours) Then
        f = 1
       Exit For
    End If
Next

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
0
Dolphin Boy Messages postés 630 Date d'inscription vendredi 5 mai 2006 Statut Membre Dernière intervention 17 février 2007
10 oct. 2006 à 19:42
Salut,
Si j'ai bien compris, <gefil63> tu voudrais conserver l'antériorité de chacun de tes tableaux ?
A mon avis, toute solution passant par des tableaux est à proscrire (combien de tableaux dois tu conserver ?) car tu vas vite rencontrer un problème de mémoire.
Si tu veux conserver tes données, enregistre-les dans une base de données ou des fichiers texte.
0
gefil63 Messages postés 9 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 1 novembre 2006
10 oct. 2006 à 21:02
Déjà merci  a vous pour vos réponses ...

BomBJack j'avais effectivment pensé a cette fonction
Redim Preserve Tabloactivite(10,10) mais je n'ai pas besoin de redimensionner et donc j'avais de prime abord ecarté cette possibilité.....

Ok Casy le Tab est surdimmensioné d'une ligne par raaport a mon besoin et c'est vrai que j'ai pas testé le resultat en bordure.. Tu as de toute façon raison sur la boucle pas de PB 

Ok Dolphin Boy c'est juste un Tab de 64 cases avec des petite String en memoire que j'efface dés que remplies....


En fait mon tableau je le crée dans ma premier fonction avec
Dim Tabloactivite(8, 8) As String et aprés je le passe sans y adjoindre quoi que ce soit jusqu'a la SUB GestionTablo ci dessus..... Il faudrait peut être le declarer en Public mais cela ne changerai pas grand chose à mon sens.

c'est un truc tout bête probablement mais je vois pas ....
un tableau de 64 cases maxi je rempli ligne par ligne au rythme du port serie ..
quand une ligne est pleine je l'ecrit dans un fichier et j'efface la ligne du tableau.. 
c'est juste un tableau de travail aprés j'edite la ligne dans un fichier pas de PB.

Je pense que cela est possible sans a avoir a ecrire dans un  fichier de travail (pour stocker l'info) puis relire ce fichier faire le travail de test sur les string issues du fichier puis reecrire au propre dans un autre fichier le resultat souhaité.... Solution qui presente l'avantage de ne rien perdre en cas de coupure de jus par exemple.....

Si qq'1 voit une issue à mon PB ..

Merci d'avance.










 
0

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

Posez votre question
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 oct. 2006 à 06:14
Bonsoir,
Toute déclaration de tableau doit se faire en deux phases
1° Phase déclaration
  Dim Tabloactivite() As String 
2° Phase initialisation
  ReDim Preserve Tabloactivite(8, 8)
Par la suite tu peux utiliser ton tableau avec la même dimension
tout au long du prog  en affectant des valeurs aux éléments
Ou bien le redimensionner(avec Redim Preserve) au fur et à mesure
de tes besoins en plus ou en moins.
0
chaibat05 Messages postés 1883 Date d'inscription samedi 1 avril 2006 Statut Membre Dernière intervention 20 novembre 2007 2
11 oct. 2006 à 08:11
Re bonjour,
déclares ton tableau comme  Public
Ainsi nulle besoin de le passer en paramètre à
Sub enregistr() et à Sub GestionTablo()
Le passage de tableau en paramètre est très délicat.


De plus si ton tableau est rempli de valeurs de différents types
tu dois le déclarer Variant


Résumé :
Dans un module
Public Tabloactivite() as Variant


Procédure Initialisation
Redim Preserve Tabloactivite(8,8)


...
chaibat
0
gefil63 Messages postés 9 Date d'inscription mardi 3 octobre 2006 Statut Membre Dernière intervention 1 novembre 2006
18 oct. 2006 à 15:47
bonjour a tous

Ok Chaibat05 en declarant ma variable au niveau d'un module cela résout 
mon pb j'accede a ma varible tableau sans PB.
Donc solution trouvée.....

Ok merci.. 
0
Rejoignez-nous