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
» KGF_dll - nouvelles versions
par pascal10000 Aujourd'hui à 13:15

» Casse-tête : Echanger les positions des cavaliers
par jean_debord Aujourd'hui à 10:21

» demande pour recuperer un text speciale
par silverman Hier à 23:00

» Amélioration de la commande HINT
par papydall Mer 19 Juil 2017 - 3:30

» TEST SUR SHAPE
par papydall Mer 19 Juil 2017 - 1:17

» Un challenge à relever
par papydall Mar 18 Juil 2017 - 21:25

» Astuce : Indenter plusieurs lignes de code à la fois
par papydall Mar 18 Juil 2017 - 1:32

» Suggestion pour le forum
par papydall Lun 17 Juil 2017 - 20:28

» Truver les handles des onglets de Panoramic Editor
par Klaus Lun 17 Juil 2017 - 18:20

» Synedit_Editor - nouvelles versions
par Klaus Lun 17 Juil 2017 - 13:46

» Détermine si oui ou non un objet est PARENT d'un autre objet
par Klaus Dim 16 Juil 2017 - 11:58

» Une autre façon de terminer une application.
par papydall Dim 16 Juil 2017 - 3:53

» Déterminer le Handle de l’objet ayant le focus
par papydall Dim 16 Juil 2017 - 3:15

» Déterminer le HANDLE du Bureau
par papydall Dim 16 Juil 2017 - 1:59

» Généralisation de a fonction OBJECT_INTERNAL
par Klaus Dim 16 Juil 2017 - 1:10

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Juillet 2017
LunMarMerJeuVenSamDim
     12
3456789
10111213141516
17181920212223
24252627282930
31      
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 : 7930
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 : 10061
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 : 7930
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 : 10061
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: