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
» mise a jour calculatrice
par joeeee2017 Aujourd'hui à 22:44

» Logiciel de soutien scolaire en langues.
par Pedro Alvarez Aujourd'hui à 16:52

» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 14:16

» Compilateur FBPano
par Ouf_ca_passe Aujourd'hui à 12:25

» double guillemets "" dans un EDIT
par Marc Hier à 23:43

» Documentation de KGF
par Klaus Lun 20 Nov 2017 - 22:52

» Zoom sur une portion d'écran
par JL35 Lun 20 Nov 2017 - 21:51

» Recherche d'une expression dans un source
par Marc Lun 20 Nov 2017 - 13:08

» Tracer une grille n'importe où sur l'écran
par JL35 Dim 19 Nov 2017 - 22:14

» TourD Version 2
par Klaus Sam 18 Nov 2017 - 23:58

» La métamatière et le peuple
par JL35 Ven 17 Nov 2017 - 21:18

» Capture d'une zone de l'écran total
par JL35 Ven 17 Nov 2017 - 18:41

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

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

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

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

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

Partagez | 
 

 Petit souci avec ISAM

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

avatar

Nombre de messages : 7997
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 En ligne
Klaus

avatar

Nombre de messages : 10129
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 : 7997
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 En ligne
Klaus

avatar

Nombre de messages : 10129
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
-
» [résolu]Petit souci avec Avast pour le pare-feu : que faire pour éviter ces messages ?
» [Résolu] Aide... j'ai un souci avec mon PC
» Souci avec mon album photo
» Souci avec la nouvelle MAJ Firefox
» trop petit overclocking avec i7 920 sur Rampage gene 2

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