FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» TourD Version 2
par Minibug Aujourd'hui à 1:50

» La métamatière et le peuple
par JL35 Hier à 21:18

» Capture d'une zone de l'écran total
par JL35 Hier à 18:41

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Hier à 11:49

» qui peut résoudre mon prb
par pascal10000 Jeu 16 Nov 2017 - 17:30

» évènements et objets système : listage automatique
par Jean Claude Jeu 16 Nov 2017 - 11:15

» Panoramic et la reconnaissance vocale.
par papydall Jeu 16 Nov 2017 - 3:45

» Bizzarerie dans Edge
par Marc 37 Mer 15 Nov 2017 - 17:45

» KGF_dll - nouvelles versions
par Klaus Mer 15 Nov 2017 - 2:08

» Analyser un code Panoramic
par JL35 Lun 13 Nov 2017 - 18:38

» Un bonjour en passant...
par Minibug Dim 12 Nov 2017 - 19:57

» mise a jour calculatrice
par joeeee2017 Dim 12 Nov 2017 - 4:20

» comment accèder à l'heure et à la date d'un fichier
par Klaus Sam 11 Nov 2017 - 0:53

» Compilateur FBPano
par Jicehel Mer 8 Nov 2017 - 15:22

» Mon adresse e-mail
par treehouse Mer 8 Nov 2017 - 14:36

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2017
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
27282930   
CalendrierCalendrier

Partagez | 
 

 ISAM toujours ISAM

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1, 2
AuteurMessage
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 6 Oct 2015 - 0:02

@ Klaus,

J' ai un doute.

La fonction "ReplaceIsamKey" est elle faite pour remplacer une cle
ou pouvoir changer le contenu d' un champ d' enregistrement ?
scratch

ex:
J' ai 1 enregistrement de 5 champs et voilà que je me suis planté
pas le bon auteur pour cet article.

si je veux modifier le champ "auteur" de mon enregistrement, comment dois je m' y prendre
pour le faire de la bonne manière ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: ISAM toujours ISAM   Mar 6 Oct 2015 - 1:17

Oups... je me rends compte que la doc de ReplaceIsamKey a été créée par copier/coller de UpdateIsamRecord, et je n'ai pas changé le descriptif... Je vais corriger cela? En attendant, voici la procédure à suivre:
1. pour chaque champ modifié, utiliser FillIsamField pour placer la nouvelle valeur dans l'enregistrement
2. utiliser UpdateIsamRecord pour mettre à jour la partie "données" de la base, pour cet enregistrement
3. pour chaque clé modifiée, utiliser ReplaceIsamKey pour actualiser la clé dans l'index

Si un champ modifié fait partie de 2 ou plusieurs clés, il faut faire le point (3) pour chaque clé concernée.

Est-ce c'est suffisamment clair ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mar 6 Oct 2015 - 1:23

heu...je te rappelle dans 2, 3 messages d' erreur.... Laughing

Je vais essayer, j' ai eu une coupure de réseau pendant 2 heures
alors que j' étais sur le FTP, du coup je suis revenu sur cette fonction qui était un "+" au départ
mais qui pourrait s' avérer très utile.

Comme je ne me plante jamais...
lol!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 9 Oct 2015 - 22:03

J' ai un petit souci qui est le suivant :

je définis un base dont le premier champ est l' "ID" de la fiche/enregistrement.
je crée 3 enregistrements
je supprime un des 3 enregistrement, le deuxième.

le résultat de "GetIsamRecordCount" me renvoie 2 ce qui est logique mais faux.
car, si il y a bien 2 enregistrements pleins, il y en a trois dont 1 vide.

Je ne peux pas donner 3 comme "ID" à un nouvelle enregistrement, cet "ID" existe déjà.
Ce sera 4 mais pour créer ce numéro valide automatiquement par prog, il me faut connaitre
le nombre total des enregistrements, vide+plein.
Le résultat de la fonction+1 me donnera automatiquement un "ID" déjà utilisé si il y a eu suppression
d' une fiche/enregistrement.

Comment puis l' obtenir ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: ISAM toujours ISAM   Ven 9 Oct 2015 - 23:34

Effectivement. Le "numéro d'enregistrement" est un identifiant technique qui donne l'adresse dans le fichier. Le fait de supprimer un enregistrement libère la place, mais ne décale pas les autres entregistrements. Et donc, le prochain aura un numéro d'enregistrement inattendu, car imposé par la configuration physique du fichier qui est totalement indépendant du nombre d'enregistrements réels disponibles dans le fichier.

Ce numéro d'enregistrement qui est retourné par la fonction de création d'enregistrement ou les fonctions de lecture, est prévu pour une autre série de fonctions en cours de conception (mais qui a pris un peu de retard, pour cause d'autres projets...). Ce sont des fonctions ayant pour but de "réorganiser" un fichier ISAM, en le comprimant pour supprimer tous les endroits non utilisées et pour reconstruire les indexes éventuellement abimés. Et pour cela, j'ai besoin de connaître les adresses physiques des enregistrements. Il ne faut surtout pas mettre cette valeur dans un enregistrement, encore moins dans un champ faisant partie d'une clé ! L'adresse physique d'un enregistrement est susceptible de varier, contrairement aux clés qui restent inchangées.

Si tu veux absolument avoir une référence genre identifiant; je te conseille de créer un enregistrement avec une clé principale spéciale (tout à zéro ou à blanc, par exemple) et de coller la valeur du dernier identifiant utilisé dans cet enregistrement. Puis, lors de la création d'un nouveau, tu lis celui-là, tu incrémentes sa valeur et tu la mets de côté, puis tu réécris cet enregistrement spécial. Puis, tu crées ton nouvel enregistrement en mettant cette nouvelle valeur dans un champ, mais certainement pas comme un champ clé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 25 Mar 2016 - 15:41

@ Klaus,

Dans l' utilisation d' une base ISAM, n' est il pas préférable de l' ouvrir avant et de la fermer après chaque opération
pour éviter des accès violation de KGF ou cela n' a t il aucune importance ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: ISAM toujours ISAM   Ven 25 Mar 2016 - 15:54

Non, cela n'a aucune incidence sur la survenue de ces violations de mémoire. Ces erreurs sont dues à des passages de paramètres mal construits. J'essaie de les intercepter et les neutraliser, mais je ne le fais que progressivement, au fil de l'identification de problèmes.

Je pourrais désactiver complètement ces violations de mémoire dans ISAM, mais alors, on ne se rendrait plus compte des erreurs, et cela conduirait à une destruction progressive de la base, sans aucune possibilité de déterminer le point de départ du problème.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 25 Mar 2016 - 16:32

Je pose la question, car j' utilise plusieurs objets de KGF :

Toolbar
TreeView
ISAM
Histogram

sans parler des autres fonctions style :

WindowTopMost 
etc...

Et parfois j' ai des messages d' erreur qui ne se produisent pas régulièrement.
Je me demandais si, de temps en temps, il n' y avait pas des interférences entre toutes ces fonctions...

Là, je suis en train de regrouper les fonctions par objet dans des fichiers distincts pour réorganiser un peu mon source
car, ajoutes une fonction puis ajoutes en une autre, et c' était devenu le footware et je n' y retrouvai plus mes petits...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: ISAM toujours ISAM   Ven 25 Mar 2016 - 16:41

C'est vrai que les fonctions sont très nombreuses. Mais entre les différents groupes de fonctions, il n'y a aucune interaction. ISAM est bien séparé de BDR aui est bien séparé de Histogramme, ToolBar etc.

Initialement, tout cela était dans des DLLs séparés, mais cela devenait trop lourd à maintenir, et la limitation (ancienne) de Panoramic à une seule DLL posait problème. C'est la raison pour laquelle j'ai tout réuni dans KGF.dll. Mais techniquement, tout est bien séparé.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Ven 25 Mar 2016 - 16:45

Ok Klaus, je poursuis mon ménage de printemps... Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 6 Avr 2016 - 22:53

Klaus,

j' ai créé cette sub :
Code:
sub CREATE_ISAM_files(name$)
  dim_local res%,def$,defkey$,i%
  ISAM_nam$ = name$
' -> création des champs
  def$ ="4,5,4,10,10,3"
  for i%=1 to 384 : def$ = def$+",3" : next i%
  for i%=1 to 5  : def$ = def$+",10": next i%
  def$ = def$+",100,100"
  for i%=1 to 3  : def$ = def$+",10": next i%
  res% = dll_call2("SetIsamFields",Isam_ID%,adr(def$))
  message str$(res%)
 
' -> création des clés
'  ID
  defkey$ ="1,1,1"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
'  NUM Livret
  defkey$ ="2,0,2"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
'  NUM Feuille
  defkey$ ="3,0,3"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
'  IMMAT
  defkey$ ="4,0,4"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
'  DATE
  defkey$ ="5,0,5"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
'  MOIS
  defkey$ ="6,0,6"
  res% = dll_call2("SetIsamKeyFields",Isam_ID%,adr(defkey$))
' -> enregistrement des fichiers
  res% = dll_call2("CreateIsamFile",Isam_ID%,adr(ISAM_nam$))
  message str$(res%)
end_sub


Le premier message me renvoie -3
Dans la doc, il est dit :

res% = -3 : Nbre de champs incohérent

Comment un nombre de champs peut il être incohérent ?
Je déclare le nombre de champs dont j' ai besoin même si dans ce cas, cela parait complètement fou.
scratch
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: ISAM toujours ISAM   Jeu 7 Avr 2016 - 1:28

Citation :
Comment un nombre de champs peut il être incohérent ?
Tu devrais relire lé début de la doc concernant la fonction SetIsamFields:
Citation :
Cette fonction définit les champs des enregistrements d'un fichier ISAM. La définition des champs se fait par une variable de type chaîne de caractères, qui comprend la liste des longueurs des champs, dans l'ordre, séparées par des virgules. Le premier élément de cette liste doit être le nombre de champs. La liste contient donc n+1 éléments pour n champs. Le nombre de champs peut être entre 1 et 1024. Les champs sont numérotés à partir de 1.

Dans ta variable def$, le premier élément est 4, et la fonction s'attend donc à trouver une liste de 5 éléménts:
4 étant le nombre de champs
les autres éléments étant les longueurs des 4 champs

Or, ta liste est beaucoup plus longue, et donc: "Le nombre de champs est incohérent"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 7997
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Jeu 7 Avr 2016 - 22:12

Embarassed Effectivement, la fatigue de mon nouveau boulot me fait oublier les bases.
Je crois que je vais réserver la prog pour le week-end pendant quelques temps. Laughing
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: ISAM toujours ISAM   

Revenir en haut Aller en bas
 
ISAM toujours ISAM
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 2 sur 2Aller à la page : Précédent  1, 2

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: