gefil63
Messages postés9Date d'inscriptionmardi 3 octobre 2006StatutMembreDernière intervention 1 novembre 2006
-
10 oct. 2006 à 17:46
gefil63
Messages postés9Date d'inscriptionmardi 3 octobre 2006StatutMembreDerniè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)
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
B0mbJacK
Messages postés141Date d'inscriptionlundi 23 février 2004StatutMembreDernière intervention25 octobre 20061 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
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
Dolphin Boy
Messages postés630Date d'inscriptionvendredi 5 mai 2006StatutMembreDernière intervention17 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.
gefil63
Messages postés9Date d'inscriptionmardi 3 octobre 2006StatutMembreDerniè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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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.
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 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