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
» Form(résolu)
Isam quand tu nous tiens Emptypar leclode Aujourd'hui à 17:59

» trop de fichiers en cours
Isam quand tu nous tiens Emptypar Marc Aujourd'hui à 11:42

» Bataille navale SM
Isam quand tu nous tiens Emptypar jjn4 Hier à 17:39

» Une calculatrice en une ligne de programme
Isam quand tu nous tiens Emptypar jean_debord Hier à 8:01

» Gestion d'un système client-serveur.
Isam quand tu nous tiens Emptypar Pedro Jeu 25 Avr 2024 - 19:31

» Les maths du crocodile
Isam quand tu nous tiens Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

» Naissance de Crocodile Basic
Isam quand tu nous tiens Emptypar jean_debord Jeu 25 Avr 2024 - 8:45

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Isam quand tu nous tiens Emptypar Froggy One Mer 24 Avr 2024 - 18:38

» Dessine-moi une galaxie
Isam quand tu nous tiens Emptypar jjn4 Lun 22 Avr 2024 - 13:47

» Erreur END_SUB
Isam quand tu nous tiens Emptypar jjn4 Lun 22 Avr 2024 - 13:43

» Bug sur DIM_LOCAL ?
Isam quand tu nous tiens Emptypar papydall Dim 21 Avr 2024 - 23:30

» 2D_fill_color(résolu)
Isam quand tu nous tiens Emptypar leclode Sam 20 Avr 2024 - 8:32

» Consommation gaz électricité
Isam quand tu nous tiens Emptypar leclode Mer 17 Avr 2024 - 11:07

» on_key_down (résolu)
Isam quand tu nous tiens Emptypar leclode Mar 16 Avr 2024 - 11:01

» Sous-programme(résolu)
Isam quand tu nous tiens Emptypar jjn4 Jeu 4 Avr 2024 - 14:42

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Avril 2024
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
2930     
CalendrierCalendrier
Le Deal du moment : -39%
Pack Home Cinéma Magnat Monitor : Ampli DENON ...
Voir le deal
1190 €

 

 Isam quand tu nous tiens

Aller en bas 
4 participants
AuteurMessage
Mike

Mike


Nombre de messages : 31
Age : 73
Localisation : NANCY
Date d'inscription : 12/06/2007

Isam quand tu nous tiens Empty
MessageSujet: Isam quand tu nous tiens   Isam quand tu nous tiens EmptyDim 20 Sep 2015 - 21:58

Je suis à fond dans les fichiers Isam et passionné par cette implémentation à partir de Panoramic.
C'est super et encore merci Klaus. (Comme l'a dit Cosmos, tu es vraiment le roi ici)
Par contre, il y a encore quelques inconnues dont la logique m'échappe.
Il s'agit des clés qui si j'ai bien compris peuvent être "multi champs" d'où l'intérêt du truc
Je poste un petit prog qui renvoie le nombre de champs dans une clé, rien que pour voir si c'est oK pour la construction.
Il écrase les .DAT et .IX pour retester ce qui aura été écrit dans la définition des clés.
De plus, je n'ai pas de message d'erreur si ce n'est pas OK et les fichiers sont tronqués, voire inexistants pour l'extension .IX .

Je lis dans le PDF ceci :

dim def$, IsamID%
def$ = "3,30,5,80" : ' 3 champs de longueur 30, 5 et 80 caractères
res% = dll_call2("SetIsamFields",IsamID%,adr(def$))
def$ = "1,1,0,3" : ' clé 1: 1 seul champ, doublons non interdits, champ numéro 3     ???
res% = dll_call2("SetIsamFields",IsamID%,adr(def$))
def$ = "2,3,4,1,7" : ' clé 2: 3 champ,s doublons interdits, champ 4 suivi de champ 1 suivi de champ 7   ???
res% = dll_call2("SetIsamFields",IsamID%,adr(def$))

Je lis aussi dans KGF.chm ceci :

Cette fonction définit les champs d'une clé 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 numéros des champs composant la clé, dans l'ordre, séparées par des virgules.
Le premier élément de cette liste doit être le numéro de la clé.
Le deuxième élément est un indicateur pour l'unicité de la clé (doublons interdits).
Ensuite, il y a la liste des champs composant la clé. La liste contient donc n+2 éléments pour n champs. Le nombre de champs peut être entre 1 et 16.

Quelle est la façon de faire ?

Je reste persuadé qu'il y a une logique que m'échappe.
Par l'exemple et dans le fichier, la définition des clés en multi champs et la seule chose acceptée, en clé 2 d'où mon exemple.
Tout le reste est voué à l’échec, même un truc simple qui définit la première clé avec un champ 4 comme '1,0,4' est rejetée
Sauf erreur de ma part ou incompréhension, ce qui marche sans problème est  clé 1 "1,0,1"  + clé 2 "2,0,2" + ....et pareil pour les autres ce qui est déjà immense.

Voilà un grand message pour toi Klaus, pour que tu expliques et en tout cas merci car c'est géant ce que tu fais pour Panoramic.
Bonne soirée


Mike
Code:
dim err%, res%,
dim idsize%, Isam$, IsamID%, FName$, reclen%, rec$, cle$,rsize% ,fill$,v$,def$



 If file_exists("test_isam.DAT")= 1 then File_delete "test_isam.DAT"
 If file_exists("test_isam.IX")= 1 then File_delete "test_isam.IX"
 
Fname$ = "test_isam"
' trace_on "err.txt"


dll_on KGF.dll
GUI()
initisam()

end

sub InitIsam()

res% = dll_call0("InitIsam")
idsize% = dll_call0("GetIsamIdentifierSize")
Isam$ = string$(idsize%," ")
IsamID% = dll_call1("CreateIsamIdentifier",adr(Isam$))
if dll_call1("IsamFileExists",adr(Fname$))<0
' def$ = "3,30,5,80"
def$ = "8,10,20,30,40,15,10,30,25"
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%)
exit_sub
end_if

' *******************CLE 1***********************
def$ ="1,0,1" : ' clé 1: champ 1
' ***********************************************

res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
' res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$))
res% = dll_call0("GetIsamOk")
Text 13,res%
if res%<0
exit_sub
end_if
res% = dll_call2("GetIsamKeyFieldCount",IsamID%,1)
Text 11,res%

' ************************CLE 2******************
def$ = "2,0,2,6" : ' clé 2: champ 2 + champ 6
' ***********************************************

res% = dll_call2("SetIsamKeyFields",IsamID%,adr(def$)) : ' autoriser doublons
res% = dll_call0("GetIsamOk")
' def$=" "
if res%<0
res% = dll_call0("GetIsamError")
message "Erreur en définition de clé 2: "+str$(err%)
exit_sub
end_if
res% = dll_call2("GetIsamKeyFieldCount",IsamID%,2)
Text 12,res%
' print res%
' pause 1000

' **********************CLE 3**********************
def$ = "3,0,3" : ' clé 3: champ 3
' ************************************************


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é 2: "+str$(err%)
exit_sub
end_if

res% = dll_call2("GetIsamKeyFieldCount",IsamID%,3)

Text 13,res%

reclen% = dll_call1("GetIsamRecordLength",IsamID%)
res% = dll_call0("GetIsamError")
Text 14,reclen%


res% = dll_call2("CreateIsamFile",IsamID%,adr(FName$))
if res%<0
err% = dll_call0("GetIsamError")

print err%
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%)
exit_sub
end_if
else

res% = dll_call2("OpenIsamFile",IsamID%,adr(FName$))

if res%<0
print res%
res% = dll_call0("GetIsamError")
message "Erreur en ouverture: "+str$(res%)
exit_sub
end_if
end_if

if res%<0
message "erreur"
end_if

res% = dll_call0("FreeIsam")
end_sub



Sub GUI()
 width 0,800 : height 0,200
alpha 1 : top 1,10 : left 1,10 : caption 1,"Nb champs clé 1:"
alpha 2 : top 2,40 : left 2,10 : caption 2,"Nb champs clé 2:"
alpha 3 : top 3,70 : left 3,10 : caption 3,"Nb champs clé 3:"
alpha 4 : top 4,40 : left 4,220 : caption 4,"Longueur enr."
edit 11 : top 11,10 : left 11,100 : width 11,30
edit 12 : top 12,40 : left 12,100 : width 12,30
edit 13 : top 13,70 : left 13,100 : width 13,30
edit 14 : top 14,40 : left 14,300 : width 14,50

End_sub
Revenir en haut Aller en bas
Mike

Mike


Nombre de messages : 31
Age : 73
Localisation : NANCY
Date d'inscription : 12/06/2007

Isam quand tu nous tiens Empty
MessageSujet: Résolu   Isam quand tu nous tiens EmptyLun 21 Sep 2015 - 19:10

Problème résolu:
J'ai cherché un bon moment.
En fait, et c'est dit par Klaus dans les restrictions, une clé ne doit pas faire plus de 30 caractères. (mais je n'avais pas fait attention à cette ligne et la notion de 30 caractères pour une clé ne m'avait pas fait percuter)
Cela veut dire que l'on ne peux pas affecter une clé à un champ qui dépasse 30 caractères.
De même, pour construire une clé multichamps, il ne faut pas que la longueur totale des champs déclarés dans la clé dépasse 30 caractères.

exemple :
définition des champs = "4,5,5,20,40" . Soit 4 champs de 5;5,20 et 30 caractères
On peut écrire pour la définition des clés
"1,0,2,3" clé 1 avec champs 2 et 3 soit 25 caractères
"4,0,4" clé 4 avec champ 4 soit 30 caractères
Mais on ne peut pas écrire
"4,0,4,1" car champ 4 + champ 1 égalent 35 caractères

Sinon, tout fonctionne parfaitement si ce n'est que l'indicateur d'unicité s'inverse dans le .DAT,  mais c'est sûrement normal.

J'étais justement en train de faire un programme de gestion personnelle avec des fichiers texte mais je vais tout refondre maintenant car les temps d'accès devenaient prohibitifs.
J'espère que mes déboires pourront servir à d'autres car c'est aussi un des but du forum.

Bonne soirée à tous
Mike
Revenir en haut Aller en bas
Minibug

Minibug


Nombre de messages : 4566
Age : 57
Localisation : Vienne (86)
Date d'inscription : 09/02/2012

Isam quand tu nous tiens Empty
MessageSujet: Re: Isam quand tu nous tiens   Isam quand tu nous tiens EmptyLun 21 Sep 2015 - 19:21

Bonsoir Mike !

Je suis surpris que tu n'es pas eu de retour de Klaus ! Il est peut être actuellement occupé.
C'est vrai qu'il y a quelques jours il nous disait travailler sur un nouveau projet...

En tous cas tant mieux si tu as trouvé la solution ! cheers
Revenir en haut Aller en bas
http://gpp.panoramic.free.fr
Yannick




Nombre de messages : 8610
Age : 52
Localisation : Bretagne
Date d'inscription : 15/02/2010

Isam quand tu nous tiens Empty
MessageSujet: re   Isam quand tu nous tiens EmptyLun 21 Sep 2015 - 19:58

Klaus a dit qu' il le mettrai dans la doc mais je te le précise ici.
il y a une longueur minimale des champs.
Revenir en haut Aller en bas
Klaus

Klaus


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

Isam quand tu nous tiens Empty
MessageSujet: Re: Isam quand tu nous tiens   Isam quand tu nous tiens EmptyLun 21 Sep 2015 - 23:58

Citation :
Klaus a dit qu' il le mettrai dans la doc mais je te le précise ici.
il y a une longueur minimale des champs.
Pas tout à fait. Il y a une longueur minimale pour un enregistrement (21 caractères), pas pour un champ !

J'étais absent toute la journée, et je reprends le fil des discussions maintenant. Bravo à toi, Mike, d'avoir trouvé le fin mot de l'histoire !
Revenir en haut Aller en bas
http://klauspanoramic.comxa.com/index.html
Yannick




Nombre de messages : 8610
Age : 52
Localisation : Bretagne
Date d'inscription : 15/02/2010

Isam quand tu nous tiens Empty
MessageSujet: re   Isam quand tu nous tiens EmptyMar 22 Sep 2015 - 0:35

Effectivement, mon clavier à fourcher... Laughing
Revenir en haut Aller en bas
Contenu sponsorisé





Isam quand tu nous tiens Empty
MessageSujet: Re: Isam quand tu nous tiens   Isam quand tu nous tiens Empty

Revenir en haut Aller en bas
 
Isam quand tu nous tiens
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Panranoïa quand tu nous tiens...
» Bugs, quand tu nous tiens...
» Quand disposerons-nous de la fonction HEX$(n) ?
» ISAM toujours ISAM
» Éditeur de texte : Mini Word

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: