Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Petit souci avec ISAM | |
| | Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Petit souci avec ISAM Sam 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) | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit souci avec ISAM Sam 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. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 15 Aoû 2015 - 23:44 | |
| Ok Klaus, merci. Il serait bon, en effet, de mettre la longueur minimal d' un enregistrement dans la doc. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Petit souci avec ISAM Dim 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. | |
| | | Contenu sponsorisé
| Sujet: Re: Petit souci avec ISAM | |
| |
| | | | Petit souci avec ISAM | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |