Fichier a acces direct et variable d'enregistrement

piope Messages postés 61 Date d'inscription jeudi 22 avril 2004 Statut Membre Dernière intervention 17 juin 2004 - 26 avril 2004 à 10:10
diasool Messages postés 5 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 10 août 2010 - 17 oct. 2008 à 18:29
bonjour !! alors voila :
je cherche a gerer un fichier a acces direct (ouverture, lecture, ecriture) et mon probleme est que lorsque je declare une variable d'enregistrement, je ne peut la mettre autre que private, ce qui fait que je ne peut pas m'en servir dans une autre fenetre, je dois a chaque fois redeclarer une variable, pour le meme fichier.....
de plus, quand j'ecrit dans le fichier, il me met un caractere indesirable avant la chaine (petit carré noir) ma ligne est : put #1, 1 + n * len(VarEnreg), VarEnreg ' le 1 + n * len(VarEnreg) est arbitraire

voila, si vous avez des solution pour ces 2 problemes, je suis tout ouï, merci

7 réponses

cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
26 avril 2004 à 10:47
Bonjour
1. Tu crées un module (Projet => Ajouter un module) et dans ce module, tu déclares ta variable d'enregistrement :
Public VarEnreg As ...
Elle sera accessible depuis tout le projet.
Bien sûr, il faut supprimer tous les
Dim (ou Private) VarEnreg As ...

2. Pourquoi 1 + n * len(VarEnreg) et pas n tout court ?
0
diasool Messages postés 5 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 10 août 2010
14 oct. 2008 à 22:31
Diasl
module
type employé
     nom as string
     prenom as ...
     code as integer
     .....
  endtype
  

code d'ajout

declaration locale
dim i as integer
dim e as employé

open "c:\...emp.txt" for random accées as #1
i=i+1
put #1,i,e
close #1

le problème ici que chaque fois après l'exécution de prog la variable initialisé par 0 qui produit un écrasement dans notre fichier

ya t il de solution ????
0
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
15 oct. 2008 à 00:17
Bonjour

Oui : c'est ton "dim i as integer" qui réinitialise la variable i à 0.
Il faut donner une valeur autre que 0 à i par l'instruction :
i=LOF(1)/Len(e)
i=i+1
Ceci, bien sûr, pour écrire à la fin du fichier.
0
diasool Messages postés 5 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 10 août 2010
15 oct. 2008 à 14:08
Diasl
je pense pas car le probléme n'a pas une relation avec l'initialisation de la variable i
même si elle est initialisé de 1 o 2 o 3 ...
je parle de l'écrasement des enregistrements aprés le redémarage de prog car chaque fois le code s'exécute dans un sens vertical

vous pouvez le tester !!!!!!!!






















et merci
0

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

Posez votre question
cs_rene38 Messages postés 1858 Date d'inscription samedi 29 juin 2002 Statut Membre Dernière intervention 17 octobre 2013 11
15 oct. 2008 à 15:31
Bonjour
Ce serait alors l'ouverture du fichier à accès direct :
open "c:\...emp.txt" for random accées as #1
à remplacer par
Open "c:\...emp.txt" For Random As #1  Len = Len(e)
sinon, la longueur d'enregistrement est initialisée à 1 octet.
0
diasool Messages postés 5 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 10 août 2010
15 oct. 2008 à 23:51
Diasl

Bonjour

vs n'avez pas encore saisie le problème

par exemple :
quand on redémarre le pc l'heur système
reste toujours exacte
car on a le pile
contre notre variable i qui se réinitialise chaque fois après le redémarrage ou bien la fermeture de l'application
il faut que la variable i conserve ça valeur  et la longueur d'enregistrement n'a rien avoir avec cette conservation

et merci 1000 fois pour ton aide
0
diasool Messages postés 5 Date d'inscription lundi 13 octobre 2008 Statut Membre Dernière intervention 10 août 2010
17 oct. 2008 à 18:29
Diasl




module

type employé
     nom as string
     prenom as ...
     code as integer
     .....
  end type



global e as employé

Code enregistrer
open "employé" for random as 1 len= len(e)
e.nom=zon de text 1

e.prenom=zon de text 2

e.code=zon de text 3
.....
put #1,lof(e)\len(e)+1,e
close

lof(e)\len(e)+1 qui asure la protection des anciennes enregistrement
s
remarque
pour evité chaq fois d'ouvrir le fichier et ensuite le fermé
il vaut mieux faire ça :
dans le code de votre feuille
onLoad
open "employé" for random as 1 len =len(e)
unload
close
0
Rejoignez-nous