FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Gestion d'un système client-serveur.
Petit souci avec ISAM Emptypar Pedro Aujourd'hui à 8:06

» Bataille terrestre
Petit souci avec ISAM Emptypar Marc Hier à 16:20

» item_index
Petit souci avec ISAM Emptypar Marc Hier à 16:13

» SineCube
Petit souci avec ISAM Emptypar Marc Sam 11 Mai 2024 - 12:38

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Petit souci avec ISAM Emptypar Marc Sam 11 Mai 2024 - 12:22

» Philharmusique
Petit souci avec ISAM Emptypar jjn4 Ven 10 Mai 2024 - 13:58

» PANORAMIC V 1
Petit souci avec ISAM Emptypar papydall Jeu 9 Mai 2024 - 3:22

» select intégrés [résolu]
Petit souci avec ISAM Emptypar jjn4 Mer 8 Mai 2024 - 17:00

» number_mouse_up
Petit souci avec ISAM Emptypar jjn4 Mer 8 Mai 2024 - 11:59

» Aide de PANORAMIC
Petit souci avec ISAM Emptypar jjn4 Mer 8 Mai 2024 - 11:16

» trop de fichiers en cours
Petit souci avec ISAM Emptypar lepetitmarocain Mer 8 Mai 2024 - 10:43

» Je teste PANORAMIC V 1 beta 1
Petit souci avec ISAM Emptypar papydall Mer 8 Mai 2024 - 4:17

» bouton dans autre form que 0
Petit souci avec ISAM Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Petit souci avec ISAM Emptypar Klaus Lun 6 Mai 2024 - 11:41

» @Jack
Petit souci avec ISAM Emptypar Jack Mar 30 Avr 2024 - 20:40

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-45%
Le deal à ne pas rater :
WHIRLPOOL OWFC3C26X – Lave-vaisselle pose libre 14 couverts – ...
339 € 622 €
Voir le deal

 

 Petit souci avec ISAM

Aller en bas 
2 participants
AuteurMessage
Yannick




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

Petit souci avec ISAM Empty
MessageSujet: Petit souci avec ISAM   Petit souci avec ISAM EmptySam 15 Aoû 2015 - 21: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
Klaus

Klaus


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

Petit souci avec ISAM Empty
MessageSujet: Re: Petit souci avec ISAM   Petit souci avec ISAM EmptySam 15 Aoû 2015 - 23: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
http://klauspanoramic.comxa.com/index.html
Yannick




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

Petit souci avec ISAM Empty
MessageSujet: re   Petit souci avec ISAM EmptySam 15 Aoû 2015 - 23: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
Klaus

Klaus


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

Petit souci avec ISAM Empty
MessageSujet: Re: Petit souci avec ISAM   Petit souci avec ISAM EmptyDim 16 Aoû 2015 - 0: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
http://klauspanoramic.comxa.com/index.html
Contenu sponsorisé





Petit souci avec ISAM Empty
MessageSujet: Re: Petit souci avec ISAM   Petit souci avec ISAM Empty

Revenir en haut Aller en bas
 
Petit souci avec ISAM
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Souci avec ISAM
» petit souci avec une dim_local
» KGF_dll - nouvelles versions
» ISAM toujours ISAM
» WebBrowser sur une form Panoramic !

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: