Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Base de données relationnelle Ven 3 Oct 2014 - 8:26 | |
| Salut Mike, C'est un très bon début, et l’esthétique est soignée. - Mike a écrit:
- -Comment interdire dans un list le message d’erreur « out of bounds » et par conséquent le plantage du programme si le list dépasse en taille le nombre d’items ?? Cette question découle de la première.
Pour ne pas compliquer trop vite, je te réponds sur ce problème uniquement Dans le code ci-dessous, j'ai déclaré la variable index_list% pour contrôler le click du LIST 2. Je te laisse le soins de pister cette variable (par la recherche du menu édition) Je t'ai mis des commentaires pour que tu puisses comprendre la démarche. Il faudra ensuite que tu termines le travail en groupant tous les ON_CLICK des LIST(s) au label gestion_click_list. J'ai commencer une remise en forme du code, sans le modifier, pour regrouper et avoir moins de ligne. Une remarque: une grande partie du code peut être regroupé dans des procédures (SUB), je ne l'ai pas fait (chaque chose en son temps) En tous cas, Bravo. - Code:
-
dim taille1,taille2,taille3,taille4,pix,ind$ dim a1$,c1$,e1$,f1$,e1%,i1,b1,c1 dim a2$,c2$,e2$,f2$,e2%,i2,b2,c2 dim a3$,c3$,e3$,f3$,e3%,i3,b3,c3 dim a4$,c4$,e4$,f4$,e4%,i4,b4,gog$ dim long%,nom$,x$, max_t%, chemin$,compt, ext$,ht_max,goog$,i%,i$ dim index_list% :' pour controler le click dans un list application_title "Base de données relationnelle" pix=17.5 ext$=".txt" ht_max= screen_y-250 dir_change "FIC" label save1, create1, suppression1, save2, create2, suppression2, create3, save3, suppression3 label save4, suppression4,create4,create41, pano label supniv1,supniv2,supniv3,max_taille,chemin,compt label gestion_click_list :' pour grouper tout les click(s) des list left 0,250 : top 0,1 : width 0,900 : color 0,214,220,220 caption 0,"Base de données relationnelle" border_small 0
dlist 20 ' edit 1 edit 1 : left 1,10 : top 1,58 : width 1,180 : font_name 1,"arial" font_size 1,10 : color 1,247,250,228 hint 1,"Entrez votre nouvel article ici et validez-le au dessus" ' edit 3 edit 3 : left 3,210 : top 3,58 : width 3,180 : font_name 3,"arial" font_size 3,10 : color 3,247,250,228 hint 3,"Entrez votre nouvel article ici et validez-le au dessus" hide 3 ' edit 5 edit 5 : left 5,410 : top 5,58 : width 5,180 : font_name 5,"arial" font_size 5,10 : color 5,245,250,228 hint 5,"Entrez votre nouvel article ici et validez-le au dessus" hide 5 ' edit 7 edit 7 : left 7,200 : top 7,8 : width 7,180 font_name 7,"arial" : font_size 7,8 hide 7 ' edit 9 edit 9 : left 9,410 : top 9,8 : width 9,180 font_name 9,"arial" :font_size 9,8 hide 9 ' edit 11 edit 11 : left 11,610 : top 11,58 : width 11,220 font_name 11,"arial" : font_size 11,10 : color 11,245,250,228 hint 11,"Entrez votre nouvel article ici et validez-le au dessus" hide 11 ' edit 13 edit 13 : left 13,610 : top 13,8 : width 13,180 font_name 13,"arial" : font_size 13,8 hide 13
' alpha 15 alpha 15 : left 15,1 : top 15,1 : width 15,30 font_name 15,"arial" : font_size 15,8 hint 15, "nombre d'articles dans la base" ' alpha 16 alpha 16 : top 16,8 : left 16,200 font_name 16,"comics sans ms" : font_size 16,10 ' alpha 17 alpha 17 : left 17,520 : font_name 17,"Papyrus" : Font_size 17,7 : font_color 17,10,118,241 caption 17, "Powered by Panoramic - http://panoramic-language.pagesperso-orange.fr/index.html" on_click 17,pano hide 17 ' alpha 18 alpha 18 : left 18,710 : font_name 18,"arial" : font_size 18,8
list 2 : left 2,10 : top 2,83 : width 2,180 color 2,216,246,248 : font_name 2,"arial" : font_size 2,9 x$="racine"+ext$ if file_exists(x$) =0 file_open_write 102,x$ file_close 102 end_if file_load 2,"racine"+ext$ file_hide "racine"+ext$ c1=count(2) taille1 = c1*pix height 2,taille1
list 4 left 4,210 top 4,83 width 4,180 font_name 4,"arial" font_size 4,9 color 4,213,248,249 hide 4 on_click 4, create2
list 6 left 6,410 top 6,83 width 6,180 font_name 6,"arial" font_size 6,9 color 6,213,248,249 on_click 6, create3 hide 6
list 8 left 8,610 top 8,83 width 8,220 font_name 8,"arial" font_size 8,9 color 8,213,248,249 on_click 8,create41 on_double_click 8,create4 hide 8 button 50 left 50,10 width 50,180 top 50, 33 ' font_bold 50 caption 50, "Ajouter l'article ci-dessous" on_click 50, save1
button 51 left 51,10 width 51,180 font_color 51,235,41,15 ' font_bold 51 font_strike 51 caption 51, "Supprimer l'article sélectionné" hide 51 on_click 51, suppression1
button 60 left 60,210 width 60,180 top 60, 33 hide 60 caption 60, "Ajouter l'article ci-dessous" on_click 60, save2
button 61 left 61,210 width 61,180
caption 61, "Supprimer l'article sélectionné" font_strike 61 on_click 61, suppression2 Hide 61
button 70 left 70,410 width 70,180 top 70, 33 caption 70, "Ajouter l'article ci-dessous" on_click 70, save3 hide 70
button 71 left 71,410 width 71,180 top 71, 33 caption 71, "Supprimer l'article sélectionné" font_strike 71 on_click 71, suppression3 hide 71
button 80 left 80,610 width 80,220 top 80, 33 caption 80, "Ajouter l'article ci-dessous" on_click 80, save4 hide 80
button 81 left 81,610 width 81,220 top 81, 33 caption 81, "Supprimer l'article sélectionné" font_strike 81 on_click 81, suppression4 hide 81
b1= count(2)
taille1 = b1*pix height 0,taille1+200
gosub gestion_click_list :' pour déclarer tous les ON_CLICK dans les list(s)
gosub compt ' print screen_y
end : ' ========================================================================
gestion_click_list: ' déclaration des on_click (list) on_click 2, create1 return
save1:
file_load 2, "racine"+ext$ b1= count(2) taille1 = b1*pix height 2,taille1 show 51 top 51,taille1+83
a1$=text$(1) if a1$= "" message "La chaîne est vide, il convient d'écrire quelque chose !" return end_if
if b1>0
for i1=1 to b1 c1$=item_read$(2,i1) if trim$(a1$)=trim$(c1$) message "Cet article existe déjà, en choisir un autre !" text 1,"" return end_if next i1 end_if item_add 2,a1$ file_hide_off "racine"+ext$ file_save 2,"racine"+ext$ file_hide "racine"+ext$ text 1,"" b1= count(2)
taille1 = b1*pix height 2,taille1 show 51 top 51,taille1+83 gosub max_taille gosub compt
RETURN ' ------ create1: ' les 2 lignes ci-dessous sont destinées à controler si le click s'est fait sur une ligne vide ' si le click se fait sur une ligne vide retourne au label gestion_click_list et attend un nouveau click index_list%=item_index(2) if index_list%=0 then message "Sélection vide" : gosub gestion_click_list : return
' si le click est bon on continu taille2=0 : taille3=0 : taille4=0 e1$="" : e2$="" : e3$="" hide 5:hide 6: hide 8:hide 9:hide 11:hide 13: hide 70:hide 71:hide 80:hide 81 show 3:show 4:show 51:show 60:show 61:hide 18 b1=count(2) : taille1 = b1*pix gosub max_taille top 51,taille1+83
e1$=item_index$(2) f1$=e1$+ext$ : text 7,e1$ if file_exists(f1$) =0 file_open_write 101,e1$+ext$ file_close 101 end_if show 4 :file_hide_off f1$ : file_load 4,f1$ : file_hide f1$ b2=count(4) : show 61 if b2=0 hide 61 : b2=1 end_if b2=count(4) : taille2 = b2*pix : height 4,taille2 gosub max_taille top 61,taille2+83 : show 17 gosub chemin
RETURN ' ------
suppression1:
e1%=item_index(2)
if e1% =0 message "Il n'y a aucun article de sélectionné ou le fichier est vide !" return end_if if message_warning_yes_no("Attention, cette action va effacer définitivement les champs fils sur 4 niveaux !! Continuer ???")=2 return end_if
e1$=item_index$(2)
gosub supniv1
f1$=e1$+ext$ if file_exists(f1$) =1 file_delete f1$ end_if
item_delete 2,e1% hide 4 file_hide_off "racine"+ext$ file_save 2,"racine"+ext$ file_hide "racine"+ext$ b1= count(2)
taille1 = b1*pix height 2,taille1 show 51 top 51,taille1+83 text 7,"" gosub compt return save2:
b2= count(4) taille2 = b2*pix gosub max_taille height 4,taille2 show 61 top 61,taille2+83
a2$=text$(3) ' if dir_exists ("\Niveau_2")=0 ' dir_make "\Niveau_2" ' end_if if a2$= "" message "La chaîne est vide, il convient d'écrire quelque chose !" return end_if if b2>0
for i2=1 to b2 c2$=item_read$(4,i2) if trim$(a2$)=trim$(c2$) message "Cet article existe déjà, en choisir un autre !" text 3,"" return end_if next i2 end_if
item_add 4,a2$ f2$=text$(7) f2$=f2$+ext$ file_hide_off f2$ file_save 4,f2$ file_hide f2$ b2= count(4) taille2 = b2*pix text 3,""
taille2 = b2*pix height 4,taille2 show 61 top 61,taille2+83 gosub max_taille gosub compt return suppression2:
e2%=item_index(4) if e2% =0 message "Il n'y a aucun article de sélectionné ou le fichier est vide !" return end_if e2$=item_index$(4) if message_warning_yes_no("Attention, cette action va effacer définitivement les champs fils sur 3 niveaux !! Continuer ???")=2 return end_if f2$=text$(9) f2$=f2$+ext$ gosub supniv2 if file_exists(f2$) =1 file_delete f2$ end_if item_delete 4,e2% f2$=text$(7) f2$=f2$+ext$ file_hide_off f2$ file_save 4,f2$ file_hide f2$ b2=count (4) taille2 = b2*pix height 4,taille2 top 61,taille2+83 text 9, "" gosub compt gosub max_taille return create2: e3$="" taille3=0 taille4=0 hide 8:hide 11:hide 13:hide 80:hide 81:hide 18 show 5:show 6:show 70:show 71 e2$=item_index$(4) f2$=e2$+ext$ ind$=e1$+e2$ text 9,ind$ ind$=ind$+ext$ if file_exists(ind$) =0 file_open_write 102,ind$ file_close 102 end_if show 6 file_hide_off ind$ file_load 6,ind$ file_hide ind$ sort 6 ind$=e1$+e2$ c2=count(6) show 71 if c2=0 hide 71 c2=1 end_if taille2 = c2*pix gosub max_taille if taille2 > ht_max taille2=ht_max-250 end_if gosub max_taille height 6,taille2 top 71,taille2+83 gosub chemin
return save3: b3= count(6) taille3 = b3*pix height 6,taille3 show 71 top 71,taille3+83 a3$=text$(5) if a3$= "" message "La chaîne est vide, il convient d'écrire quelque chose !" return end_if if b3>0 for i3=1 to b3 c3$=item_read$(6,i3) if trim$(a3$)=trim$(c3$) message "Cet article existe déjà, en choisir un autre !" text 5,"" return end_if next i3 end_if item_add 6,a3$ f3$=text$(9) f3$=f3$+ext$ file_hide_off f3$ file_save 6,f3$ file_hide f3$ text 5,"" b3=count (6) taille3 = b3*pix if taille3 > ht_max taille3=ht_max-250 end_if gosub max_taille height 6,taille3 height 6,taille3 top 71,taille3+83 gosub compt return
suppression3: e3%=item_index(6) if e3% =0 message "Il n'y a aucun article de sélectionné ou le fichier est vide !" return end_if e3$=item_index$(6) if message_warning_yes_no("Attention, cette action va effacer définitivement les champs fils sur 2 niveaux !! Continuer ???")=2 return end_if e3$=item_index$(6)
f3$=e3$+ext$ gosub supniv3 if file_exists(f3$) =1 file_delete f3$ end_if
item_delete 6,e3% f3$=text$(9) f3$=f3$+ext$ file_hide_off f3$ file_save 6,f3$ file_hide f3$ b3=count (6) taille3 = b3*pix if taille3 > ht_max taille3=ht_max-250 end_if
gosub max_taille
height 6,taille3
top 71,taille3+83
gosub compt return
create3:
show 8 show 11 show 80 show 81 e3$=item_index$(6) f3$=e3$+ext$ ind$=e1$+e2$+e3$ text 13,ind$ ind$=ind$+ext$ if file_exists(ind$) =0 file_open_write 102,ind$ file_close 102 end_if show 8
file_hide_off ind$ file_load 8,ind$ file_hide ind$ ind$=e1$+e2$+e3$ sort 8 c3=count(8) if c3=0 hide 81 c3=1 end_if taille4 = c3*pix if taille4 > ht_max taille4=ht_max-250 end_if gosub max_taille height 8,taille4 top 81,taille4+83 show 18 caption 18,c3 top 18,taille4+110
gosub chemin return
save4: b4= count(8) taille4 = b4*pix if taille4 > ht_max taille4=ht_max-250 end_if gosub max_taille height 8,taille4 show 81 top 81,taille4+83
a4$=text$(11)
if a4$= "" message "La chaîne est vide, il convient d'écrire quelque chose !" return end_if if b4>0
for i4=1 to b4 c4$=item_read$(8,i4) if trim$(a4$)=trim$(c4$) message "Cet article existe déjà, en choisir un autre !" text 11,"" return end_if next i4 end_if item_add 8,a4$ f4$=text$(13) f4$=f4$+ext$ file_hide_off f4$ file_save 8,f4$ file_hide f4$ text 11,"" b4=count(8) taille4 = b4*pix
if taille4 > ht_max taille4=ht_max-250 end_if gosub max_taille height 8,taille4 top 81,taille4+83
gosub compt return
suppression4: e4%=item_index(8) if e4% =0 message "Il n'y a aucun article de sélectionné ou le fichier est vide !" return end_if e4$=item_index$(8)
f4$=e4$+ext$ if file_exists(f4$) =1 file_delete f4$ end_if
item_delete 8,e4% f4$=text$(13) f4$=f4$+ext$ file_hide_off f4$ file_save 8,f4$ file_hide f4$ b4=count (8) taille4 = b4*pix if taille4 > ht_max taille4=ht_max-250
end_if gosub max_taille height 8,taille4 top 81,taille4+83
gosub max_taille return create4:
' e3$=item_index$(6) ' e3$=trim$(e3$) ' for i% =1 to len (e3$) ' i$= mid$ (e3$,i%,1) ' if asc (i$)=32 ' i$= chr$(43) ' end_if ' goog$ = goog$ +left$ (i$,i%) ' next i% ' e3$=goog$ ' goog$ ="" e4$=item_index$(8) e4$=trim$(e4$) for i% =1 to len (e4$) i$= mid$ (e4$,i%,1) if asc (i$)=32 i$= chr$(43) end_if goog$ = goog$ + left$ (i$,i%) next i% e4$= "http://google.fr/?gws_rd=ssl#q="+goog$ execute e4$ e4$="" goog$="" return
supniv1:
long%= len(e1$) x$=file_find_first$ x$=file_find_next$ while x$<>"_" if left$ (x$,long%)=e1$ file_delete x$ end_if x$=file_find_next$ end_while file_find_close hide 3:hide 4:hide 7:hide 51:hide 60:hide 61 return supniv2: long%=len(e1$)+len(e2$) x$=file_find_first$ x$=file_find_next$ while x$<>"_" if left$ (x$,long%)=e1$+e2$ file_delete x$ end_if x$=file_find_next$ end_while file_find_close hide 3:hide 4:hide 5:hide 6:hide 7:hide 8:hide 9:hide 11:hide 13:hide 51 hide 60: hide 61: hide 80:hide 81: hide 70:hide 71:hide 18
return supniv3: long%=len(e1$)+len(e2$)+len(e3$) x$=file_find_first$ x$=file_find_next$ while x$<>"_" if left$ (x$,long%)=e1$+e2$+e3$ file_delete x$ end_if x$=file_find_next$ end_while file_find_close hide 7:hide 8:hide 9:hide 11:hide 13:hide 80:hide 81:hide 18 gosub max_taille
return
max_taille:
max_t%=max(taille1,taille2) max_t%=max(max_t%,taille3) max_t%=max(max_t% ,taille4) if max_t% > screen_y height 0,900 return end_if height 0, max_t% +200 top 17,max_t% +150 return chemin: chemin$= " Relations dans la base = "+e1$+" + "+e2$+" + "+e3$+" + "+ e4$ if e4$="" chemin$= " Relations dans la base = "+e1$+" + "+e2$+" + "+e3$ end_if if e3$="" chemin$= " Relations dans la base = "+e1$+" + "+e2$ end_if if e2$="" chemin$= " Relations dans la base = "+e1$ end_if caption 16,chemin$ e4$="" return compt: x$=file_find_first$ x$=file_find_next$ while x$<>"_" if right$ (x$,4)=ext$ file_add 20, x$ end_if x$=file_find_next$ end_while file_find_close compt= count (20) caption 15,compt clear 20
return
create41: e4$= item_index$(8) gosub chemin return pano: execute "http://panoramic-language.pagesperso-orange.fr//index.html" return A+ | |
|