FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
base de donees  Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
base de donees  Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
base de donees  Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
base de donees  Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
base de donees  Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
base de donees  Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
base de donees  Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
base de donees  Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
base de donees  Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
base de donees  Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
base de donees  Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
base de donees  Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
base de donees  Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
base de donees  Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
base de donees  Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -20%
Drone Dji DJI Mini 4K (EU)
Voir le deal
239 €

 

 base de donees

Aller en bas 
5 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 9:04

un programme de bases de données
avec lecture et écriture des données
Code:

label variable
gosub variable


rem -----------------------début programme------------------------------
rem -----------------------open_base
rem --------le premier chiffre le nombre dindex ,puis  le fichier a creé,puis le nom de lindex suivi du nombre de caractères resevé  et ainsi de suite jusqua 200 index
rem --------vous pouvez créé plusieurs base différentes il suffira de faire un open_base avant chaque utilisation
base$="3,c:\base\base3.bin,a,10,b,10,c,20"
gosub open_base


rem ___exemple writebase_index_ligne_valeur
rem ___ ecrit la valeur valeurws, dans la ligne lignew, dans lindex indexw$
 indexw$="c"
 lignew=1
 valeurw$="bonjour"
 gosub writebase_index_ligne_valeur
 

 rem --- readbase_index_ligne_valeur
 rem ___ renvoi la valeur valeurws, de la ligne lignew, de lindex indexw$
 indexw$="c"
 lignew=1
  gosub readbase_index_ligne_valeur

  print valeurw$


  rem ------------------------------fin------------------------------
  end















open_base:
a$="" : a=0 : b$="" :r=0


for i=1 to len (base$)
if mid$(base$,i,1)="," then goto saut_1
a$=a$+mid$(base$,i,1)

next i
saut_1:
a=val(a$)
nbindex=a
a$=""
b=1
for i=1 to len(base$)

if mid$(base$,i,1)="," then b=b+1
if b=2 then a$=a$+mid$(base$,i,1)
next i



a$=mid$(a$,2,len(a$)-1)
fichier$=a$
rem ---------
b=0 :a$="":b$=""
a$=""
for i=0 to nbindex+1


for x=1 to len(base$)

 if mid$(base$,x,1)="," then b=b+1
 if b=2+r  then a$=a$+mid$(base$,x,1)  : index$(i+1)=a$
 if b=3+r  then b$=b$+mid$(base$,x,1)  : valeurchain$(i+1)=b$

 next x
 r=r+2
 b=0
a$=""
b$=""
next i
for i=1 to nbindex

index$(i)=mid$(index$(i),2,len(index$(i))-1)
valeurchain$(i)=mid$(valeurchain$(i),2,len(valeurchain$(i))-1)
next i





return


rem ------------------------------------------------------------

 writebase_index_ligne_valeur:
 debchain=0


 for i=1 to 200
 if indexw$=index$(i) then p=i
 next i

 if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
 if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)

 a=val(valeurchain$(p))-len(valeurw$)
valeurw$=valeurw$+string$(a," ")

filebin_open_write 1,fichier$
filebin_position 1,debchain-1
for i=debchain to debchain+len(valeurw$)-1
blanc%(i)=asc(mid$(valeurw$,i-debchain+1,1))

filebin_block_write 1,1,blanc%(i)
next i
filebin_close 1

 return
 rem -----------------------------------------------------------------------------------
  readbase_index_ligne_valeur:
 debchain=0


 for i=1 to 200
 if indexw$=index$(i) then p=i
 next i

 if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
 if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)

 valeurw$=""
filebin_open_read 1,fichier$
filebin_position 1,debchain-1
for i=debchain to debchain+val(valeurchain$(p))-1

filebin_block_read 1,1,blanc%(i)
valeurw$=valeurw$+chr$(blanc%(i))
next i
filebin_close 1
return
 
variable:
dim base$,a$,b$,c$,aa$,a,b,c,i,x,y,fichier$,nbindex,valindex,r,blanc%(100000),p,temp$,aa(1000)
p=1
label readbase_index_ligne_valeur
dim index$(200)
dim valeurchain$(100)
dim debchain
label saut_1
label open_base
label writebase_index_ligne_valeur
dim indexw$
dim lignew
dim valeurw$
return
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 10:26

Intéressant. Pourrais-tu donner, dans la partie "exemple", quelques exemples supplémentaires ? Je l'au fait marcher, après avoir adapté le nom du fichier de la base, mais le but réel m'échappe un peu.

Est-ce qu'un peut enregistrer, dans la base, des "enregistrements" de données dond certaines parties peuvent servir de "cl" d'accès" pour retrouver un enregistrement en recherche par clé, ou en parcourant le fichier dans l'ordre d'une clé ? Est-ce qu'on peut faire une suppression d'un enregistrement ?

Une gestion évoluée de fichiers, ça manque certainement encore, et je suis très intéressé par toute initiative dans ce sens. J'avais fait, en son temps, une démonstration de gestion de base de données, en liant Excel à Panoramic via les fonctions dédiées de Panoramic (voir mon site, rubrique Panoramic, ligne PISAM avec Excel).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 15:27

oui on peut mettre des clefs
mais il y une astuce

par exemple on crée une base a 3 index nom prénom adresse avec des valeur
avec des longueurs de chaine de 25 pour le nom 25 pour le prénom et 50 pour l'adresse
donc
base$="3,c:\base\base3.bin,nom,25,prénom,25,adresse,50"
puis
gosub open_base

pour créer base mais la base et réellement crée que si lon ecrit quelque chose dedans

donc on va écrire tout a la fin de la base dans index nom la base a une taille de 999 valeur
indexw$="nom"
lignew=999
valeurw$="bonjour"
gosub writebase_index_ligne_valeur

la la base est partiellement créer tout au moins pour la partie nom en fait elle se construit au fur et a mesure que l'on y rentre des valeurs
toutes les partie de la base vide son rempli avec le code ASCII 0
pour mettre un pointeur en début de programme dans l index nom exemple : pour inscrire a la prochaine entrée la ligne 2

en début de programme i faut écrire
indexw$="nom"
lignew=1
gosub readbase_index_ligne_valeur

if valeurw$ =sting$(chr$(0),25) then indexw$="nom": lignew=1 : valeurw$="2" :gosub writebase_index_ligne_valeur
donc au depart on a la valeur 2 dans la case 1 de lindex nom

après une nouvelle lecture de la case nom ligne1 on aura le retour de la valeur 2 ce qui pourra éventuellement indiquer qua la prochaine écriture qui faudra ecrire dans la case 2

j'ai un peu de mal a expliquer les choses de plus je ne suis pas un grand pédagogue
mais j'enverrai un exemple genre carnet d'adresse ou fichier client
pour démonter l'utilité de ce programme


Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 15:57

Tu vois, ce qui serait intéressant, ce serait de pouvoir remplir la base par un moyen quelconque (comme ta fonction write_base, ou un chargemennt d'un fichier texte en format longueur constante des champs, par exemple), puis de faire ceci:
- en fonction d'une clé, lire séquentiellement l'enregistrement suivant dans l'odre croissant de la clé
- en fonction d'une clé, lire l'enregistrement dont la valeur de clé est passée en paramètre
- en fonction d'une clé, lire le premier engregistrement
- en fonction d'une clé, lire l'engregistrement "suivant" par rapport au dernier traité
- en fonction d'une clé, lire le dernier engregistrement
etc

Tu vois, des fonctions utilisant de CONTENU de la clé comme moyen d'accès à un enregistrement, et non son numéro. Une base de données (simple) pourrait être construite de la manière suivante (je passe sur les infos de structure à mémoriser comme nombre d'indexes, position et longueur de chaque indexe, etc):
Indexe 1--->(pointeur vers première clé),(pointeur vers clé actuelle),(pointeur vers dernière cle)
Indexe 2--->(pointeur vers première clé),(pointeur vers clé actuelle),(pointeur vers dernière cle)
...
clé dans un indexe--->(valeur de la clé),(pointeur vers l'enregistrement data correspondant)

En s'assurant que les valeurs des clés dans un indexe sont toujours triées dans l'ordre croissant, on peut réaliser des méthodes d'accès du type de celles décrites ci-dessus, par exemple.

J'enfonce peut-être des portes ouvertes, mais ce sont ces fonctions qui manquent à Panoramic pour gérer des données de type gestion. Exemple pour un carnet d'adresses: "trouver le contact dont le numéro de téléphone (défini comme un des indexes) est "0123456789", trouver les contacts résidant dans le département 38 (avec code postal comme un des indexes), etc. Tout ceci bien sûr en accédant par les indexes, et non en parcourant les données des enregistrements de façon linéaire. De cette façon, sans retraiter le fichier, on peut lister, par exemple, les contacts par répartition géographique (accès séquentiel par la clé "code postal" en ordre croissant), par fonction (ayant un champ "fonction" dans le fichier et en définisant ce champ comme indexe), etc.

Ton programme me paraît prometteur, mais pour le moment, j'ai du mal à cerner jusqu'où il va, quelles sont ses fonctions et ses limites.

Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 16:33

pour le moment les limites sont 200 index et environ 1000 valeur par index
lecture d'une ligne
écriture d'une ligne
le nombre de base que l'on peut creer est illimité il suffit de l'appeler a chaque fois que l'on veut l'utiliser
avec create_base qui pourrai s'appeler opencreate _base
car il ouvre la base quand elle existe et la cré quand elle n'existe pas.
pour l'instant j'ai mis le minimum vital pour pouvoir l'utiliser
dans la-venir j'avais penser a mettre d'autre fonction genre efface ligne
et une fonction genre vrecherche de excel
mais j'avoue que les fonctions que tu ma énumérer je ny avais même pas penser
je vais y réfléchir il ya du boulot sur la planche
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 16:49

OK, je vois mieux le cadre dans lequel ton programme fonctionne. Comme j'ai dit, c'est intéressant. Je voulais simplement te dire que ce qui manque, c'est la fonction de retrouver une information par une partie de l'information quelque part dans son milieu au lieu de la trouver par son numéro, son rang ou son numéro de case. Car dans ce cas, tu as une gestion de tableau Basic adapté à un problème spécifique, et nous le faisons tous, avec plus ou moins de gymnastique, pour retrouver nos informations.

Je te suggère de télécharger le module PISAM avec Excel (si tu as Excel, bien sûr). ce module contient un programme de démo et une doc complète, et tu pourrais voir ce que l'on peut faire avec un fichier ayant plusieurs clés utilisées comme chemin d'accès. Ca pourrait te donner des idées...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 17:25

merci klauss de toutes tes bonnes informations
demain j'enverrai un exemple concret d'utilisation
par contre je ne suis pas trop pour l'utilisation d'un programme externe
sauf si on ne peut pas faire autrement je l'ai deja fait en en codant un tableau
dans un fichier html pour pouvoir imprimer a l'aide de mon navigateur
j'aurai bien voulu utiliser ton winprint mais il ne marche pas evec win7
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 18:49

C'est vrai - utiliser un programme externe n'est pas la solution idéale. Je ne le fais que si je ne trouve pas de moyens appropriés dans Panoramic. Mais dans certains cas, ça permet de repousser les limites (en attendant que Jack éventuellement ajoute la fonction...), ou alors de réaliser très facilement ce qu'on ferait autrement avec beaucoup d'effort. A chacun de faire son choix.

Je ne savais pas que WinTextPrint ne marche pas sous Windows 7. Est-ce que d'autres Panoramiciens ont le même problème ? Quel est le problème ou le message d'erreur exactement ? Ou est-ce que certains ont trouvé un moyen de contourner le problème ? Je serais très intéressé par un "feed-back" si vous me permettez cet anglicisme.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 20:42

il demande vb40032.dll

quand je veux charger vb4 il dit que la version est incompatible avec Windows 32 64 bit
a moi qui ai une version vb4 32-64 bit
Revenir en haut Aller en bas
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyJeu 11 Nov 2010 - 21:54

Citation :
ou un chargemennt d'un fichier texte en format longueur constante des champs, par exemple),

Si vous faites ça, essayez de "respecter/utiliser" le format CSV qui est le classique format d'export/import de base de données sous forme texte :

Nom;Prenom;Adresse
Tartan;gilles;15 rue de la pomme
Andrieu;pierre;20 chemin michelet

C'est comme ça par exemple qu'excel sauvegarde en CSV.

Comme ça les gens ne seront pas perdus et on se maintiendra dans un standard, car je suis un peu contre le fait que chacun fait son propre truc aprés ce sont les utilisateurs qui en pâtissent, j'aime bien les standards parfois, pour certaines choses.

Comme ça ce que tu exporte pourra être utilisé ailleurs dans une autre base.
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyVen 12 Nov 2010 - 8:26

D'accord avec dragonno :

En effet les ";" comme séparateur de champs sont une bonne option pour l'import dans Excel...
ou alors tu peux avoir ton propre format et proposer à côté l'export en CSV ou XML.
Revenir en haut Aller en bas
http://nardo26.lescigales.org
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyVen 12 Nov 2010 - 20:35

un carnet d'adresse avec base de donnee
il y avais des bug dans le prog j'ai corriger
Code:

label variable
gosub variable
label ajouter
label modifier
label effacer
label rescombo
dim pointeur
dim bo,point

rem -----------------------debut programe------------------------------
rem -----------------------open_base
rem --------le premier chiffre le nombre dindex ,2 le fichier a creé,puis le nom de lindex suivi du nombre de carateres reseré  et ainsi de suite jusqua 200 index
rem --------vous pouvez cree plusieur base differente il suffira de faire un open_base avant chaque utilisation
base$="3,c:\base\base4.bin,nom,25,prenom,25,adresse,50"
gosub open_base


rem ___exemple writebase_index_ligne_valeur
rem ___ ecrit la valeur valeurws, dans la ligne lignew, dans lindex indexw$
 indexw$="nom"
 lignew=999
 valeurw$="findebase"
 gosub writebase_index_ligne_valeur


 rem --- readbase_index_ligne_valeur
 rem ___ renvoi la valeur valeurws, de la ligne lignew, de lindex indexw$
 indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur

if valeurw$=string$(25,chr$(0)) then indexw$="nom":lignew=1 :valeurw$="2" : gosub writebase_index_ligne_valeur
  rem -------------------------prog carnet adresse
  COMBO 3
left 3,100
top 3,110
width 3,222

edit 4
left 4,100
top 4,140
width 4,222

edit 5
left 5,100
top 5,170
width 5,300
alpha 8
left 8,6
top 8,110
width 8,87
caption 8,"NOM"

alpha 9
left 9,10
top 9,140
caption 9,"PRENOM"

alpha 10
left 10,10
top 10,170
caption 10,"ADRESSE"
button 31
caption 31,"AJOUTER"
left 31,450
top 31,100
BUTTON 32
CAPTION 32,"MODIFIER"
left 32,450
top 32,130
button 33
caption 33,"SUPRIMER"
 left 33,450
top 33,160
clear 3
  for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  ITEM_ADD 3,valeurw$
    next bo
on_click 31,ajouter
on_click 32,modifier
on_click 33,effacer
on_click 3,rescombo
end
rem ------------------------------------debut ajouter------------
ajouter:
if text$(3)="" then return
indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  indexw$="nom"
 lignew=pointeur
 valeurw$=text$(3)
 gosub writebase_index_ligne_valeur
 
 indexw$="prenom"
 lignew=pointeur
 valeurw$=text$(4)
 gosub writebase_index_ligne_valeur
 
 indexw$="adresse"
 lignew=pointeur
 valeurw$=text$(5)
 gosub writebase_index_ligne_valeur
 pointeur=pointeur+1
 valeurw$=str$(pointeur)
  lignew=1
  indexw$="nom"
  gosub writebase_index_ligne_valeur
  clear 3
  for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  ITEM_ADD 3,valeurw$
    next bo
    text 4,""
    text 5,""
rem -----------------------------------fin de ajouter
return
 rem ----------------------------------debut modifier
modifier:
if text$(3)="" then return
point=0
indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
 for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
 indexw$="nom"
 lignew=1

  indexw$="prenom"
 lignew=point
 valeurw$=text$(4)
 gosub writebase_index_ligne_valeur

 indexw$="adresse"
 lignew=point
 valeurw$=text$(5)
 gosub writebase_index_ligne_valeur
 clear 3
  for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  ITEM_ADD 3,valeurw$
    next bo
  text 4,""
    text 5,""
return
fin ------------------fin modifier
effacer:
rem --------------------------------------------debut effacer---------------------------------
 if text$(3)="" then return
point=0
indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
 for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
  for bo=point to pointeur
  indexw$="nom"
 lignew=bo+1
  gosub readbase_index_ligne_valeur
  indexw$="nom"
 lignew=bo
  gosub writebase_index_ligne_valeur
 
  indexw$="prenom"
 lignew=bo+1
  gosub readbase_index_ligne_valeur
  indexw$="prenom"
 lignew=bo
  gosub writebase_index_ligne_valeur
 
    indexw$="adresse"
 lignew=bo+1
  gosub readbase_index_ligne_valeur
  indexw$="adresse"
 lignew=bo
  gosub writebase_index_ligne_valeur
  next bo
    indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  pointeur=pointeur-1
  indexw$="nom"
  lignew=1
  valeurw$=str$(pointeur)
  gosub writebase_index_ligne_valeur
  clear 3
  for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  ITEM_ADD 3,valeurw$
    next bo
  text 4,""
    text 5,""
 return
 rem  ----------------------------------------fin effacer----------
 rem ---------------------------------rescombo----debut
rescombo:
point=0
indexw$="nom"
 lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  for bo=2 to pointeur
  indexw$="nom"
 lignew=bo
  gosub readbase_index_ligne_valeur
  if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
  indexw$="prenom"
 lignew=point
  gosub readbase_index_ligne_valeur
  text 4,valeurw$
  indexw$="adresse"
 lignew=point
  gosub readbase_index_ligne_valeur
  text 5,valeurw$
return
    end
  rem ------------------------------fin------------------------------














open_base:
a$="" : a=0 : b$="" :r=0


for i=1 to len (base$)
if mid$(base$,i,1)="," then goto saut_1
a$=a$+mid$(base$,i,1)

next i
saut_1:
a=val(a$)
nbindex=a
a$=""
b=1
for i=1 to len(base$)

if mid$(base$,i,1)="," then b=b+1
if b=2 then a$=a$+mid$(base$,i,1)
next i



a$=mid$(a$,2,len(a$)-1)
fichier$=a$
rem ---------
b=0 :a$="":b$=""
a$=""
for i=0 to nbindex+1


for x=1 to len(base$)

 if mid$(base$,x,1)="," then b=b+1
 if b=2+r  then a$=a$+mid$(base$,x,1)  : index$(i+1)=a$
 if b=3+r  then b$=b$+mid$(base$,x,1)  : valeurchain$(i+1)=b$

 next x
 r=r+2
 b=0
a$=""
b$=""
next i
for i=1 to nbindex

index$(i)=mid$(index$(i),2,len(index$(i))-1)
valeurchain$(i)=mid$(valeurchain$(i),2,len(valeurchain$(i))-1)
next i





return


rem ------------------------------------------------------------

 writebase_index_ligne_valeur:
 debchain=0


 for i=1 to 200
 if indexw$=index$(i) then p=i
 next i

 if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
 if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)
 a=val(valeurchain$(p))-len(valeurw$)
 if a=0 then goto petitsaut

valeurw$=valeurw$+string$(a," ")
 petitsaut:


filebin_open_write 1,fichier$
filebin_position 1,debchain-1
for i=debchain to debchain+len(valeurw$)-1
blanc%(i)=asc(mid$(valeurw$,i-debchain+1,1))

filebin_block_write 1,1,blanc%(i)
next i
filebin_close 1

 return
 rem -----------------------------------------------------------------------------------
  readbase_index_ligne_valeur:
 debchain=0


 for i=1 to 200
 if indexw$=index$(i) then p=i
 next i

 if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
 if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)

 valeurw$=""
filebin_open_read 1,fichier$
filebin_position 1,debchain-1
for i=debchain to debchain+val(valeurchain$(p))-1

filebin_block_read 1,1,blanc%(i)
valeurw$=valeurw$+chr$(blanc%(i))
next i
filebin_close 1
return
 
variable:
dim base$,a$,b$,c$,aa$,a,b,c,i,x,y,fichier$,nbindex,valindex,r,blanc%(100000),p,temp$,aa(1000)
p=1
label readbase_index_ligne_valeur
dim index$(200)
dim valeurchain$(100)
dim debchain
label saut_1
label open_base
label writebase_index_ligne_valeur
dim indexw$
dim lignew
dim valeurw$
label petitsaut
return
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptySam 13 Nov 2010 - 1:45

Joli. Je l'ai chargé pour voir un peu mieux son potentiel.

Je constate que tu stockes les contacts dans l'ordre de création (logique), et pour les retrouver, dans le combo, ils s'affichent effectivement dans l'ordre de création. Je vois que les indexes servent à retrouver les enregistrements. Dans ton programme, si j'ai bien compris, tu as utilisé l'indexe "nom". Normal. Tel que c'est conçu, cela permet de retrouver les cases utilisées en gérant les suppression, etc. Très bien.

Ce qui me manque un peu, avec cette conception de l'indexe, c'est qu'il n'y a pas d'ordre. Les clés ne sont pas triées. Imagine si ton indexe "nom" était trié alphabétiquement, de même ton indexe "prénom" etc. Et tu aurais alors la combo "nom" qui afficherait les noms en ordre croissant en non plus en ordre chronologique de création, le champ "prénom" pourrait devenir un combo affichant les prénoms en ordre alphabétique, etc. Et suivant l'information cliquée, on chargerait le contact dont le nom a été cliqué, ou celui dont le prénom a été cliqué.

D'accord, chercher un contact par le prénom, cela ne semble pas très intéressant. Mais imagine ajouter à ton fichier un champ "numéro de téléphone" et le déclarer comme clé, et tu aurais immédiatement la possibilité de retrouver un contact par son numéro de téléphone...

Enfin, je pense que tu vois ce que je veux dire. Je suivrai l'évolution de ce programme avec grand intérêt.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptySam 13 Nov 2010 - 7:33

bonjour philou029 !

J'ai fais un test en rentrant 2 noms : je me retrouve avec un fichier de 50 Ko.
Après coup j'ai regardé ce que tu faisais au niveau du fichier:
Pour alléger celui-ci, tu pourrais rajouter, par exemple, en tout début de ton fichier, le nombre total d'éléments enregistrés.
Comme cela, à l'ouverture de la base, tu viendrais lire ce nombre et cela t'éviterai de faire des boucles de 1 à 200 (tu y gagnerais en vitesse et tu ne serais pas obliger de réserver de la place pour 200 éléments).

Qu'en penses-tu ?

A+


Pour les Panoramiciens qui voudraient tester ton prog,
je me suis permis d'intégrer ton programme de gestion de données avec ton exemple carnet d'adresse :

Code:
label variable
gosub variable
label ajouter
label modifier
label effacer
label rescombo
dim pointeur
dim bo,point

rem *******************************************************************
rem * DEBUT DU PROGRAMME
rem *******************************************************************
rem --------le premier chiffre le nombre dindex ,2 le fichier a creé,puis le nom de lindex suivi du nombre de carateres reseré  et ainsi de suite jusqua 200 index
rem --------vous pouvez cree plusieur base differente il suffira de faire un open_base avant chaque utilisation

base$="3,c:\base\base4.bin,nom,25,prenom,25,adresse,50"

gosub open_base


rem ___exemple writebase_index_ligne_valeur
rem ___ ecrit la valeur valeurws, dans la ligne lignew, dans lindex indexw$
indexw$="nom"
lignew=999
valeurw$="findebase"
gosub writebase_index_ligne_valeur


rem --- readbase_index_ligne_valeur
rem ___ renvoi la valeur valeurws, de la ligne lignew, de lindex indexw$
indexw$="nom"
lignew=1
gosub readbase_index_ligne_valeur

if valeurw$=string$(25,chr$(0)) then indexw$="nom":lignew=1 :valeurw$="2" : gosub writebase_index_ligne_valeur

rem -------------------------prog carnet adresse
COMBO 3
left 3,100
top 3,110
width 3,222

edit 4
left 4,100
top 4,140
width 4,222

edit 5
left 5,100
top 5,170
width 5,300

alpha 8
left 8,6
top 8,110
width 8,87
caption 8,"NOM"

alpha 9
left 9,10
top 9,140
caption 9,"PRENOM"

alpha 10
left 10,10
top 10,170
caption 10,"ADRESSE"

button 31
caption 31,"AJOUTER"
left 31,450
top 31,100

BUTTON 32
CAPTION 32,"MODIFIER"
left 32,450
top 32,130

button 33
caption 33,"SUPRIMER"
 left 33,450
top 33,160

clear 3
for bo=2 to pointeur
  indexw$="nom"
  lignew=bo
  gosub readbase_index_ligne_valeur
  ITEM_ADD 3,valeurw$
next bo
on_click 31,ajouter
on_click 32,modifier
on_click 33,effacer
on_click 3,rescombo

end

rem *******************************************************************
rem PROCEDURES DU CARNET D'ADRESSE
rem *******************************************************************
rem ------------------------------------debut ajouter------------
ajouter:
  if text$(3)="" then return
  indexw$="nom"
  lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  indexw$="nom"
  lignew=pointeur
  valeurw$=text$(3)
  gosub writebase_index_ligne_valeur

  indexw$="prenom"
  lignew=pointeur
  valeurw$=text$(4)
  gosub writebase_index_ligne_valeur

  indexw$="adresse"
  lignew=pointeur
  valeurw$=text$(5)
  gosub writebase_index_ligne_valeur

  pointeur=pointeur+1
  valeurw$=str$(pointeur)
  lignew=1
  indexw$="nom"
  gosub writebase_index_ligne_valeur
  clear 3
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    ITEM_ADD 3,valeurw$
  next bo
  text 4,""
  text 5,""
return
  rem -----------------------------------fin de ajouter

rem ----------------------------------debut modifier
modifier:
  if text$(3)="" then return
  point=0
  indexw$="nom"
  lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
  indexw$="nom"
  lignew=1

  indexw$="prenom"
  lignew=point
  valeurw$=text$(4)
  gosub writebase_index_ligne_valeur

  indexw$="adresse"
  lignew=point
  valeurw$=text$(5)
  gosub writebase_index_ligne_valeur
  clear 3
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    ITEM_ADD 3,valeurw$
  next bo
  text 4,""
  text 5,""
return
fin ------------------fin modifier

rem --------------------------------------------debut effacer---------------------------------
effacer:
  if text$(3)="" then return
  point=0
  indexw$="nom"
  lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
  for bo=point to pointeur
    indexw$="nom"
    lignew=bo+1
    gosub readbase_index_ligne_valeur
    indexw$="nom"
    lignew=bo
    gosub writebase_index_ligne_valeur

    indexw$="prenom"
    lignew=bo+1
    gosub readbase_index_ligne_valeur
    indexw$="prenom"
    lignew=bo
    gosub writebase_index_ligne_valeur

    indexw$="adresse"
    lignew=bo+1
    gosub readbase_index_ligne_valeur
    indexw$="adresse"
    lignew=bo
    gosub writebase_index_ligne_valeur
  next bo
  indexw$="nom"
  lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  pointeur=pointeur-1
  indexw$="nom"
  lignew=1
  valeurw$=str$(pointeur)
  gosub writebase_index_ligne_valeur
  clear 3
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    ITEM_ADD 3,valeurw$
  next bo
  text 4,""
  text 5,""
 return
 rem  ----------------------------------------fin effacer----------

rem ---------------------------------rescombo----debut
rescombo:
  point=0
  indexw$="nom"
  lignew=1
  gosub readbase_index_ligne_valeur
  pointeur=val(valeurw$)
  for bo=2 to pointeur
    indexw$="nom"
    lignew=bo
    gosub readbase_index_ligne_valeur
    if text$(3)=valeurw$ then point=bo
  next bo
  if point=0 then return
  indexw$="prenom"
  lignew=point
  gosub readbase_index_ligne_valeur
  text 4,valeurw$
  indexw$="adresse"
  lignew=point
  gosub readbase_index_ligne_valeur
  text 5,valeurw$
return

rem *******************************************************************
rem * DEBUT DES PROCEDURES DE LA BASE DE DONNEES
rem *******************************************************************

open_base:
  a$="" : a=0 : b$="" :r=0
  for i=1 to len (base$)
    if mid$(base$,i,1)="," then goto saut_1
    a$=a$+mid$(base$,i,1)
  next i
saut_1:
  a=val(a$)
  nbindex=a
  a$=""
  b=1
  for i=1 to len(base$)
    if mid$(base$,i,1)="," then b=b+1
    if b=2 then a$=a$+mid$(base$,i,1)
  next i

  a$=mid$(a$,2,len(a$)-1)
  fichier$=a$
  rem ---------
  b=0 :a$="":b$=""
  a$=""

  for i=0 to nbindex+1
    for x=1 to len(base$)
      if mid$(base$,x,1)="," then b=b+1
      if b=2+r  then a$=a$+mid$(base$,x,1)  : index$(i+1)=a$
      if b=3+r  then b$=b$+mid$(base$,x,1)  : valeurchain$(i+1)=b$
    next x
    r=r+2
    b=0
    a$=""
    b$=""
  next i

  for i=1 to nbindex
    index$(i)=mid$(index$(i),2,len(index$(i))-1)
    valeurchain$(i)=mid$(valeurchain$(i),2,len(valeurchain$(i))-1)
  next i

return


rem ------------------------------------------------------------

writebase_index_ligne_valeur:
  debchain=0
  for i=1 to 200
    if indexw$=index$(i) then p=i
  next i

  if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
  if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)

  a=val(valeurchain$(p))-len(valeurw$)
  valeurw$=valeurw$+string$(a," ")

  filebin_open_write 1,fichier$
  filebin_position 1,debchain-1

  for i=debchain to debchain+len(valeurw$)-1
    blanc%(i)=asc(mid$(valeurw$,i-debchain+1,1))
    filebin_block_write 1,1,blanc%(i)
  next i

  filebin_close 1
return

rem -----------------------------------------------------------------------------------

readbase_index_ligne_valeur:
  debchain=0
  for i=1 to 200
    if indexw$=index$(i) then p=i
  next i

  if p=1 then debchain=1000+(val(valeurchain$(p))*lignew)+1
  if p>1 then for i=1 to p-1:debchain=debchain+(val(valeurchain$(i))*1000):next i:debchain=debchain+1000+1+(val(valeurchain$(p))*lignew)
  valeurw$=""

  filebin_open_read 1,fichier$
  filebin_position 1,debchain-1

  for i=debchain to debchain+val(valeurchain$(p))-1
    filebin_block_read 1,1,blanc%(i)
    valeurw$=valeurw$+chr$(blanc%(i))
  next i
  filebin_close 1
return

variable:
  dim base$,a$,b$,c$,aa$,a,b,c,i,x,y,fichier$,nbindex,valindex,r,blanc%(100000),p,temp$,aa(1000)
  p=1
  label readbase_index_ligne_valeur
  dim index$(200)
  dim valeurchain$(100)
  dim debchain
  label saut_1
  label open_base
  label writebase_index_ligne_valeur
  dim indexw$
  dim lignew
  dim valeurw$
return
Revenir en haut Aller en bas
http://nardo26.lescigales.org
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptySam 13 Nov 2010 - 9:29

la boucle servant a savoir le nombre d'index
n'est exécuter qu'une seul fois avec gosub creatbase
je ne vois pas trop l'intérré de modifié ca
d'autre par je me suis aperçu qu'il y avais des erreur
notamment dans la gestion des longueurs de chaine
malheureusement en modifiant le prog tu également copier ses erreurs
par contre une option intégrant le nombre de valeur par index serait plus judicieux
pour le reste j'enverrai une autre version avec les erreurs corrigé
le test ca prend un peu de temps il faut que je vérifie que tout colle bien
Revenir en haut Aller en bas
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptySam 13 Nov 2010 - 9:56

erreur de ma par c'est toi qui a raison
a boucle servant a savoir le nombre d'index
est exécuter a chaque read ou write
je vais remédier a sa
merci a toi

Revenir en haut Aller en bas
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: autanpour moi   base de donees  EmptySam 13 Nov 2010 - 10:16


c'etait prevu il faut remplacer
fori=1 to 200 par
for i=1 to nbindex
Revenir en haut Aller en bas
philou029




Nombre de messages : 49
Age : 57
Localisation : BREST
Date d'inscription : 17/10/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptySam 13 Nov 2010 - 18:08

les nouvelles fonctionnalité de Pbase
seront
gosub writepop_index_valeur: écrira valeurw$ dans l'index dans a la position du pointeur et incrémentera le pointeur
gosubl delval_index_ligne : effacera la valeur de lindex de la ligne et décrémentera le pointeur
gosub search_valeur_index_nbs_vt(x) cherchera la chaine valeurw$ dans index et revoie le nombre de valeur trouvé et indiquera leur positions dans le tableau vt(x)
gosub position_p_ligne_index donnera la ligne ou sera ecrite la prochaine valeur dans index

je pense ne pas en avoir pour trop longtemps car ses sous-programmes feront appelle a gosub writebase_index_ligne_valeur et gosub readbase_index_ligne_valeur
Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyLun 15 Nov 2010 - 18:55

Si tu as un moment, jette un coup d'oeil sur mon pseudo-objet FAM (File Access Method) disponible sur mon site:
http://klaus.panoramic.voila.net/Bienvenue.1.html
Le fichier ZIP contient la doc complète et un programme de démo (fichier contact, comme par hasard...). Il s'agit d'une gestion de fichier (base de données ?) avec multi-clé, chaque clé pouvant être composée de multiples segments non contigus dans l'enregistrement, avec lecture par clé, séquentiellement en avant et en arrière, changement de clé active etc. Cela pourra peut-être te donner des idées...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
dragonno




Nombre de messages : 341
Localisation : Près de Toulouse
Date d'inscription : 22/01/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 0:04

Klaus, si j'ai 3 champs "texte" servant à inscrire par exemple un nom, un age, et une adresse :
Quel est l'algo qu'il faut utiliser pour dire au programme quelque soit le langage utilisé, que l'on veut une recherche soit avec l'un des champs, soit avec un groupe de ces champs (un, deux, ou trois champs).

Revenir en haut Aller en bas
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 0:59

Imagine un fichier de contacts avec 5 champs:
nom, prénom, code postal, adresse, téléphone

Ce fichier à 3 clés:
nom, code postal, téléphone

Il contient les enregistrements suivants:
Dupont Jaques 88340 Les Bruyères 0344556677
Pontet Albert 27690 La Fonderie 0299887766
Mongin Martin 45050 Chassol 0288994512
Fichet Martine 45140 Pointilleau 02658743412


Maintenant, c'est à l'utilisateur de choisir sa clé d'accès, visuellement par un bouton sur l'écran, ou le programmeur qui préétablit le choix, mais dans tous les cas, c'est une sous-programme qui séléction la clé "active". A partir du choix de la clé, toutes les fonctions se déroulent selon cette clé, jusqu'au changement de clé.

On peu ainsi choisir "nom", lire le "premier", puis en booucle les "suivants" jusqu'à la fin du fichier, et on obtient:
Dupont
Fichet
Mongin
Pontet

On peut aussi choisir "code postal" et avec le même programme, on obtient:
Pontet
Mongin
Fichet
Dupont

On peut aussi choisir "téléphone", et lire l'enregistrement "dont la clé est 0288994512", et on obtient:
Mongin
et ceci SANS avoir à parcourir tous les enregistrements et s'arrêter lorsqu'on rencontre celui qui est recherché.

Ca sert à ça, les indexes.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 7:24

Des méthodes, il en existe des tonnes ! Wink

Par exemple avec des fichiers d'index :
tu peux très bien faire comme cela:
1- Avoir un fichier de données "base.bdt" dans lequel on retrouve toutes les infos saisies dans l'ordre chronologique.
2- Avoir un 2eme fichier que l'on vas appeler "index_nom.dat" qui contient une liste triée composée par [nom,offset] de tous les enregistrements de base.bdt
3- Un 3eme classé par "prenom" [prenom,offset],
4 - Etc..

L'avantage :
- La vitesse : en dehors de la fonction pour l'affichage(un filebin_position offset pour accéder directement à l'enregistrement que tu veux), tout se passe en mémoire sans accès disque
- Tu ne charges en mémoire que le fichier d'index que tu as choisis et non pas la totalité du fichier de données.
- Cela va beaucoup plus vite pour effectuer un tri. (tu ne touches que le fichier d'index et non pas le principal)
- Idem pour la recherche
Inconvénient:
- à chaque ajout/suppression d'enregistrement, il faut faire une mise à jour de tout tes fichiers d'index...
- Avoir des champs de dimensions fixes
- En cherchant un peu il y en a d'autres... Wink
Pour utiliser cette méthode, il faut passer par un fichier binaire pour la base principale, notamment pour accéder à la fonction FILEBIN_POSITION (Seek dans d'autres langages). Les fichiers d'index quand à eux peuvent être en format txt (que tu peux charger dans une dlist)


Sinon il y a aussi une autre méthode : les arbres binaires (b-tree en anglais) qui sont assez performants quand on commence à avoir beaucoup de données. mais là je ne me lancerais pas dans l'explication sauf si ça intéresse quelqu'un...
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Klaus

Klaus


Nombre de messages : 12331
Age : 75
Localisation : Ile de France
Date d'inscription : 29/12/2009

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 10:33

Une application concrète:
Imagine un logiciel de facturation pour une PME.

Dans une version simpliste, il y aurait 4 fichiers:
- produits, clients, entêtes de facture, lignes de facture

Les champs des fichiers:
produits: code produit, libellé, taux TVA, prix HT
client: code client, nom, code postal, adresse, téléphone, en-cours facturé, en-cours réglé
entête de facture: numéro de facture, code client, date facture, total HT, total TV1, total TTC
ligne de facture: numéro de facture, numéro de ligne, code produit, quantité, taux TVA, prix unitaire

Les clés des fichiers:
produits: code produit, libellé
client: code client, nom, code postal
entête de facture: numéro de facture, code client, date facture, numéro de facture suivi de code client, code client suivi de date facture
ligne de facture: numéro de facture suivi de numéro de ligne, code produit

Les affaires marchent bien pour cette société:
elle a environ une centaine de clients et 5.000 factures
avec une moyenne de 10 lignes par facture, soit 50.000 lignes de facture.
On voit immédiatement l'intérêt d'accéder directement à un enregistrement SANS lire tout le fichier séquentiellement !

Une tâche concrète: rééditer la facture du 18/7/2010 du client Margoulin SA !

On procéderait de la manière suivante:
- lire enregistrement client clé "nom"="Margoulin SA", erreur si inexistant
on voit que le code client est 0082
- lire entête facture clé "code client suivi de date facture"="201007180082", erreur si inexistant
on voit que le numéro de facture est 201007003715
- éditer entête de facture avec les infos de "entête" et "client"
- lire ligne de facture clé "numéro de facture suivi de numéro de ligne"="20100700371500"
( ici, on met "00" comme numéro de ligne, et on tombe automatiquement sur la première ligne réelle ! )
- tantque numéro de facture de l'enregistrement ligne de facture = "201007003715" et pas fin de fichier
** lire produit cle "code produit"=champ "code produit" de l'enregistrement "ligne de facture"
** éditer ligne de facture
** lire ligne de facture suivante selon clé "numéro de facture suivi de numéro de ligne"
- éditer pied de facture avec les infos des enregistrements entête de facture et client
- fin de travail

Une autre tâche intéressante: envoyer un mailing à tous les clients de Loire Atlantique.
On procéderait ainsi:
- rédiger une lettre type dont le contenu est à personnaliser
- lire client avec clé "code postal"=44000
- tantque code postal<45000 et pas fin de fichier
** créer une version personnalisée la lettre
** éditer la lettre personnalisée
** lire client suivant selon clé "code postal"
- fin de travail

En réalité, les choses sont infiniment plus complexes, et les volumes souvent très importants.
Tout l'intérêt d'une bonne gestion de l'information est là: donner de la souplesse à l'accès aux informations tout en préservant la vitesse.
Une base de données actuelle engloberait l'ensemble des fichiers cités ci-dessus dans un seul gros "paquet", chaque fichier étant représenté par une "table".
Une table d'une base de données correspond à l'image sur disque d'un objet grille de Panoramic, avec une ligne par entité (un produit, un client, ,...).
Chaque colonne représente un champ (nom client, date facture, ...).
Une cellule de la grille représente une information individuelle (prix unitaire du produit "Joint de culasse 3XXX", ...).
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Nardo26

Nardo26


Nombre de messages : 2294
Age : 56
Localisation : Valence
Date d'inscription : 02/07/2010

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 17:21

Bon, manifestement ça n'interesse personne les b-tree... Wink
je remballe mon programme dans le carton... Smile
Revenir en haut Aller en bas
http://nardo26.lescigales.org
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

base de donees  Empty
MessageSujet: Re: base de donees    base de donees  EmptyMar 16 Nov 2010 - 17:36

Dis-moi, ça n'a rien à voir avec les two b-tree ?

Blague à part, pour gérer des bases de données domestiques qui ne contiennent quand même pas des dizaines ou des centaines de milliers de données, je ne vois pas trop l'intérêt de tant se compliquer la vie... il existe des méthodes plus simplistes et suffisamment efficaces pour un usage courant, enfin il me semble Smile
Revenir en haut Aller en bas
Contenu sponsorisé





base de donees  Empty
MessageSujet: Re: base de donees    base de donees  Empty

Revenir en haut Aller en bas
 
base de donees
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Accès à la base de registres
» Base départementale
» Basic de base
» Base de données relationnelle
» base de donnees access

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: