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.
ISAM toujours ISAM - Page 2 Emptypar Pedro Aujourd'hui à 10:37

» Un autre pense-bête...
ISAM toujours ISAM - Page 2 Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
ISAM toujours ISAM - Page 2 Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
ISAM toujours ISAM - Page 2 Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
ISAM toujours ISAM - Page 2 Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
ISAM toujours ISAM - Page 2 Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
ISAM toujours ISAM - Page 2 Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
ISAM toujours ISAM - Page 2 Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
ISAM toujours ISAM - Page 2 Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
ISAM toujours ISAM - Page 2 Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
ISAM toujours ISAM - Page 2 Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
ISAM toujours ISAM - Page 2 Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
ISAM toujours ISAM - Page 2 Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
ISAM toujours ISAM - Page 2 Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
ISAM toujours ISAM - Page 2 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 à ne pas rater :
Smartphone Xiaomi 14 – 512 Go- 6,36″ 5G Double SIM à 599€
599 €
Voir le deal

 

 ISAM toujours ISAM

Aller en bas 
+2
Klaus
Yannick
6 participants
Aller à la page : Précédent  1, 2, 3  Suivant
AuteurMessage
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyLun 5 Oct 2015 - 23: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
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyMar 6 Oct 2015 - 0: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyMar 6 Oct 2015 - 0: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
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyVen 9 Oct 2015 - 21: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
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyVen 9 Oct 2015 - 22: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyVen 25 Mar 2016 - 13: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
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyVen 25 Mar 2016 - 13: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyVen 25 Mar 2016 - 14: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
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyVen 25 Mar 2016 - 14: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyVen 25 Mar 2016 - 14:45

Ok Klaus, je poursuis mon ménage de printemps... Laughing
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyMer 6 Avr 2016 - 21: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
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyJeu 7 Avr 2016 - 0: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
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptyJeu 7 Avr 2016 - 21: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
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Exemples avec Isam   ISAM toujours ISAM - Page 2 EmptyJeu 11 Juil 2019 - 15:12

Bonjour à tous.

Y aurait il dans un Webdav une demo de création et de lecture avec ISAM.

Je voudrais juste faire un test pour savoir si cela me conviendrait.

Merci pour toutes les réponses.

Lepetitmarocain
Revenir en haut Aller en bas
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyJeu 11 Juil 2019 - 18:14

Tu as ceci, par exemple:
Code:
' test_ISAM.bas


label close0
label crefic, opnfic, clsfic, copfic, envers, choix
label addrec, delrec, chgnam, chgid, chgadr


dim res%, version$, no%, n%, err%, s$, sr$, sf$, inverser%, lg%, f$
dim data$, key$, nrec%, key1$, key2$

dim dll$  : dll$ = "KGF.dll"
dim FName$ : FName$ = "TestISAM"

dim Isam$, IsamID%, RecLen%

dim aNRec%, aDefSiz%, aNKeys%, aNFields%, aRecLen%, Grid%, envers%, gridlig%
dim eNom%, eID%, eAdresse%



full_space 0 : on_close 0,close0
no% = no% + 1 : button no% : top no%,40 : left no%, 20 : caption no%,"Créer fichier"  : on_click no%,crefic
no% = no% + 1 : button no% : top no%,40 : left no%,120 : caption no%,"Ouvrir fichier" : on_click no%,opnfic
no% = no% + 1 : button no% : top no%,40 : left no%,220 : caption no%,"Fermer fichier" : on_click no%,clsfic
no% = no% + 1 : button no% : top no%,70 : left no%, 20 : caption no%,"Copier fichier" : on_click no%,copfic

no% = no% + 1 : alpha no%  : top no%, 40 : left no%,400 : caption no%,"Enregistrements:"
no% = no% + 1 : alpha no%  : top no%, 10 : left no%,600 : caption no%,"Taille descripteur:"
no% = no% + 1 : alpha no%  : top no%, 40 : left no%,600 : caption no%,"Nombre de clés:"
no% = no% + 1 : alpha no%  : top no%, 70 : left no%,600 : caption no%,"Nombre de champs:"
no% = no% + 1 : alpha no%  : top no%,100 : left no%,600 : caption no%,"Longueur enregistrement:"

no% = no% + 1 : alpha no%  : top no%, 35 : left no%,500 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNRec% = no%
no% = no% + 1 : alpha no%  : top no%,  5 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aDefSiz% = no%
no% = no% + 1 : alpha no%  : top no%, 35 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNKeys% = no%
no% = no% + 1 : alpha no%  : top no%, 65 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNFields% = no%
no% = no% + 1 : alpha no%  : top no%, 95 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aRecLen% = no%

no% = no% + 1 : check no%  : top no%,120 : left no%, 20 : caption no%,"Ordre inverse"
  envers% = no% : on_click no%,envers
no% = no% + 1 : grid no%  : top no%,150 : left no%, 20 : width no%,776 : height no%,255
  grid% = no% : on_click no%,choix
  grid_row no%,500 : grid_column no%,3 : grid_column_fixed grid%,0.01
  grid_one_column_width no%,1,200
  grid_one_column_width no%,2,50
  grid_one_column_width no%,3,500
  grid_write no%,1,1,"Nom" : grid_write no%,1,2,"ID" : grid_write no%,1,3,"Adresse"

no% = no% + 1 : alpha no%  : top no%,430 : left no%, 20 : caption no%,"Nom:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,230 : caption no%,"ID:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,280 : caption no%,"Adresse:"
no% = no% + 1 : edit no%  : top no%,460 : left no%, 20 : width no%,200
  eNom% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,230 : width no%,40
  eID% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,280 : width no%,500
  eAdresse% = no%

no% = no% + 1 : button no% : top no%,490 : left no%,20  : caption no%,"Ajouter"  : on_click no%,addrec
no% = no% + 1 : button no% : top no%,490 : left no%,120 : caption no%,"Supprimer"  : on_click no%,delrec
no% = no% + 1 : button no% : top no%,490 : left no%,280 : width no%,120 : caption no%,"Changer nom"  : on_click no%,chgnam
no% = no% + 1 : button no% : top no%,490 : left no%,410 : width no%,120 : caption no%,"Changer ID"  : on_click no%,chgid
no% = no% + 1 : button no% : top no%,490 : left no%,540 : width no%,120 : caption no%,"Changer adresse"  : on_click no%,chgadr

dll_on dll$

version$ = string$(25," ")
res% = dll_call1("GetIsamVersion",adr(version$))
caption 0,"Test ISAM (B-Tree) - "+version$
n% = dll_call0("GetIsamIdentifierSize")
caption aDefSiz%,str$(n%)

res% = dll_call0("InitIsam")

end

close0:
  if IsamID%<>0 then res% = dll_call1("CloseIsamFile",IsamID%)
  res% = dll_call0("FreeIsam")
  return

crefic:
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+" existe déjà. Remplacer ?")<>1 then return
  end_if
  CreateIdentifier()
  InitContext()
  res% = dll_call0("GetIsamOk")
  if res%<0 then return

  res% = dll_call2("CreateIsamFile",IsamID%,adr(FName$))
  if res%<0
    err% = dll_call0("GetIsamError")
    if res%=-1 then message "Erreur en création de base: "+str$(err%)
    if res%=-2 then message "Erreur en réouverture de base: "+str$(err%)
    return
  end_if
  AfficherEtat()
  gridlig% = 0
  return
 
opnfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  CreateIdentifier()
  res% = dll_call2("OpenIsamFile",IsamID%,adr(FName$))
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en ouverture: "+str$(res%)
    return
  end_if
  AfficherEtat()
  AfficherTableau()
  gridlig% = 0
  return

clsfic:
  res% = dll_call1("CloseIsamFile",IsamID%)
  caption aRecLen%,"0"
  caption aNFields%,"0"
  caption aNKeys%,"0"
  caption aNRec%,"0"
  EffacerTableau()
  gridlig% = 0
  return

copfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  f$ = FName$ + "_copy"
  res% = dll_call1("IsamFileExists",adr(f$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+"_copy existe déjà. Remplacer ?")<>1 then return
    file_delete FName$+"_copy.DAT"
    file_delete FName$+"_copy.IX"
  end_if
  CreateIdentifier()
  res% = dll_call2("CopyIsamFile",IsamID%,adr(FName$))
  res% = dll_call1("CloseIsamFile",IsamID%)
  message "Le fichier est recopié sous "+FName$+"_copy.DAT et "+FName$+"_copy.IX"
  return
 
envers:
  inverser% = checked(envers%)
  AfficherTableau()
  return
 
choix:
  lg% = grid_y_to_row(grid%,mouse_y_left_down(grid%))
  if trim$(grid_read$(grid%,lg%,1))="" then return
  gridlig% = lg%
  text eNom%,grid_read$(grid%,lg%,1)
  text eID%,grid_read$(grid%,lg%,2)
  text eAdresse%,grid_read$(grid%,lg%,3)
  return
 
addrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  sr$ = string$(RecLen%,"*") : ' construire la chaîne de caractères représentant l'enregistrement

  s$ = trim$(text$(eNom%))
  if s$=""
    message "Le nom manque"
    return
  end_if
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,1,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 1

  s$ = trim$(text$(eID%))
  if s$=""
    message "L'identifiant manque"
    return
  end_if
  sf$ = "²"
  res% = dll_call6("FillIsamField",IsamID%,2,1,adr(sr$),adr(s$),adr(sf$))  : ' champ 2

  s$ = trim$(text$(eAdresse%))
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,3,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 3

  res% = dll_call2("AddIsamRecord",IsamID%,adr(sr$)) : ' ajout dans le fichier ISAM
  if res%<0
    err% = dll_call0("GetIsamError")
    message "Erreur en création "+str$(res%)+": "+str$(err%)
    return
  end_if
  res% = dll_call1("GetIsamRecordCount",IsamID%)
  caption aNRec%,str$(res%)
  AfficherTableau()
  return
 
delrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),2,adr(key$))
    if message_confirmation_yes_no("Vraiment supprimer "+trim$(grid_read$(grid%,gridlig%,1))+" ?")<>1 then return
    res% = dll_call3("DeleteIsamRecord",IsamID%,adr(data$),nrec%)
    AfficherTableau()
    res% = dll_call1("GetIsamRecordCount",IsamID%)
    caption aNRec%,str$(res%)
    gridlig% = 0
  end_if
  return
 
chgnam:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    key1$ = string$(20," ")
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),1,adr(key1$))
    s$ = Trim$(text$(eNom%))
    key2$ = Left$(s$+String$(20," "),20)
    res% = dll_call5("ReplaceIsamKey",IsamID%,1,nrec%,adr(key1$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = ""
      res% = dll_call6("FillIsamField",IsamID%,1,0,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,1,trim$(key2$)
      AfficherTableau()
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if
  return

chgid:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Trim$(text$(eID%))
    key2$ = Right$(String$(8,"²")+s$,8)
    res% = dll_call5("ReplaceIsamKey",IsamID%,2,nrec%,adr(key$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = "²"
      res% = dll_call6("FillIsamField",IsamID%,2,1,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,2,trim$(text$(eID%))
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if


  return

chgadr:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Left$(Trim$(text$(eAdresse%))+string$(40," "),40)
    sf$ = " "
    res% = dll_call6("FillIsamField",IsamID%,3,0,adr(data$),adr(s$),adr(sf$))
    res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
    res% = dll_call0("GetIsamOk")
    if res%=0
      grid_write grid%,gridlig%,3,trim$(s$)
    else
      res% = dll_call0("GetIsamError")
      message "Erreur en écriture: "+str$(res%)
    end_if
  else
    res% = dll_call0("GetIsamError")
    message "Erreur en lecture: "+str$(res%)
  end_if
  return
 
sub CreateIdentifier()
  dim_local n%, i%, def$
  n% = dll_call0("GetIsamIdentifierSize")
  Isam$ = string$(n%," ")
  IsamID% = dll_call1("CreateIsamIdentifier",adr(Isam$))
  exit_sub
 
  for i%=0 to 3
    poke adr(IsamID%)+i%,peek(adr(Isam$+i%))
  next i%
  for i%=0 to n%-1
    poke IsamID%+i%,0
  next i%
end_sub

sub InitContext()
  dim_local def$
  def$ = "3,20,8,40"
  res% = dll_call2("SetIsamFields",IsamID%,adr(def$))    : ' définir les champs
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition des champs: "+str$(err%)
  end_if
  def$ = "1,0,1"                                            : ' clé 1: champ 1
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition de clé 1: "+str$(err%)
  end_if
  def$ = "2,1,2"                                            : '  clé 2: champ 2
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' interdire doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition d clé 2: "+str$(err%)
  end_if
end_sub

sub AfficherEtat()
  res% = dll_call1("GetIsamRecordLength",IsamID%)
  caption aRecLen%,str$(res%)
  RecLen% = res%
  res% = dll_call1("GetIsamFieldCount",IsamID%)
  caption aNFields%,str$(res%)
  res% = dll_call1("GetIsamKeyCount",IsamID%)
  caption aNKeys%,str$(res%)
  res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
  caption aNRec%,str$(res%)
end_sub

sub EffacerTableau()
  dim_local l%, c%
  l% = 1
  while l%<500
    l% = l% + 1
    if trim$(grid_read$(grid%,l%,1))="" then exit_while
    grid_write grid%,l%,1,""
    grid_write grid%,l%,2,""
    grid_write grid%,l%,3,""
  end_while
  text eNom%,""
  text eID%,""
  text eAdresse%,""
end_sub

sub AfficherTableau()
  dim_local r%, ref%, key$, data$, field$, fill$
  EffacerTableau()
  r% = 2
  ref% = 0
  if inverser%=1
    key$ = string$(20,chr$(255))
  else
    key$ = string$(20," ")
  end_if
  data$ = string$(RecLen%," ")
  if inverser%=1
    res% = dll_call3("ResetIsamKey",IsamID%,1,1)
  else
    res% = dll_call3("ResetIsamKey",IsamID%,1,0)
  end_if
 
  while dll_call0("GetIsamOk")=0
    if inverser%=1
      res% = dll_call4("ReadPreviousIsamRecord",IsamID%,adr(data$),1,adr(key$))
    else
      res% = dll_call4("ReadNextIsamRecord",IsamID%,adr(data$),1,adr(key$))
    end_if
    res% = dll_call0("GetIsamOk")
    if res%=0
      if Left$(Key$,1)="²"
      else
        field$ = String$(20," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,1,adr(data$),adr(field$),adr(fill$))
        key$ = field$
        grid_write grid%,r%,1,trim$(field$)

        field$ = String$(8," ")
        fill$ = "²"
        res% = dll_call5("ExtractIsamField",IsamID%,2,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,2,trim$(field$)

        field$ = String$(40," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,3,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,3,trim$(field$)

        r% = r% + 1
        if r%>500 then exit_while
      end_if
    else
      res% = dll_call0("GetIsamError")
      if (res%<>10250) and (res%<>10260) then message "IsamError="+s$tr(res%)
      exit_while
    end_if
  end_while
 
end_sub


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




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Isam   ISAM toujours ISAM - Page 2 EmptyVen 12 Juil 2019 - 17:58

Bonjour Klaus

Merci pour le programme de test pour ISAM.

Mais le programme plante dés que j'essaie de creer le fichier


"Le programme a cessé de fonctionner"

Merci
Revenir en haut Aller en bas
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyVen 12 Juil 2019 - 18:26

Ca marchera mieux comme ceci:
Code:
' test_ISAM.bas


label close0
label crefic, opnfic, clsfic, copfic, envers, choix
label addrec, delrec, chgnam, chgid, chgadr


dim res%, txtversion$, no%, n%, err%, s$, sr$, sf$, inverser%, lg%, f$
dim data$, key$, nrec%, key1$, key2$

dim dll$  : dll$ = "KGF.dll"
dim FName$ : FName$ = "TestISAM"

dim Isam$, IsamID%, RecLen%

dim aNRec%, aDefSiz%, aNKeys%, aNFields%, aRecLen%, Grid%, envers%, gridlig%
dim eNom%, eID%, eAdresse%



full_space 0 : on_close 0,close0
no% = no% + 1 : button no% : top no%,40 : left no%, 20 : caption no%,"Créer fichier"  : on_click no%,crefic
no% = no% + 1 : button no% : top no%,40 : left no%,120 : caption no%,"Ouvrir fichier" : on_click no%,opnfic
no% = no% + 1 : button no% : top no%,40 : left no%,220 : caption no%,"Fermer fichier" : on_click no%,clsfic
no% = no% + 1 : button no% : top no%,70 : left no%, 20 : caption no%,"Copier fichier" : on_click no%,copfic

no% = no% + 1 : alpha no%  : top no%, 40 : left no%,400 : caption no%,"Enregistrements:"
no% = no% + 1 : alpha no%  : top no%, 10 : left no%,600 : caption no%,"Taille descripteur:"
no% = no% + 1 : alpha no%  : top no%, 40 : left no%,600 : caption no%,"Nombre de clés:"
no% = no% + 1 : alpha no%  : top no%, 70 : left no%,600 : caption no%,"Nombre de champs:"
no% = no% + 1 : alpha no%  : top no%,100 : left no%,600 : caption no%,"Longueur enregistrement:"

no% = no% + 1 : alpha no%  : top no%, 35 : left no%,500 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNRec% = no%
no% = no% + 1 : alpha no%  : top no%,  5 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aDefSiz% = no%
no% = no% + 1 : alpha no%  : top no%, 35 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNKeys% = no%
no% = no% + 1 : alpha no%  : top no%, 65 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNFields% = no%
no% = no% + 1 : alpha no%  : top no%, 95 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aRecLen% = no%

no% = no% + 1 : check no%  : top no%,120 : left no%, 20 : caption no%,"Ordre inverse"
  envers% = no% : on_click no%,envers
no% = no% + 1 : grid no%  : top no%,150 : left no%, 20 : width no%,776 : height no%,255
  grid% = no% : on_click no%,choix
  grid_row no%,500 : grid_column no%,3 : grid_column_fixed grid%,0.01
  grid_one_column_width no%,1,200
  grid_one_column_width no%,2,50
  grid_one_column_width no%,3,500
  grid_write no%,1,1,"Nom" : grid_write no%,1,2,"ID" : grid_write no%,1,3,"Adresse"

no% = no% + 1 : alpha no%  : top no%,430 : left no%, 20 : caption no%,"Nom:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,230 : caption no%,"ID:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,280 : caption no%,"Adresse:"
no% = no% + 1 : edit no%  : top no%,460 : left no%, 20 : width no%,200
  eNom% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,230 : width no%,40
  eID% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,280 : width no%,500
  eAdresse% = no%

no% = no% + 1 : button no% : top no%,490 : left no%,20  : caption no%,"Ajouter"  : on_click no%,addrec
no% = no% + 1 : button no% : top no%,490 : left no%,120 : caption no%,"Supprimer"  : on_click no%,delrec
no% = no% + 1 : button no% : top no%,490 : left no%,280 : width no%,120 : caption no%,"Changer nom"  : on_click no%,chgnam
no% = no% + 1 : button no% : top no%,490 : left no%,410 : width no%,120 : caption no%,"Changer ID"  : on_click no%,chgid
no% = no% + 1 : button no% : top no%,490 : left no%,540 : width no%,120 : caption no%,"Changer adresse"  : on_click no%,chgadr

dll_on dll$

txtversion$ = string$(25," ")
res% = dll_call1("GetIsamVersion",adr(txtversion$))
caption 0,"Test ISAM (B-Tree) - "+txtversion$
n% = dll_call0("GetIsamIdentifierSize")
caption aDefSiz%,str$(n%)

res% = dll_call0("InitIsam")

end

close0:
  if IsamID%<>0 then res% = dll_call1("CloseIsamFile",IsamID%)
  res% = dll_call0("FreeIsam")
  return

crefic:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+" existe déjà. Remplacer ?")<>1 then return
  end_if
  CreateIdentifier()
  InitContext()
  res% = dll_call0("GetIsamOk")
  if res%<0 then return

  res% = dll_call2("CreateIsamFile",IsamID%,adr(FName$))
  if res%<0
    err% = dll_call0("GetIsamError")
    if res%=-1 then message "Erreur en création de base: "+str$(err%)
    if res%=-2 then message "Erreur en réouverture de base: "+str$(err%)
    return
  end_if
  AfficherEtat()
  gridlig% = 0
  return
 
opnfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  CreateIdentifier()
  res% = dll_call2("OpenIsamFile",IsamID%,adr(FName$))
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en ouverture: "+str$(res%)
    return
  end_if
  AfficherEtat()
  AfficherTableau()
  gridlig% = 0
  return

clsfic:
  res% = dll_call1("CloseIsamFile",IsamID%)
  caption aRecLen%,"0"
  caption aNFields%,"0"
  caption aNKeys%,"0"
  caption aNRec%,"0"
  EffacerTableau()
  gridlig% = 0
  return

copfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call0("IsamFileIsOpen")
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  f$ = FName$ + "_copy"
  res% = dll_call1("IsamFileExists",adr(f$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+"_copy existe déjà. Remplacer ?")<>1 then return
    file_delete FName$+"_copy.DAT"
    file_delete FName$+"_copy.IX"
  end_if
  CreateIdentifier()
  res% = dll_call2("CopyIsamFile",IsamID%,adr(FName$))
  res% = dll_call1("CloseIsamFile",IsamID%)
  message "Le fichier est recopié sous "+FName$+"_copy.DAT et "+FName$+"_copy.IX"
  return
 
envers:
  inverser% = checked(envers%)
  AfficherTableau()
  return
 
choix:
  lg% = grid_y_to_row(grid%,mouse_y_left_down(grid%))
  if trim$(grid_read$(grid%,lg%,1))="" then return
  gridlig% = lg%
  text eNom%,grid_read$(grid%,lg%,1)
  text eID%,grid_read$(grid%,lg%,2)
  text eAdresse%,grid_read$(grid%,lg%,3)
  return
 
addrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  sr$ = string$(RecLen%,"*") : ' construire la chaîne de caractères représentant l'enregistrement

  s$ = trim$(text$(eNom%))
  if s$=""
    message "Le nom manque"
    return
  end_if
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,1,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 1

  s$ = trim$(text$(eID%))
  if s$=""
    message "L'identifiant manque"
    return
  end_if
  sf$ = "²"
  res% = dll_call6("FillIsamField",IsamID%,2,1,adr(sr$),adr(s$),adr(sf$))  : ' champ 2

  s$ = trim$(text$(eAdresse%))
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,3,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 3

  res% = dll_call2("AddIsamRecord",IsamID%,adr(sr$)) : ' ajout dans le fichier ISAM
  if res%<0
    err% = dll_call0("GetIsamError")
    message "Erreur en création "+str$(res%)+": "+str$(err%)
    return
  end_if
  res% = dll_call1("GetIsamRecordCount",IsamID%)
  caption aNRec%,str$(res%)
  AfficherTableau()
  return
 
delrec:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),2,adr(key$))
    if message_confirmation_yes_no("Vraiment supprimer "+trim$(grid_read$(grid%,gridlig%,1))+" ?")<>1 then return
    res% = dll_call3("DeleteIsamRecord",IsamID%,adr(data$),nrec%)
    AfficherTableau()
    res% = dll_call1("GetIsamRecordCount",IsamID%)
    caption aNRec%,str$(res%)
    gridlig% = 0
  end_if
  return
 
chgnam:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    key1$ = string$(20," ")
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),1,adr(key1$))
    s$ = Trim$(text$(eNom%))
    key2$ = Left$(s$+String$(20," "),20)
    res% = dll_call5("ReplaceIsamKey",IsamID%,1,nrec%,adr(key1$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = ""
      res% = dll_call6("FillIsamField",IsamID%,1,0,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,1,trim$(key2$)
      AfficherTableau()
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if
  return

chgid:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Trim$(text$(eID%))
    key2$ = Right$(String$(8,"²")+s$,8)
    res% = dll_call5("ReplaceIsamKey",IsamID%,2,nrec%,adr(key$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = "²"
      res% = dll_call6("FillIsamField",IsamID%,2,1,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,2,trim$(text$(eID%))
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if


  return

chgadr:
  res% = dll_call0("IsamFileIsOpen")
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Left$(Trim$(text$(eAdresse%))+string$(40," "),40)
    sf$ = " "
    res% = dll_call6("FillIsamField",IsamID%,3,0,adr(data$),adr(s$),adr(sf$))
    res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
    res% = dll_call0("GetIsamOk")
    if res%=0
      grid_write grid%,gridlig%,3,trim$(s$)
    else
      res% = dll_call0("GetIsamError")
      message "Erreur en écriture: "+str$(res%)
    end_if
  else
    res% = dll_call0("GetIsamError")
    message "Erreur en lecture: "+str$(res%)
  end_if
  return
 
sub CreateIdentifier()
  dim_local n%, i%, def$
  n% = dll_call0("GetIsamIdentifierSize")
  Isam$ = string$(n%," ")
  IsamID% = dll_call1("CreateIsamIdentifier",adr(Isam$))
  exit_sub
 
  for i%=0 to 3
    poke adr(IsamID%)+i%,peek(adr(Isam$+i%))
  next i%
  for i%=0 to n%-1
    poke IsamID%+i%,0
  next i%
end_sub

sub InitContext()
  dim_local def$
  def$ = "3,20,8,40"
  res% = dll_call2("SetIsamFields",IsamID%,adr(def$))    : ' définir les champs
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition des champs: "+str$(err%)
  end_if
  def$ = "1,0,1"                                            : ' clé 1: champ 1
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition de clé 1: "+str$(err%)
  end_if
  def$ = "2,1,2"                                            : '  clé 2: champ 2
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' interdire doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition d clé 2: "+str$(err%)
  end_if
end_sub

sub AfficherEtat()
  res% = dll_call1("GetIsamRecordLength",IsamID%)
  caption aRecLen%,str$(res%)
  RecLen% = res%
  res% = dll_call1("GetIsamFieldCount",IsamID%)
  caption aNFields%,str$(res%)
  res% = dll_call1("GetIsamKeyCount",IsamID%)
  caption aNKeys%,str$(res%)
  res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
  caption aNRec%,str$(res%)
end_sub

sub EffacerTableau()
  dim_local l%, c%
  l% = 1
  while l%<500
    l% = l% + 1
    if trim$(grid_read$(grid%,l%,1))="" then exit_while
    grid_write grid%,l%,1,""
    grid_write grid%,l%,2,""
    grid_write grid%,l%,3,""
  end_while
  text eNom%,""
  text eID%,""
  text eAdresse%,""
end_sub

sub AfficherTableau()
  dim_local r%, ref%, key$, data$, field$, fill$
  EffacerTableau()
  r% = 2
  ref% = 0
  if inverser%=1
    key$ = string$(20,chr$(255))
  else
    key$ = string$(20," ")
  end_if
  data$ = string$(RecLen%," ")
  if inverser%=1
    res% = dll_call3("ResetIsamKey",IsamID%,1,1)
  else
    res% = dll_call3("ResetIsamKey",IsamID%,1,0)
  end_if
 
  while dll_call0("GetIsamOk")=0
    if inverser%=1
      res% = dll_call4("ReadPreviousIsamRecord",IsamID%,adr(data$),1,adr(key$))
    else
      res% = dll_call4("ReadNextIsamRecord",IsamID%,adr(data$),1,adr(key$))
    end_if
    res% = dll_call0("GetIsamOk")
    if res%=0
      if Left$(Key$,1)="²"
      else
        field$ = String$(20," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,1,adr(data$),adr(field$),adr(fill$))
        key$ = field$
        grid_write grid%,r%,1,trim$(field$)

        field$ = String$(8," ")
        fill$ = "²"
        res% = dll_call5("ExtractIsamField",IsamID%,2,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,2,trim$(field$)

        field$ = String$(40," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,3,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,3,trim$(field$)

        r% = r% + 1
        if r%>500 then exit_while
      end_if
    else
      res% = dll_call0("GetIsamError")
      if (res%<>10250) and (res%<>10260) then message "IsamError="+str$(res%)
      exit_while
    end_if
  end_while
 
end_sub

En ligne 94, il manquait le paramètre pour la fonction. Tel que c'est, ça devrait marcher.
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Isam toujours Isam   ISAM toujours ISAM - Page 2 EmptySam 13 Juil 2019 - 18:08

Bonjour Klaus

Merci pour la modif, mais le programme plante dés que j'essaie de faire un ajout.

Je pense que c'est la ligne

192 res% = dll_call0("IsamFileIsOpen")

qui plante

Désolé de  te mettre à contribution

Merci

Bonne soirée
Revenir en haut Aller en bas
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyDim 14 Juil 2019 - 0:10

Exact. Et pas seulement à cet endroit. Voici la version corrigée:
Code:
' test_ISAM.bas


label close0
label crefic, opnfic, clsfic, copfic, envers, choix
label addrec, delrec, chgnam, chgid, chgadr


dim res%, txtversion$, no%, n%, err%, s$, sr$, sf$, inverser%, lg%, f$
dim data$, key$, nrec%, key1$, key2$

dim dll$  : dll$ = "KGF.dll"
dim FName$ : FName$ = "TestISAM"

dim Isam$, IsamID%, RecLen%

dim aNRec%, aDefSiz%, aNKeys%, aNFields%, aRecLen%, Grid%, envers%, gridlig%
dim eNom%, eID%, eAdresse%



full_space 0 : on_close 0,close0
no% = no% + 1 : button no% : top no%,40 : left no%, 20 : caption no%,"Créer fichier"  : on_click no%,crefic
no% = no% + 1 : button no% : top no%,40 : left no%,120 : caption no%,"Ouvrir fichier" : on_click no%,opnfic
no% = no% + 1 : button no% : top no%,40 : left no%,220 : caption no%,"Fermer fichier" : on_click no%,clsfic
no% = no% + 1 : button no% : top no%,70 : left no%, 20 : caption no%,"Copier fichier" : on_click no%,copfic

no% = no% + 1 : alpha no%  : top no%, 40 : left no%,400 : caption no%,"Enregistrements:"
no% = no% + 1 : alpha no%  : top no%, 10 : left no%,600 : caption no%,"Taille descripteur:"
no% = no% + 1 : alpha no%  : top no%, 40 : left no%,600 : caption no%,"Nombre de clés:"
no% = no% + 1 : alpha no%  : top no%, 70 : left no%,600 : caption no%,"Nombre de champs:"
no% = no% + 1 : alpha no%  : top no%,100 : left no%,600 : caption no%,"Longueur enregistrement:"

no% = no% + 1 : alpha no%  : top no%, 35 : left no%,500 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNRec% = no%
no% = no% + 1 : alpha no%  : top no%,  5 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aDefSiz% = no%
no% = no% + 1 : alpha no%  : top no%, 35 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNKeys% = no%
no% = no% + 1 : alpha no%  : top no%, 65 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aNFields% = no%
no% = no% + 1 : alpha no%  : top no%, 95 : left no%,750 : caption no%,"0"
  font_bold no% : font_size no%,12
  aRecLen% = no%

no% = no% + 1 : check no%  : top no%,120 : left no%, 20 : caption no%,"Ordre inverse"
  envers% = no% : on_click no%,envers
no% = no% + 1 : grid no%  : top no%,150 : left no%, 20 : width no%,776 : height no%,255
  grid% = no% : on_click no%,choix
  grid_row no%,500 : grid_column no%,3 : grid_column_fixed grid%,0.01
  grid_one_column_width no%,1,200
  grid_one_column_width no%,2,50
  grid_one_column_width no%,3,500
  grid_write no%,1,1,"Nom" : grid_write no%,1,2,"ID" : grid_write no%,1,3,"Adresse"

no% = no% + 1 : alpha no%  : top no%,430 : left no%, 20 : caption no%,"Nom:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,230 : caption no%,"ID:"
no% = no% + 1 : alpha no%  : top no%,430 : left no%,280 : caption no%,"Adresse:"
no% = no% + 1 : edit no%  : top no%,460 : left no%, 20 : width no%,200
  eNom% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,230 : width no%,40
  eID% = no%
no% = no% + 1 : edit no%  : top no%,460 : left no%,280 : width no%,500
  eAdresse% = no%

no% = no% + 1 : button no% : top no%,490 : left no%,20  : caption no%,"Ajouter"  : on_click no%,addrec
no% = no% + 1 : button no% : top no%,490 : left no%,120 : caption no%,"Supprimer"  : on_click no%,delrec
no% = no% + 1 : button no% : top no%,490 : left no%,280 : width no%,120 : caption no%,"Changer nom"  : on_click no%,chgnam
no% = no% + 1 : button no% : top no%,490 : left no%,410 : width no%,120 : caption no%,"Changer ID"  : on_click no%,chgid
no% = no% + 1 : button no% : top no%,490 : left no%,540 : width no%,120 : caption no%,"Changer adresse"  : on_click no%,chgadr

dll_on dll$

txtversion$ = string$(25," ")
res% = dll_call1("GetIsamVersion",adr(txtversion$))
caption 0,"Test ISAM (B-Tree) - "+txtversion$
n% = dll_call0("GetIsamIdentifierSize")
caption aDefSiz%,str$(n%)

res% = dll_call0("InitIsam")

end

close0:
  if IsamID%<>0 then res% = dll_call1("CloseIsamFile",IsamID%)
  res% = dll_call0("FreeIsam")
  return

crefic:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+" existe déjà. Remplacer ?")<>1 then return
  end_if
  CreateIdentifier()
  InitContext()
  res% = dll_call0("GetIsamOk")
  if res%<0 then return

  res% = dll_call2("CreateIsamFile",IsamID%,adr(FName$))
  if res%<0
    err% = dll_call0("GetIsamError")
    if res%=-1 then message "Erreur en création de base: "+str$(err%)
    if res%=-2 then message "Erreur en réouverture de base: "+str$(err%)
    return
  end_if
  AfficherEtat()
  gridlig% = 0
  return
 
opnfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  CreateIdentifier()
  res% = dll_call2("OpenIsamFile",IsamID%,adr(FName$))
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en ouverture: "+str$(res%)
    return
  end_if
  AfficherEtat()
  AfficherTableau()
  gridlig% = 0
  return

clsfic:
  res% = dll_call1("CloseIsamFile",IsamID%)
  caption aRecLen%,"0"
  caption aNFields%,"0"
  caption aNKeys%,"0"
  caption aNRec%,"0"
  EffacerTableau()
  gridlig% = 0
  return

copfic:
  res% = dll_call1("IsamFileExists",adr(FName$))
  if res%<0
    message "Le fichier "+FName$+" n'existe pas"
    return
  end_if
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%=0
    message "Le fichier est actuellement ouvert !"
    return
  end_if
  f$ = FName$ + "_copy"
  res% = dll_call1("IsamFileExists",adr(f$))
  if res%=0
    if message_confirmation_yes_no("Le fichier "+FName$+"_copy existe déjà. Remplacer ?")<>1 then return
    file_delete FName$+"_copy.DAT"
    file_delete FName$+"_copy.IX"
  end_if
  CreateIdentifier()
  res% = dll_call2("CopyIsamFile",IsamID%,adr(FName$))
  res% = dll_call1("CloseIsamFile",IsamID%)
  message "Le fichier est recopié sous "+FName$+"_copy.DAT et "+FName$+"_copy.IX"
  return
 
envers:
  inverser% = checked(envers%)
  AfficherTableau()
  return
 
choix:
  lg% = grid_y_to_row(grid%,mouse_y_left_down(grid%))
  if trim$(grid_read$(grid%,lg%,1))="" then return
  gridlig% = lg%
  text eNom%,grid_read$(grid%,lg%,1)
  text eID%,grid_read$(grid%,lg%,2)
  text eAdresse%,grid_read$(grid%,lg%,3)
  return
 
addrec:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  sr$ = string$(RecLen%,"*") : ' construire la chaîne de caractères représentant l'enregistrement

  s$ = trim$(text$(eNom%))
  if s$=""
    message "Le nom manque"
    return
  end_if
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,1,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 1

  s$ = trim$(text$(eID%))
  if s$=""
    message "L'identifiant manque"
    return
  end_if
  sf$ = "²"
  res% = dll_call6("FillIsamField",IsamID%,2,1,adr(sr$),adr(s$),adr(sf$))  : ' champ 2

  s$ = trim$(text$(eAdresse%))
  sf$ = " "
  res% = dll_call6("FillIsamField",IsamID%,3,0,adr(sr$),adr(s$),adr(sf$))  : ' champ 3

  res% = dll_call2("AddIsamRecord",IsamID%,adr(sr$)) : ' ajout dans le fichier ISAM
  if res%<0
    err% = dll_call0("GetIsamError")
    message "Erreur en création "+str$(res%)+": "+str$(err%)
    return
  end_if
  res% = dll_call1("GetIsamRecordCount",IsamID%)
  caption aNRec%,str$(res%)
  AfficherTableau()
  return
 
delrec:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),2,adr(key$))
    if message_confirmation_yes_no("Vraiment supprimer "+trim$(grid_read$(grid%,gridlig%,1))+" ?")<>1 then return
    res% = dll_call3("DeleteIsamRecord",IsamID%,adr(data$),nrec%)
    AfficherTableau()
    res% = dll_call1("GetIsamRecordCount",IsamID%)
    caption aNRec%,str$(res%)
    gridlig% = 0
  end_if
  return
 
chgnam:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    key1$ = string$(20," ")
    res% = dll_call4("CreateIsamKey",IsamID%,adr(data$),1,adr(key1$))
    s$ = Trim$(text$(eNom%))
    key2$ = Left$(s$+String$(20," "),20)
    res% = dll_call5("ReplaceIsamKey",IsamID%,1,nrec%,adr(key1$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = ""
      res% = dll_call6("FillIsamField",IsamID%,1,0,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,1,trim$(key2$)
      AfficherTableau()
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if
  return

chgid:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Trim$(text$(eID%))
    key2$ = Right$(String$(8,"²")+s$,8)
    res% = dll_call5("ReplaceIsamKey",IsamID%,2,nrec%,adr(key$),adr(key2$))
    res% = dll_call0("GetIsamOk")
    if res%=0
      sf$ = "²"
      res% = dll_call6("FillIsamField",IsamID%,2,1,adr(data$),adr(key2$),adr(sf$))
      res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
      grid_write grid%,gridlig%,2,trim$(text$(eID%))
    else
      res% = dll_call0("GetIsamError")
      if res%=10230
        message "Mise à jour impossible - double clé"
      else
        message "Erreur en mise à jour: "+str$(res%)
      end_if
    end_if
  end_if


  return

chgadr:
  res% = dll_call1("IsamFileIsOpen",IsamID%)
  if res%<0
    message "Le fichier n'est actuellement pas ouvert !"
    return
  end_if
  if gridlig%=0
    message "Aucune ligne n'est sélectionnée."
    return
  end_if
  data$ = string$(reclen%," ")
  key$ = right$(string$(8,"²")+trim$(grid_read$(grid%,gridlig%,2)),8)
  nrec% = dll_call4("ReadIsamRecordByKey",IsamID%,adr(data$),2,adr(key$))
  res% = dll_call0("GetIsamOk")
  if res%=0
    s$ = Left$(Trim$(text$(eAdresse%))+string$(40," "),40)
    sf$ = " "
    res% = dll_call6("FillIsamField",IsamID%,3,0,adr(data$),adr(s$),adr(sf$))
    res% = dll_call3("UpdateIsamRecord",IsamID%,adr(data$),nrec%)
    res% = dll_call0("GetIsamOk")
    if res%=0
      grid_write grid%,gridlig%,3,trim$(s$)
    else
      res% = dll_call0("GetIsamError")
      message "Erreur en écriture: "+str$(res%)
    end_if
  else
    res% = dll_call0("GetIsamError")
    message "Erreur en lecture: "+str$(res%)
  end_if
  return
 
sub CreateIdentifier()
  dim_local n%, i%, def$
  n% = dll_call0("GetIsamIdentifierSize")
  Isam$ = string$(n%," ")
  IsamID% = dll_call1("CreateIsamIdentifier",adr(Isam$))
  exit_sub
 
  for i%=0 to 3
    poke adr(IsamID%)+i%,peek(adr(Isam$+i%))
  next i%
  for i%=0 to n%-1
    poke IsamID%+i%,0
  next i%
end_sub

sub InitContext()
  dim_local def$
  def$ = "3,20,8,40"
  res% = dll_call2("SetIsamFields",IsamID%,adr(def$))    : ' définir les champs
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition des champs: "+str$(err%)
  end_if
  def$ = "1,0,1"                                            : ' clé 1: champ 1
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition de clé 1: "+str$(err%)
  end_if
  def$ = "2,1,2"                                            : '  clé 2: champ 2
  res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' interdire doublons
  res% = dll_call0("GetIsamOk")
  if res%<0
    res% = dll_call0("GetIsamError")
    message "Erreur en définition d clé 2: "+str$(err%)
  end_if
end_sub

sub AfficherEtat()
  res% = dll_call1("GetIsamRecordLength",IsamID%)
  caption aRecLen%,str$(res%)
  RecLen% = res%
  res% = dll_call1("GetIsamFieldCount",IsamID%)
  caption aNFields%,str$(res%)
  res% = dll_call1("GetIsamKeyCount",IsamID%)
  caption aNKeys%,str$(res%)
  res% = res% - 1 - 2 : ' déduire la définition des champs et la définition des deux clés
  caption aNRec%,str$(res%)
end_sub

sub EffacerTableau()
  dim_local l%, c%
  l% = 1
  while l%<500
    l% = l% + 1
    if trim$(grid_read$(grid%,l%,1))="" then exit_while
    grid_write grid%,l%,1,""
    grid_write grid%,l%,2,""
    grid_write grid%,l%,3,""
  end_while
  text eNom%,""
  text eID%,""
  text eAdresse%,""
end_sub

sub AfficherTableau()
  dim_local r%, ref%, key$, data$, field$, fill$
  EffacerTableau()
  r% = 2
  ref% = 0
  if inverser%=1
    key$ = string$(20,chr$(255))
  else
    key$ = string$(20," ")
  end_if
  data$ = string$(RecLen%," ")
  if inverser%=1
    res% = dll_call3("ResetIsamKey",IsamID%,1,1)
  else
    res% = dll_call3("ResetIsamKey",IsamID%,1,0)
  end_if
 
  while dll_call0("GetIsamOk")=0
    if inverser%=1
      res% = dll_call4("ReadPreviousIsamRecord",IsamID%,adr(data$),1,adr(key$))
    else
      res% = dll_call4("ReadNextIsamRecord",IsamID%,adr(data$),1,adr(key$))
    end_if
    res% = dll_call0("GetIsamOk")
    if res%=0
      if Left$(Key$,1)="²"
      else
        field$ = String$(20," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,1,adr(data$),adr(field$),adr(fill$))
        key$ = field$
        grid_write grid%,r%,1,trim$(field$)

        field$ = String$(8," ")
        fill$ = "²"
        res% = dll_call5("ExtractIsamField",IsamID%,2,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,2,trim$(field$)

        field$ = String$(40," ")
        fill$ = " "
        res% = dll_call5("ExtractIsamField",IsamID%,3,adr(data$),adr(field$),adr(fill$))
        grid_write grid%,r%,3,trim$(field$)

        r% = r% + 1
        if r%>500 then exit_while
      end_if
    else
      res% = dll_call0("GetIsamError")
      if (res%<>10250) and (res%<>10260) then message "IsamError="+str$(res%)
      exit_while
    end_if
  end_while
 
end_sub

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




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Isam toujours Isam   ISAM toujours ISAM - Page 2 EmptyLun 15 Juil 2019 - 18:13

Bonjour Klaus

Toujours au sujet du test Isam.

J'ai un problème au niveau de l'affichage dans le grid après avoir saisi la 1ere ligne

Le grid se rempli entièrement avec le mème enregistrement.

Merci par avance .
Revenir en haut Aller en bas
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyLun 15 Juil 2019 - 18:38

Ah, je vois.. je vais regarder ça
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Klaus

Klaus


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

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyMar 16 Juil 2019 - 1:58

C'est plus compliqué que je ne croyais - je n'avais pas encore adapté ce module à la nouvelle définition de passage de paramètres de type string vers une DLL. C'est en cours et ça avance. Patience...
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptySam 31 Juil 2021 - 19:30

Bonjour à tous

J'ouvre une très ancienne discussion sur ISAM.

Cela va rappeler des souvenirs à certains.

Je voudrais savoir si un d'entre vous se sert d'ISAM.

Si oui, pouvez vous me donner un petit exemple fonctionnel, pour voir ce que je pourrais faire avec.

Sinon existe t'il d'autres bases de données en Panoramic

Merci pour votre aide.

Bonne soirée
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8635
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

ISAM toujours ISAM - Page 2 Empty
MessageSujet: re   ISAM toujours ISAM - Page 2 EmptySam 31 Juil 2021 - 19:49

C'est un peu loin tout çà. Wink

Pour les autres bases, tout dépend de ce que tu veux faire et du nombre d'enregistrements.
Pour une petite base simple tu peux te servir de fichiers csv dès que tu compliques le truc
il y a ISAM et Klaus en avait fait une autre aussi je crois mais je ne suis pas sûr.
ISAM permet des recherches assez rapide dans la base et tout est très documenté dans l'aide de KGF.


J'en profite pour faire un petit coucou à nôtre ami Klaus si il nous lit.
cheers
Revenir en haut Aller en bas
lepetitmarocain




Nombre de messages : 341
Age : 82
Localisation : Région Parisienne (à mon grand désespoir)
Date d'inscription : 04/07/2018

ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 EmptyDim 21 Jan 2024 - 19:24

Bonsoir à tous.

Je voudrais faire un programme en utilisant ISAM , et j'aimerais m’inspirer d'un petit programme existant.

Si vous avez cela, pouvez SVP vous le mettre sur le Forum

Remerciements par avance

Bonne soirée
Revenir en haut Aller en bas
Contenu sponsorisé





ISAM toujours ISAM - Page 2 Empty
MessageSujet: Re: ISAM toujours ISAM   ISAM toujours ISAM - Page 2 Empty

Revenir en haut Aller en bas
 
ISAM toujours ISAM
Revenir en haut 
Page 2 sur 3Aller à la page : Précédent  1, 2, 3  Suivant
 Sujets similaires
-
» ISAM vs BDR database
» Souci avec ISAM
» Petit souci avec ISAM
» Je reviens toujours ;)
» bug IF-THEN + FNC, FNC toujours déclenché

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: