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
» Immortaliser les photos de famille
par Jean Claude Hier à 21:24

» Concours de Morpions
par jjn4 Hier à 16:34

» Tout est tranquille
par Jean Claude Ven 22 Sep 2017 - 21:41

» Texte en gif animé
par JL35 Ven 22 Sep 2017 - 13:29

» BasicEditor
par Yannick Mer 20 Sep 2017 - 17:17

» Simuler l’appui d'une touche ou combinaison de touches.
par pascal10000 Lun 18 Sep 2017 - 19:30

» Utilisation de HVIEWER pour afficher des images
par papydall Lun 18 Sep 2017 - 17:43

» Panoramic et les gifs animés.
par papydall Lun 18 Sep 2017 - 16:32

» recover source
par pascal10000 Dim 17 Sep 2017 - 14:21

» Recent dans vos menu
par Jean Claude Sam 16 Sep 2017 - 11:41

» Comment centrer un texte 3D.
par pascal10000 Ven 15 Sep 2017 - 20:20

» Carte interface 16 entrées et 16 sorties
par Jicehel Ven 15 Sep 2017 - 16:30

» Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT
par pascal10000 Ven 15 Sep 2017 - 16:20

» Compilateur FBPano
par jean_debord Ven 15 Sep 2017 - 9:59

» 1 (en analyse): 3D_TARGET_IS ne fonctionne pas sur 3D_TEXT
par Jack Jeu 14 Sep 2017 - 19:52

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Septembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier

Partagez | 
 

 Petit souci avec ISAM

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Yannick

avatar

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

MessageSujet: Petit souci avec ISAM   Sam 15 Aoû 2015 - 22:14

J' ai voulu faire un multi base pour combiner ISAM et BDR
Seulement si la première base est bien créée, les suivantes non et le resultat de isam_exists est curieux.
Code:
' PLM DATABASE
hide 0
application_title "PLM Database"
Variables_objets()
Variables_adresses()
Variables_database()
Variables_application()
Labels()
Init()
Gui()
show 0
end


' ##############################################################################
' DECLARATION DES VARIABLES OBJETS
' ##############################################################################

SUB Variables_objets()
   dim_local i%

   dim no%
   dim frame%   : no%=no%+1 : frame% =no%
   dim mm%      : no%=no%+1 : mm%    =no%
   dim sm%(20)  : for i%=1 to 20 : no%=no%+1 : sm%(i%)=no% : next i%
   dim table%   : no%=no%+1 : table% =no%
   dim feuil%(4): for i%=1 to 4  : no%=no%+1 : feuil%(i%)=no% : next i%
   dim grill%(4): for i%=1 to 4  : no%=no%+1 : grill%(i%)=no% : next i%
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES ADRESSES
' ##############################################################################

SUB Variables_adresses()
   dim kgf$ : kgf$="KGF.dll"
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES DATABASE
' ##############################################################################

SUB Variables_database()
   dim_local i%
   dim ISAM_vers$
   dim ISAM_IdentSize%
  
   dim ISAM_id%(4)

   dim Support_art$
   dim Support_mag$
   dim Support_rub$
   dim Support_aut$

   dim ISAM_nam_art$
   dim ISAM_nam_mag$
   dim ISAM_nam_rub$
   dim ISAM_nam_aut$
  
   dim ISAM_exist_art%
   dim ISAM_exist_mag%
   dim ISAM_exist_rub%
   dim ISAM_exist_aut%
  
   dim ISAM_RecLen_art%
   dim ISAM_RecLen_mag%
   dim ISAM_RecLen_rub%
   dim ISAM_RecLen_aut%
  
   dim ISAM_Record_art$
   dim ISAM_Record_mag$
   dim ISAM_Record_rub$
   dim ISAM_Record_aut$
  
   dim ISAM_NbRec_art%
   dim ISAM_NbRec_mag%
   dim ISAM_NbRec_rub%
   dim ISAM_NbRec_aut%
  
   dim inbase_art%
   dim inbase_mag%
   dim inbase_rub%
   dim inbase_aut%
  
   dim keyinbase_art%
   dim keyinbase_mag%
   dim keyinbase_rub%
   dim keyinbase_aut%
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES APPLICATION
' ##############################################################################

SUB Variables_application()
   dim nclic%
   dim nchange%
   dim ndclic%
   dim menudb%
END_SUB
' ##############################################################################
' DECLARATION DES LABELS
' ##############################################################################

SUB Labels()
   Label Clic
   Label Change
   Label DClic
   Label Vue
   Label Close
END_SUB
' ##############################################################################
' INITIALISATIONS
' ##############################################################################

SUB Init()
   dim_local res%,def$,defkey$,kgf_vers$,version%,a$,b$,i%
'  activation de kgf
   dll_on kgf$
   kgf_vers$= string$(25," ")
   version% = DLL_call1("KGFdllVersion",adr(kgf_vers$))

'  mise en place de l' environnement isam
   res% = dll_call0("InitIsam")
   ISAM_vers$ = string$(25," ")
   res% = dll_call1("GetIsamVersion",adr(ISAM_vers$))

'  définition/création/ouverture des bases de données
   ISAM_IdentSize% = dll_call0("GetIsamIdentifierSize")
'  ---BASE ARTICLES
   support_art$ = string$(ISAM_IdentSize%," ")
   ISAM_id%(1) = dll_call1("CreateIsamIdentifier",adr(support_art$))
   ISAM_nam_art$ =".\fic\Articles"
   ISAM_exist_art% = dll_call1("IsamFileExists",adr(ISAM_nam_art$))
   message "Base articles : "+str$(ISAM_exist_art% )
   if ISAM_exist_art% < 0
'     création des champs
      def$ = "5,6,4,3,3,255"
      res% = dll_call2("SetIsamFields",Isam_ID%(1),adr(def$))
'     création des clés
'     par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par mag
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par rubrique
      defkey$ = "3,0,3"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par auteur
      defkey$ = "4,0,4"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(1),adr(ISAM_nam_art$))
   else
'     ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(1),adr(ISAM_nam_art$))
   end_if
'  ---BASE MAG
   support_mag$ = string$(ISAM_IdentSize%," ")
   ISAM_id%(2) = dll_call1("CreateIsamIdentifier",adr(support_mag$))
   ISAM_nam_mag$ =".\fic\Mags"
   ISAM_exist_mag% = dll_call1("IsamFileExists",adr(ISAM_nam_mag$))
   message "Base mags : "+str$(ISAM_exist_mag%)
   if ISAM_exist_mag% < 0
'     création des champs
      def$ = "2,4,8"
      res% = dll_call2("SetIsamFields",Isam_ID%(2),adr(def$))
'     création des clés
'     par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(2),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par mag
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(2),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(2),adr(ISAM_nam_mag$))
   else
'     ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(2),adr(ISAM_nam_mag$))
   end_if
'  ---BASE RUBRIQUES
   support_rub$ = string$(ISAM_IdentSize%," ")
   ISAM_id%(3) = dll_call1("CreateIsamIdentifier",adr(support_rub$))
   ISAM_nam_rub$ =".\fic\Rubriques"
   ISAM_exist_rub% = dll_call1("IsamFileExists",adr(ISAM_nam_rub$))
   message "Base rubriques : "+str$(ISAM_exist_rub%)
   if ISAM_exist_rub% < 0
'     création des champs
      def$ = "2,4,8"
      res% = dll_call2("SetIsamFields",Isam_ID%(3),adr(def$))
'     création des clés
'     par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(3),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par rubrique
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(3),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(3),adr(ISAM_nam_rub$))
   else
'     ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(3),adr(ISAM_nam_rub$))
   end_if
'  ---BASE AUTEURS
   support_aut$ = string$(ISAM_IdentSize%," ")
   ISAM_id%(4) = dll_call1("CreateIsamIdentifier",adr(support_aut$))
   ISAM_nam_aut$ =".\fic\Auteurs"
   ISAM_exist_aut% = dll_call1("IsamFileExists",adr(ISAM_nam_aut$))
   message "Base auteurs : "+str$(ISAM_exist_aut%)
   if ISAM_exist_aut% < 0
'     création des champs
      def$ = "2,4,8"
      res% = dll_call2("SetIsamFields",Isam_ID%(4),adr(def$))
'     création des clés
'     par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(4),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     par rubrique
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(4),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'     création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(4),adr(ISAM_nam_aut$))
   else
'     ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(4),adr(ISAM_nam_aut$))
   end_if
  
'  récupération de la longueur des enregistrements
   ISAM_RecLen_art% = dll_call1("GetIsamRecordLength",Isam_ID%(1))
   ISAM_record_art$ = string$(ISAM_RecLen_art%," ")
  
   ISAM_RecLen_mag% = dll_call1("GetIsamRecordLength",Isam_ID%(2))
   ISAM_record_mag$ = string$(ISAM_RecLen_mag%," ")
  
   ISAM_RecLen_rub% = dll_call1("GetIsamRecordLength",Isam_ID%(3))
   ISAM_record_rub$ = string$(ISAM_RecLen_rub%," ")
  
   ISAM_RecLen_aut% = dll_call1("GetIsamRecordLength",Isam_ID%(4))
   ISAM_record_aut$ = string$(ISAM_RecLen_aut%," ")
  
'  récupération du nombre d' enregistrements dans chaque base
   inbase_art% = dll_call1("GetIsamRecordCount",Isam_ID%(1))
   inbase_mag% = dll_call1("GetIsamRecordCount",Isam_ID%(2))
   inbase_rub% = dll_call1("GetIsamRecordCount",Isam_ID%(3))
   inbase_aut% = dll_call1("GetIsamRecordCount",Isam_ID%(4))
  
'  recup du nombre de clés dans chaque base
   keyinbase_art% = dll_call1("GetIsamKeyCount",Isam_ID%(1))
   keyinbase_mag% = dll_call1("GetIsamKeyCount",Isam_ID%(2))
   keyinbase_rub% = dll_call1("GetIsamKeyCount",Isam_ID%(3))
   keyinbase_aut% = dll_call1("GetIsamKeyCount",Isam_ID%(4))
  
END_SUB
' ##############################################################################
' INTERFACE UTILISATEUR
' ##############################################################################

SUB Gui()
   dim_local i%
'  definition de la fenêtre principale
   height 0,500
   width 0,850
   top 0,(screen_y-height(0))/2
   left 0,(screen_x-width(0))/2
   font_name 0,"arial"
   font_size 0,8
   caption 0,"PLM Database"
   on_close 0,close
'  création du main_menu
   main_menu mm%
   sub_menu sm%(1) : parent sm%(1),mm% : caption sm%(1),"Ajouter"  : on_click sm%(1),clic
   sub_menu sm%(2) : parent sm%(2),mm% : caption sm%(2),"Modifier" : on_click sm%(2),clic
   sub_menu sm%(3) : parent sm%(3),mm% : caption sm%(3),"Supprimer": on_click sm%(3),clic
'  création du classeur pour les tables
   container_tab table%
   full_space table%
   for i%=1 to 4
      tab feuil%(i%)
      parent feuil%(i%),table%
      on_show feuil%(i%),vue
   next i%
   caption feuil%(1),"Articles"
   caption feuil%(2),"Mags"
   caption feuil%(3),"Rubriques"
   caption feuil%(4),"Auteurs"
'  création des tableurs recevant les tables
   for i%=1 to 4
      grid grill%(i%)
      parent grill%(i%),feuil%(i%)
      full_space grill%(i%)
      grid_column_fixed grill%(i%),0.01
      grid_fixed_color grill%(i%),110,180,110
      grid_row grill%(i%),2
   next i%
   grid_column grill%(1),5
   grid_one_column_width grill%(1),5,540
   for i%= 2 to 4
      grid_column grill%(i%),2
      grid_one_column_width grill%(i%),2,736
   next i%
   grid_write grill%(1),1,1,"N° Article"
   grid_write grill%(1),1,2,"Mag"
   grid_write grill%(1),1,3,"Rubrique"
   grid_write grill%(1),1,4,"Auteur"
   grid_write grill%(1),1,5,"Titre"
   grid_write grill%(2),1,1,"ID"
   grid_write grill%(2),1,2,"Mag"
   grid_write grill%(3),1,1,"ID"
   grid_write grill%(3),1,2,"Rubrique"
   grid_write grill%(4),1,1,"N° Article"
   grid_write grill%(4),1,2,"Auteur"
END_SUB
' ##############################################################################
' MENUS
' ##############################################################################

Clic:
return

Change:
return

DClic:
return

Vue:
return

Close:
return
' ##############################################################################
' FONCTIONS ET PROCEDURES
' ##############################################################################

SUB Quitter()
   dim_local fin%,i%
  
   for i%=1 to 4
      fin% = dll_call1("IsamFileIsOpen",Isam_ID%(i%))
      if fin%=0
         fin% = dll_call1("CloseIsamFile",Isam_ID%(i%))
      end_if
   next i%
   fin% = dll_call0("FreeIsam")
   fin% = dll_call1("KillProcessByHandle",handle(0))
END_SUB

' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SUB MessageErreur(e%)
  dim_local a$,i%
  i%=e%*-1
  select i%
  case 1 : a$="[1] La chaîne de définition es incohérente"
  case 2 : a$="[2] Le numéro de la clé est non numérique"
  case 3 : a$="[3] Le nombre de clés est invalide (<1 ou >(nombre de clés)+1))"
  case 4 : a$="[4] Le flag ''pas de doublons'' est non numérique"
  case 5 : a$="[5] Un numéro de champ est non numérique"
  case 6 : a$="[6] Un numéro de champ est invalide (<1 ou >(nombre de champ))"
  case 7 : a$="[7] Clé > 30 caractères"
  end_select
  message str$(res%)+chr$(13)+a$
END_SUB
( dossier complet sur mon webdav : ISAM with BDR.zip)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Petit souci avec ISAM   Dim 16 Aoû 2015 - 0:38

J'ai trouvé. Sauf pour le premier fichier, tu fais des enregistrements trop courts. Il faut au moins une vingtaine de caractères, quitte à ajouter un champ bidon d'une dizaine caractères à la fin, et ce même si ce champ n'est jamais renseigné.

Mais tu aurais pu le trouver en appelant GetIsamOK après chaque CreateIsamFile,ce que tu n'as pas fait, et tu n'as donc pas vu que le fichier n'était pas créé. Pour les trois derniers fichiers, CreateIsamFile retournait -1. Il faut alors appeler GetIsamError pour avoir le code erreur réel, dans notre cas, 10020 ce qui signifie "longueur d'enregistrement invalide".

Voici ton code avec l'ajout de ces tests d'erreur (en force brute, pas habillé avec des procédures):
Code:
' PLM DATABASE
hide 0
application_title "PLM Database"
Variables_objets()
Variables_adresses()
Variables_database()
Variables_application()
Labels()
Init()
Gui()
show 0
end


' ##############################################################################
' DECLARATION DES VARIABLES OBJETS
' ##############################################################################

SUB Variables_objets()
  dim_local i%

  dim no%
  dim frame%  : no%=no%+1 : frame% =no%
  dim mm%      : no%=no%+1 : mm%    =no%
  dim sm%(20)  : for i%=1 to 20 : no%=no%+1 : sm%(i%)=no% : next i%
  dim table%  : no%=no%+1 : table% =no%
  dim feuil%(4): for i%=1 to 4  : no%=no%+1 : feuil%(i%)=no% : next i%
  dim grill%(4): for i%=1 to 4  : no%=no%+1 : grill%(i%)=no% : next i%
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES ADRESSES
' ##############################################################################

SUB Variables_adresses()
  dim kgf$ : kgf$="KGF.dll"
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES DATABASE
' ##############################################################################

SUB Variables_database()
  dim_local i%
  dim ISAM_vers$
  dim ISAM_IdentSize%

  dim ISAM_id%(4)

  dim Support_art$
  dim Support_mag$
  dim Support_rub$
  dim Support_aut$

  dim ISAM_nam_art$
  dim ISAM_nam_mag$
  dim ISAM_nam_rub$
  dim ISAM_nam_aut$

  dim ISAM_exist_art%
  dim ISAM_exist_mag%
  dim ISAM_exist_rub%
  dim ISAM_exist_aut%

  dim ISAM_RecLen_art%
  dim ISAM_RecLen_mag%
  dim ISAM_RecLen_rub%
  dim ISAM_RecLen_aut%

  dim ISAM_Record_art$
  dim ISAM_Record_mag$
  dim ISAM_Record_rub$
  dim ISAM_Record_aut$

  dim ISAM_NbRec_art%
  dim ISAM_NbRec_mag%
  dim ISAM_NbRec_rub%
  dim ISAM_NbRec_aut%

  dim inbase_art%
  dim inbase_mag%
  dim inbase_rub%
  dim inbase_aut%

  dim keyinbase_art%
  dim keyinbase_mag%
  dim keyinbase_rub%
  dim keyinbase_aut%
END_SUB
' ##############################################################################
' DECLARATION DES VARIABLES APPLICATION
' ##############################################################################

SUB Variables_application()
  dim nclic%
  dim nchange%
  dim ndclic%
  dim menudb%
END_SUB
' ##############################################################################
' DECLARATION DES LABELS
' ##############################################################################

SUB Labels()
  Label Clic
  Label Change
  Label DClic
  Label Vue
  Label Close
END_SUB
' ##############################################################################
' INITIALISATIONS
' ##############################################################################

SUB Init()
  dim_local res%,def$,defkey$,kgf_vers$,version%,a$,b$,i%
'  activation de kgf
  dll_on kgf$
  kgf_vers$= string$(25," ")
  version% = DLL_call1("KGFdllVersion",adr(kgf_vers$))

'  mise en place de l' environnement isam
  res% = dll_call0("InitIsam")
  ISAM_vers$ = string$(25," ")
  res% = dll_call1("GetIsamVersion",adr(ISAM_vers$))

'  définition/création/ouverture des bases de données
  ISAM_IdentSize% = dll_call0("GetIsamIdentifierSize")
'  ---BASE ARTICLES
  support_art$ = string$(ISAM_IdentSize%," ")
  ISAM_id%(1) = dll_call1("CreateIsamIdentifier",adr(support_art$))
  ISAM_nam_art$ =".\fic\Articles"
  ISAM_exist_art% = dll_call1("IsamFileExists",adr(ISAM_nam_art$))
  message "Base articles : "+str$(ISAM_exist_art% )
  if ISAM_exist_art% < 0
'    création des champs
      def$ = "5,6,4,3,3,255"
      res% = dll_call2("SetIsamFields",Isam_ID%(1),adr(def$))
'    création des clés
'    par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par mag
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par rubrique
      defkey$ = "3,0,3"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par auteur
      defkey$ = "4,0,4"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(1),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(1),adr(ISAM_nam_art$))
  else
'    ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(1),adr(ISAM_nam_art$))
  end_if
'  ---BASE MAG
  support_mag$ = string$(ISAM_IdentSize%," ")
  ISAM_id%(2) = dll_call1("CreateIsamIdentifier",adr(support_mag$))
  ISAM_nam_mag$ =".\fic\Mags"
  ISAM_exist_mag% = dll_call1("IsamFileExists",adr(ISAM_nam_mag$))
  message "Base mags : "+str$(ISAM_exist_mag%)
  if ISAM_exist_mag% < 0
'    création des champs
      def$ = "2,4,8"        : ' <======= ici, enregistrement trop court !
      res% = dll_call2("SetIsamFields",Isam_ID%(2),adr(def$))
'    création des clés
'    par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(2),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par mag
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(2),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(2),adr(ISAM_nam_mag$))
      ' <========== ici, il aurait fallu traiter l'erreur:
      res% = dll_call0("GetIsamOk")
      if res%<0
        if res%=-1
          res% = dll_call0("GetIsamError")
          message "MAG: Erreur en création: "+str$(res%)
        end_if
        if res%=-2
          res% = dll_call0("GetIsamError")
          message "MAG: Erreur en réouverture: "+str$(res%)
        end_if
      end_if
  else
'    ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(2),adr(ISAM_nam_mag$))
  end_if
'  ---BASE RUBRIQUES
  support_rub$ = string$(ISAM_IdentSize%," ")
  ISAM_id%(3) = dll_call1("CreateIsamIdentifier",adr(support_rub$))
  ISAM_nam_rub$ =".\fic\Rubriques"
  ISAM_exist_rub% = dll_call1("IsamFileExists",adr(ISAM_nam_rub$))
  message "Base rubriques : "+str$(ISAM_exist_rub%)
  if ISAM_exist_rub% < 0
'    création des champs
      def$ = "2,4,8"        : ' <======= ici, enregistrement trop court !
      res% = dll_call2("SetIsamFields",Isam_ID%(3),adr(def$))
'    création des clés
'    par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(3),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par rubrique
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(3),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(3),adr(ISAM_nam_rub$))
      ' <========== ici, il aurait fallu traiter l'erreur:
      res% = dll_call0("GetIsamOk")
      if res%<0
        if res%=-1
          res% = dll_call0("GetIsamError")
          message "RUBRIQUES: Erreur en création: "+str$(res%)
        end_if
        if res%=-2
          res% = dll_call0("GetIsamError")
          message "RUBRIQUES: Erreur en réouverture: "+str$(res%)
        end_if
      end_if
  else
'    ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(3),adr(ISAM_nam_rub$))
  end_if
'  ---BASE AUTEURS
  support_aut$ = string$(ISAM_IdentSize%," ")
  ISAM_id%(4) = dll_call1("CreateIsamIdentifier",adr(support_aut$))
  ISAM_nam_aut$ =".\fic\Auteurs"
  ISAM_exist_aut% = dll_call1("IsamFileExists",adr(ISAM_nam_aut$))
  message "Base auteurs : "+str$(ISAM_exist_aut%)
  if ISAM_exist_aut% < 0
'    création des champs
      def$ = "2,4,8"        : ' <======= ici, enregistrement trop court !
      res% = dll_call2("SetIsamFields",Isam_ID%(4),adr(def$))
'    création des clés
'    par id
      defkey$ = "1,1,1"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(4),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    par rubrique
      defkey$ = "2,0,2"
      res% = dll_call2("SetIsamKeyFields",Isam_ID%(4),adr(defkey$))
      res% = dll_call0("GetIsamOk")
      if res%<0 : MessageErreur(res%) : end_if
'    création des fichiers ISAM
      res% = dll_call2("CreateIsamFile",Isam_ID%(4),adr(ISAM_nam_aut$))
      ' <========== ici, il aurait fallu traiter l'erreur:
      res% = dll_call0("GetIsamOk")
      if res%<0
        if res%=-1
          res% = dll_call0("GetIsamError")
          message "AUTEURS: Erreur en création: "+str$(res%)
        end_if
        if res%=-2
          res% = dll_call0("GetIsamError")
          message "AUTEURS: Erreur en réouverture: "+str$(res%)
        end_if
      end_if
  else
'    ouverture de la base
      res% = dll_call2("OpenIsamFile",Isam_ID%(4),adr(ISAM_nam_aut$))
  end_if

'  récupération de la longueur des enregistrements
  ISAM_RecLen_art% = dll_call1("GetIsamRecordLength",Isam_ID%(1))
  ISAM_record_art$ = string$(ISAM_RecLen_art%," ")

  ISAM_RecLen_mag% = dll_call1("GetIsamRecordLength",Isam_ID%(2))
  ISAM_record_mag$ = string$(ISAM_RecLen_mag%," ")

  ISAM_RecLen_rub% = dll_call1("GetIsamRecordLength",Isam_ID%(3))
  ISAM_record_rub$ = string$(ISAM_RecLen_rub%," ")

  ISAM_RecLen_aut% = dll_call1("GetIsamRecordLength",Isam_ID%(4))
  ISAM_record_aut$ = string$(ISAM_RecLen_aut%," ")

'  récupération du nombre d' enregistrements dans chaque base
  inbase_art% = dll_call1("GetIsamRecordCount",Isam_ID%(1))
  inbase_mag% = dll_call1("GetIsamRecordCount",Isam_ID%(2))
  inbase_rub% = dll_call1("GetIsamRecordCount",Isam_ID%(3))
  inbase_aut% = dll_call1("GetIsamRecordCount",Isam_ID%(4))

'  recup du nombre de clés dans chaque base
  keyinbase_art% = dll_call1("GetIsamKeyCount",Isam_ID%(1))
  keyinbase_mag% = dll_call1("GetIsamKeyCount",Isam_ID%(2))
  keyinbase_rub% = dll_call1("GetIsamKeyCount",Isam_ID%(3))
  keyinbase_aut% = dll_call1("GetIsamKeyCount",Isam_ID%(4))

END_SUB
' ##############################################################################
' INTERFACE UTILISATEUR
' ##############################################################################

SUB Gui()
  dim_local i%
'  definition de la fenêtre principale
  height 0,500
  width 0,850
  top 0,(screen_y-height(0))/2
  left 0,(screen_x-width(0))/2
  font_name 0,"arial"
  font_size 0,8
  caption 0,"PLM Database"
  on_close 0,close
'  création du main_menu
  main_menu mm%
  sub_menu sm%(1) : parent sm%(1),mm% : caption sm%(1),"Ajouter"  : on_click sm%(1),clic
  sub_menu sm%(2) : parent sm%(2),mm% : caption sm%(2),"Modifier" : on_click sm%(2),clic
  sub_menu sm%(3) : parent sm%(3),mm% : caption sm%(3),"Supprimer": on_click sm%(3),clic
'  création du classeur pour les tables
  container_tab table%
  full_space table%
  for i%=1 to 4
      tab feuil%(i%)
      parent feuil%(i%),table%
      on_show feuil%(i%),vue
  next i%
  caption feuil%(1),"Articles"
  caption feuil%(2),"Mags"
  caption feuil%(3),"Rubriques"
  caption feuil%(4),"Auteurs"
'  création des tableurs recevant les tables
  for i%=1 to 4
      grid grill%(i%)
      parent grill%(i%),feuil%(i%)
      full_space grill%(i%)
      grid_column_fixed grill%(i%),0.01
      grid_fixed_color grill%(i%),110,180,110
      grid_row grill%(i%),2
  next i%
  grid_column grill%(1),5
  grid_one_column_width grill%(1),5,540
  for i%= 2 to 4
      grid_column grill%(i%),2
      grid_one_column_width grill%(i%),2,736
  next i%
  grid_write grill%(1),1,1,"N° Article"
  grid_write grill%(1),1,2,"Mag"
  grid_write grill%(1),1,3,"Rubrique"
  grid_write grill%(1),1,4,"Auteur"
  grid_write grill%(1),1,5,"Titre"
  grid_write grill%(2),1,1,"ID"
  grid_write grill%(2),1,2,"Mag"
  grid_write grill%(3),1,1,"ID"
  grid_write grill%(3),1,2,"Rubrique"
  grid_write grill%(4),1,1,"N° Article"
  grid_write grill%(4),1,2,"Auteur"
END_SUB
' ##############################################################################
' MENUS
' ##############################################################################

Clic:
return

Change:
return

DClic:
return

Vue:
return

Close:
return
' ##############################################################################
' FONCTIONS ET PROCEDURES
' ##############################################################################

SUB Quitter()
  dim_local fin%,i%

  for i%=1 to 4
      fin% = dll_call1("IsamFileIsOpen",Isam_ID%(i%))
      if fin%=0
        fin% = dll_call1("CloseIsamFile",Isam_ID%(i%))
      end_if
  next i%
  fin% = dll_call0("FreeIsam")
  fin% = dll_call1("KillProcessByHandle",handle(0))
END_SUB

' ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

SUB MessageErreur(e%)
  dim_local a$,i%
  i%=e%*-1
  select i%
  case 1 : a$="[1] La chaîne de définition es incohérente"
  case 2 : a$="[2] Le numéro de la clé est non numérique"
  case 3 : a$="[3] Le nombre de clés est invalide (<1 ou >(nombre de clés)+1))"
  case 4 : a$="[4] Le flag ''pas de doublons'' est non numérique"
  case 5 : a$="[5] Un numéro de champ est non numérique"
  case 6 : a$="[6] Un numéro de champ est invalide (<1 ou >(nombre de champ))"
  case 7 : a$="[7] Clé > 30 caractères"
  end_select
  message str$(res%)+chr$(13)+a$
END_SUB

Et si tu remplaces les 3 occurrences de
Code:
'    création des champs
      def$ = "2,4,8"        : ' <======= ici, enregistrement trop court !
      res% = dll_call2("SetIsamFields",Isam_ID%(4),adr(def$))
par
Code:
'    création des champs
      def$ = "3,4,8,10"        : ' <======= ici, enregistrement trop court !
      res% = dll_call2("SetIsamFields",Isam_ID%(4),adr(def$))
il n'y a plus d'erreur et tes fichiers sont créés.

Je vais analyser la doc et ajouter la mise en garde nécessaire si elle manque.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

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

MessageSujet: re   Dim 16 Aoû 2015 - 0:44

cheers Ok Klaus, merci.
Il serait bon, en effet, de mettre la longueur minimal d' un enregistrement dans la doc.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: Petit souci avec ISAM   Dim 16 Aoû 2015 - 1:24

C'est fait. Nouvelle version de KGF.dll, créant un code erreur -6 pour la fonction SetIsamFields indiquant "enregistrement trop court". La doc est corrigé dans la page d'introduction (pour les contraintes) et dans la page de la fonction concernée. Les sources et la doc en ligne sont à jour également.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé




MessageSujet: Re: Petit souci avec ISAM   

Revenir en haut Aller en bas
 
Petit souci avec ISAM
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Souci avec un script effet 'spoiler' sur la PA
» Petit probleme avec la couleur de plusieurs liens
» Catégorie rétractable : petit souci.
» petit problème avec ce Java Script
» Souci avec un code

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: