ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 6 juil. 2005 à 04:09
Héhé, on le tient notre vrai héros!!!
Comme d'habitude, c'est notre ami Gobillot!!!
Mais NykoKurapika a quand même été gentil de me tenir informé de la
solution... c'est gentil de ta part même si, finalement, contrairement
à ce que je pensais ce n'est pas toi qui a trouvé la solution (tout fini toujours par se savoir!!!)
Mais question Gobillot (parce que moi et le mode Random on est pas très
copain copain), doit-on oblgatoirement remplir les strings du nombre de
caractères indiqué ou alors n'est-ce qu'une question de taille maxi et
de mémoire ???
Autre question : quel service peut bien rendre ce mode ??? Travailler comme une DB ???
Enjoy
<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 6 juil. 2005 à 14:35
L'Accès Random ou Aléatoire,
c'est étrange pourquoi ce nom, ça voudrait dire qu'on lit les
enregistrements au hasard, n'importe comment, au petit bonheur la
chance ?
hé bien non pas du tout, ce serait plutôt exactement le contraire, c'est pourquoi je lui préfère le nom d'Accès Direct.
ça veut dire que l'on peut accèder directement à l'enregistrement que l'on veut par opposition à l'Accès Sequentiel
par exemple si on veut lire l'enregistrement 10000 on n'est pas obligé
de lire les 9999 enregistrements précédents, idem pour l'écrire.
On pourrait faire la même chose avec l'Accès Binaire en faisant
un Seek avant chaque lecture/écriture, mais pour cela il faut que le
fichier ait impérativement été constitué avec des enregistrements de
même longueur, c'est le prix à payer, ce qui oblige à mettre chaque
zone à la longueur maximum pour contenir les données sous peine d'avoir
à refaire le fichier et à recompliler le programme si on s'aperçoit
qu'une zone est trop petite parce qu'un petit malin a un nom a coucher
dehors qui dépasse les 32 caractères.
Bref l'Accès Direct a des inconvénients parce que les tailles peuvent
devenir très grandes à cause des enregistrements de longueur fixes,
mais aussi des avantages parce que les fichiers ne sont pas fait pour
être traités en mémoire mais individuellement enregistrement par
enregistrement et donc on peut traiter des très gros fichiers.
Faut savoir aussi ce qu'on fait et à quoi correspond le 1000e enregistrement, on a seulement accès avec un numéro et non pas avec une clef comme avec le Séquentiel Indexé ou avec les Bases de Données.
C'est au programmeur à le gérer, par exemple faire des fichiers
secondaires de clefs qui donnent la correspondance entre un nom et un
numéro, toute une technique...!
Autre avantage aussi c'est le découpage des zones automatiques, on a
accès directement à chaque zone individuellement sans faire de
manipulation de chaîne, et pour répondre à ta question, si on a mis un
nom sur 32, on est pas tenu a ne traiter que ceux qui on un nom de 32
caractères, il n'y en aurait pas beaucoup !
32 c'est un maximum on ne pourra pas traiter plus, le nom sera complété
par des espaces ça c'est un inconvénient le nom lu fera toujours 32.
Note technique:
les Chaînes de longueur fixe ne sont pas des vrais chaînes, il faut les
considérer comme des tableaux de char et non pas comme les String de Vb
en BSTR.
elles sont pourtant en Unicode alors qu'en entrée et sortie c'est de L'ASCII.
je soupçonne Vb de faire tout le travail par derrière et de s'occuper
du découpage des zones, ceci est totalement transparent pour le
développeur et bizarrement il est totalement impossible de trouver une
quelconque information sur la façon dont sont traitées ces chaînes en
mémoire.
par exemple si VarPtr() renvoit bien un pointeur, ce pointeur renvoit
sur une adresse nulle et si StrPtr() renvoit bien une chaîne en Unicode
ce n'est seulement qu'une copie et pas la chaîne d'origine.
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 6 juil. 2005 à 20:34
Eh bien, franchement, un grand merci pour toutes ces précieuses précisions enrichissantes! C'est désormait beaucoup plus clair pour moi
Concernant la note technique moi je dirais qu'on s'en fout un peu du moment que ça fonctionne et que le VB fait correctement ce pour quoi il a été fait, tout va pour le mieux dans le meilleurs des mondes
Enjoy
<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
Vous n’avez pas trouvé la réponse que vous recherchez ?
Gobillot
Messages postés3140Date d'inscriptionvendredi 14 mai 2004StatutMembreDernière intervention11 mars 201934 6 juil. 2005 à 21:16
on s'en fout quand on cherche pas à comprendre mais quand on a un problème on aime bien savoir où ça vient.
si tu veux manipuler des pointeurs, des adresses, passer des paramètres
à une dll, il vaut mieux savoir ce qui se passe à l'intérieur.
pareil pour ton ordi, tu peux l'utiliser comme ça, sans savoir ce qu'il
y a à l'intérieur, mais lorsque tu veux rajouter une nouvelle carte ou
overclocker ta carte mère t'es bien content de pouvoir le faire toi
même.
je suis comme ça, toujours voulu savoir les choses cachées.
c'est utile de savoir, ça permet d'optimiser les programmes, de faire des choses impossibles autrement.
voilà un exemple: comment est rempli la chaine Str ?
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
ScSami
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 6 juil. 2005 à 22:01
Oui, je suis d'accord avec toi mais bon, parfois, faut
pas aller trop loin je pense parce qu'on a vite fait de s'arracher les
cheveux tellement il est difficile de trouver de l'info sur certains
sujets!
Puis personnellement, j'ai un peu abandonné l'idée de chercher à
comprendre comment la structure sous-jascente à été pensée du moment
qu'elle est opérationnelle. Alors bien sûr, parfois, elle ne l'est pas
ce qui rend le déboggage aussi passionnant qu'intéressant! Mais dans
l'ensemble, si un jour je voudrais vraiment me mettre à essayer de
comprendre, je me mettrais à l'électronique, c'est clair!
Ceci dit, perso, j'aime pas trop faire mumuse avec la mémoire et ce
fameux CopyMemory (dont je n'ai toujours pas trouvé l'utilité dans mes
programmes!!!). Quant à VarPtr et les deux autres, m'en passer ne
m'empêche pas de dormir
Mais attention !!! ce n'est pas une invitation à se maintenir dans
l'ignorance comme moi!!! Perso, j'assume entièrement sans inciter les
autres à être aussi "têtu"
Je suis pas tellement pour aller trop loin en VB car je crois que, finalement, le C est fait pour ça (aller plus loin) !
Enjoy
<hr size="2" width="100%">
( Si une réponse vous convient, cliquez sur le bouton "Réponse accéptée". )
Hakim_Ramzi
Messages postés3Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention10 décembre 2005 30 nov. 2005 à 18:52
Put #nf, numenreg, carnet1 'C'est ici que ca bloque !!!
Il te manque la longueur de ton fichier
Open App.Path & "\users" & username & ".rep" For Random As #nf Len = Len(carnet1)
Put #nf, numenreg,len , carnet1 'C'est ici que ca bloque !!!
Close #nf