Forum Liberty Basic France
• Index
Reprise du message précédent
Citation:
Purée..Moi je me demande quoi y mettre, et toi tu crains d'être limité en taille.
Mais qu'est-ce que tu compte y mettre dans cette base ?
Edit: Tiens sur "Jeux Vidéos", il y en a un qui a une liste de 20 millions de trucs à 5 ou 6 mots chaque
Il a l'air de faire de la recherche par mots
Il trouve que 3 secondes c'est trop long
Combien de temps mettrait JB à scanner la chose ? Un jour ou un an ?
Citation:
on est limité en taille
.Purée..Moi je me demande quoi y mettre, et toi tu crains d'être limité en taille.
Mais qu'est-ce que tu compte y mettre dans cette base ?
Edit: Tiens sur "Jeux Vidéos", il y en a un qui a une liste de 20 millions de trucs à 5 ou 6 mots chaque
Il a l'air de faire de la recherche par mots
Il trouve que 3 secondes c'est trop long
Combien de temps mettrait JB à scanner la chose ? Un jour ou un an ?
____________________
Roro
Roro
Citation:
Ceci dit, au vu de ce que j'ai pratiqué jusqu'à présent dans cette discussion, Just/liberty Basic ne semblent pas conçus pour les bases de données. Bien sûr, si on peut lire des fichiers ou rechercher un mot dans un tableau, on peut lire des tables ou programmer des requêtes, mais je n'ai pas vu d'instructions dédiées. Ce qui veut dire que, pour maintenir et développer une vraie base, il faudrait compenser cette absence par une palanquée de codes rédigés à la main, de ruses de sioux et/ou l'utilisation de DLL. On sort là du cadre de mon petit essai (et accessoirement, la programmation me prend trop de temps, mais c'est difficile de résister
).
Actuellement ma base qui était en datas est maintenant en fichiers dans sa version pratiquement définitive, et j'ai ajouté une table supplémentaire qui liste les paramétrages de la base et des tables, le programme se réfèrera à cette table pour examiner les fichiers de la base.
Donc je suis prêt pour l'étape suivante, tel un peintre devant sa toile blanche
je laisse reposer tout ça et je reviendrai à la prochaine avancée significative...
qui a une liste de 20 millions de trucs à 5 ou 6 mots chaque
Bonne question, il faudrait que j'aille voir.Ceci dit, au vu de ce que j'ai pratiqué jusqu'à présent dans cette discussion, Just/liberty Basic ne semblent pas conçus pour les bases de données. Bien sûr, si on peut lire des fichiers ou rechercher un mot dans un tableau, on peut lire des tables ou programmer des requêtes, mais je n'ai pas vu d'instructions dédiées. Ce qui veut dire que, pour maintenir et développer une vraie base, il faudrait compenser cette absence par une palanquée de codes rédigés à la main, de ruses de sioux et/ou l'utilisation de DLL. On sort là du cadre de mon petit essai (et accessoirement, la programmation me prend trop de temps, mais c'est difficile de résister

Actuellement ma base qui était en datas est maintenant en fichiers dans sa version pratiquement définitive, et j'ai ajouté une table supplémentaire qui liste les paramétrages de la base et des tables, le programme se réfèrera à cette table pour examiner les fichiers de la base.
Donc je suis prêt pour l'étape suivante, tel un peintre devant sa toile blanche

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Le défaut de JB c'est de ne pas permettre "l'emboitement" des variables ($); mais pour ça, il faut faire de "L'Orienté Objet", c'est une autre histoire...
Citation:
Et bien je ne sais pas, ne comprends pas ce que tu appelle une "vraie" base.
Si c'est de pouvoir modifier la base par l'interface, c'est très possible en JB. Et même d'en créer, d'en gérer plusieurs en même temps et de les faire interagir (multi-fenêtrage)
Citation:
ça sous-entend que le fichier doit être structuré (à partir de données brutes)
Alors autant travailler directement dans le fichier que d'entrer les données par une interface qui ne peut être que rigide et restrictive.
Pour moi, le programme ne doit servir qu'à faire ce qu'on veut faire des données. Il "suffit" d'ajouter des fonctions au programme; mais on ne refera pas un "Exel" ou un "Genumeric".
Citation:
Ah ben, c'est ça ou les séries télé
Perso, il y a bien longtemps que j'ai jeté la télé; la télé, ça mange la vie
ne semblent pas conçus pour les bases de données
Le défaut de JB c'est de ne pas permettre "l'emboitement" des variables ($); mais pour ça, il faut faire de "L'Orienté Objet", c'est une autre histoire...
Citation:
développer une vraie base
Et bien je ne sais pas, ne comprends pas ce que tu appelle une "vraie" base.
Si c'est de pouvoir modifier la base par l'interface, c'est très possible en JB. Et même d'en créer, d'en gérer plusieurs en même temps et de les faire interagir (multi-fenêtrage)
Citation:
se réfèrera à cette table pour examiner les fichiers de la base
ça sous-entend que le fichier doit être structuré (à partir de données brutes)
Alors autant travailler directement dans le fichier que d'entrer les données par une interface qui ne peut être que rigide et restrictive.
Pour moi, le programme ne doit servir qu'à faire ce qu'on veut faire des données. Il "suffit" d'ajouter des fonctions au programme; mais on ne refera pas un "Exel" ou un "Genumeric".
Citation:
la programmation me prend trop de temps
Ah ben, c'est ça ou les séries télé
Perso, il y a bien longtemps que j'ai jeté la télé; la télé, ça mange la vie
____________________
Roro
Roro
Citation:
Tout à fait. J'étais parti sur une idée préconçue avec cette table auxiliaire, il suffit de figer l'organisation des données à l’intérieur du fichier, et le nombre d'enregistrements, de champs, le séparateur, peuvent être déduits de l'analyse du fichier.
Je veux parfois faire trop perfectionné dès le début...
Citation:
Je dirais bien la même chose de la programmation
Citation:
ça sous-entend que le fichier doit être structuré (à partir de données brutes)
se réfèrera à cette table pour examiner les fichiers de la base
ça sous-entend que le fichier doit être structuré (à partir de données brutes)
Tout à fait. J'étais parti sur une idée préconçue avec cette table auxiliaire, il suffit de figer l'organisation des données à l’intérieur du fichier, et le nombre d'enregistrements, de champs, le séparateur, peuvent être déduits de l'analyse du fichier.
Je veux parfois faire trop perfectionné dès le début...
Citation:
Perso, il y a bien longtemps que j'ai jeté la télé; la télé, ça mange la vie
Je dirais bien la même chose de la programmation

____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
La programmation, ça fait pétiller le cerveau
Et des fois ça le fait fumer
Je dirais bien la même chose de la programmation 

La programmation, ça fait pétiller le cerveau
Et des fois ça le fait fumer
____________________
Roro
Roro
Je confirme... 
Quelques mots pour tenir au courant : ça avance pas trop mal.
J'ai repris la base avec les tables profs, matières et enseigne.
Dans cette version du programme il n'y a pas de tableaux : ce sont seulement des fichiers qu'on lit "à la demande" pour afficher leur contenu à l'écran.
Chaque table tient dans un fichier, le fichier comporte quatre lignes d'en-tête, et les lignes suivantes sont les données.
La première ligne indique le type de fichier, car selon si c'est une table de données, comme "profs" ou "matières", ou une table de relation, comme "enseigne", le traitement n'est pas le même.
Le seconde donne un nom compréhensible par l'humain si c'est une table de donnée, et le radical du verbe si c'est une table de relation, ces deux informations permettant de présenter le contenu de la table à l'utilisateur, de manière moins "informatique"
La troisième contient le numéro des champs qu'on désire afficher (données) ou le nom des tables liées (relations)
Et la quatrième contient le nom des colonnes du bloc de données.
c'est donc un formatage bien spécifique, et je doute fort qu'on puisse ouvrir quoique ce soit d'autres que les tables que nous avons nous-même généré. Même pas essayé, d'ailleurs...
Pour le moment le programme se contente d'afficher les champs dont on a décidé, lors de la création de la base, qu'ils seraient affichés. La prochaine évolution est un second mode d'affichage, qui montrerait l'intégralité des champs des tables. Ensuite on essaiera de créer un module de recherche multi-critère, chaque critère étant défini par une combobox dans laquelle on choisit la table, une seconde combobox définissant le champ, et la troisième, ou une textbox, contiendra la valeur recherchée. Je ne pense pas aller plus loin (il faudrait pouvoir ajouter, modifier ou supprimer des enregistrements, mais ça, vu la tempête cérébrale qui a soufflé cette dernière semaine, c'est pas pour tout de suite, il faut être complètement frappadingue pour faire de la programmation "de loisir"
)
Le programme pour créer les fichers à partir des tables en data :
(C'est celui-ci qu'il faut utiliser, car la structure interne des tables a changé) :
Code VB :
Le programme pour lire les tables créées par le logiciel ci-dessus :
Code VB :
Et le zip qui contient les deux programmes et une base toute prête, pour ceux qui aiment les zip : base-de-donnee-v0_2
Edité par Christophe Le 29/07/2017 à 22h47

Quelques mots pour tenir au courant : ça avance pas trop mal.
J'ai repris la base avec les tables profs, matières et enseigne.
Dans cette version du programme il n'y a pas de tableaux : ce sont seulement des fichiers qu'on lit "à la demande" pour afficher leur contenu à l'écran.
Chaque table tient dans un fichier, le fichier comporte quatre lignes d'en-tête, et les lignes suivantes sont les données.
La première ligne indique le type de fichier, car selon si c'est une table de données, comme "profs" ou "matières", ou une table de relation, comme "enseigne", le traitement n'est pas le même.
Le seconde donne un nom compréhensible par l'humain si c'est une table de donnée, et le radical du verbe si c'est une table de relation, ces deux informations permettant de présenter le contenu de la table à l'utilisateur, de manière moins "informatique"
La troisième contient le numéro des champs qu'on désire afficher (données) ou le nom des tables liées (relations)
Et la quatrième contient le nom des colonnes du bloc de données.
c'est donc un formatage bien spécifique, et je doute fort qu'on puisse ouvrir quoique ce soit d'autres que les tables que nous avons nous-même généré. Même pas essayé, d'ailleurs...
Pour le moment le programme se contente d'afficher les champs dont on a décidé, lors de la création de la base, qu'ils seraient affichés. La prochaine évolution est un second mode d'affichage, qui montrerait l'intégralité des champs des tables. Ensuite on essaiera de créer un module de recherche multi-critère, chaque critère étant défini par une combobox dans laquelle on choisit la table, une seconde combobox définissant le champ, et la troisième, ou une textbox, contiendra la valeur recherchée. Je ne pense pas aller plus loin (il faudrait pouvoir ajouter, modifier ou supprimer des enregistrements, mais ça, vu la tempête cérébrale qui a soufflé cette dernière semaine, c'est pas pour tout de suite, il faut être complètement frappadingue pour faire de la programmation "de loisir"

Le programme pour créer les fichers à partir des tables en data :
(C'est celui-ci qu'il faut utiliser, car la structure interne des tables a changé) :
Code VB :
'générateur de tables simplifié - 29 juillet 2017 ' 'Dans les fichiers générés, la première ligne contient : ' * nom de la table, ' * nom long de la table (utile pour formulaires et états) ou ' * type de table : relation entre table (1) ou données(0) 'pour programme d'affichage ' * nombre de champs par enregistrement ' 'une fois convertie en fichier, la structure de celui-ci est : ' * tables de données ' ligne 1 : type=0 ' ligne 2 : nom long de la table (pour l'utilisateur) ' ligne 3 : liste des champs à afficher (nombres séparés par des espaces) ' ligne 4 : modèle de la table : noms de colonnes séparées par le séparateur (;) ' ligne 5 et au delà : données ' ' * tables de relation ' ligne 1 : type=1 ' ligne 2 : racine du verbe nommant la table (pour pouvoir le conjuguer dans les états) ' ligne 3 : nom des tables mises en relation (séparés par un espace) ' ligne 4 : modèle de la table : identifiant, première table, seconde table (;) ' (la première table doit être le sujet du verbe nommant la table de relation, ' "un professeur enseigne une matière", première table=professeur ' ligne 5 et au delà : données ' 'Dans les datas, si on ajoute ou retire des enregistrements, ne pas oublier de mettre à jour 'le nombre d'enregistrements. ' 'Ajout ou suppression de tables : ' * NbreTables contient le nombre de tables ' * modifier manuellement le select case qu'on trouve en ' début de [créer_tables] et qui ressemble à : ''sélection de la table à afficher/transférer ' select case tables ' case 1 : restore [profs] ' case 2 : restore [matieres] ' case 3 : restore [enseigne] ' end select 'pas de fenetre de débugage nomainwin '** construction de la base de données : NbreTables=3 'nombre de tables [profs] ' 'nom de la table, nom long, relation, nbre d'enregistrements, nbre de champs par enregistrements data "Profs","professeur",0,12,2 data "champs 1 2","Nom Prénom", 'nom des champs, champs affichés, séparés par des espaces, donc pas d'espace dans le nom des champs data "Trucmuche","Alain" data "Machin","Marcel" data "Lapaille","Jean-Benoît" data "Lapoutre","Ulysse" data "Legendre","Lucienne" data "Lebianski","Josiane" data "Lavache","Ernest", data "Tuboeuf","Adrienne" data "Sinclair","Bratt" data "Rabeau","Elisabeth" data "Nun","Elodie" data "Lavache","Michel" [matieres]' 'nom de la table, nom long, relation, nbre d'enregistrements, nbre de champs par enregistrements data "Matière","matière",0,8,2 data "champs 1","Matière Abréviation" 'nom des champs, champs affichés, séparés par des espaces, donc pas d'espace dans le nom des champs data "Mathématiques","Maths." data "Philosophie","Philo." data "Français","Franç." data "Histoire-Géographie","Hist.-Géo." data "Education Physique et Sportive","EPS" data "Physique","Phys." data "Biologie","Biolo." data "Arts Plastiques","Arts P." [enseigne] ' 'nom de la table, nom long, relation, nbre d'enregistrements, nbre de champs par enregistrements data "enseigne","enseign",1,14,2 data "Profs Matière","id.prof id.matière" 'nom des tables liées, nom des champs data 0,7 data 1,5 data 2,2 data 3,3 data 4,4 data 5,3 data 5,7 data 6,1 data 7,4 data 8,5 data 9,0 data 9,6 data 10,1 data 11,7 '** mise en tableau du contenu des combobox servant 'à générer le nom des fichiers et du set de tables 'combo date sepdate$=" " dim formatDate$(14) formatDate$(1)="jour" formatDate$(2)="mois" formatDate$(3)="année" formatDate$(4)="jj";sepdate$;"mm";sepdate$;"aa" formatDate$(5)="jj";sepdate$;"mm";sepdate$;"aaaa" formatDate$(6)="jour";sepdate$;"mois";sepdate$;"aa" formatDate$(7)="jour";sepdate$;"mois";sepdate$;"aaaa" formatDate$(8)="jj";sepdate$;"mois";sepdate$;"aa" formatDate$(9)="jj";sepdate$;"mois";sepdate$;"aaaa" formatDate$(10)="aa";sepdate$;"mm";sepdate$;"jj" formatDate$(11)="aaaa";sepdate$;"mm";sepdate$;"jj" formatDate$(12)="aa";sepdate$;"mois";sepdate$;"jour" formatDate$(13)="aaaa";sepdate$;"mois";sepdate$;"jour" 'combo heure dim formatHeure$(7) formatHeure$(1)="hh-mm" formatHeure$(2)="hh-mm-ss" formatHeure$(3)="hh h mm" formatHeure$(4)="hh h mm min" formatHeure$(5)="hh h mm min ss" formatHeure$(6)="hh h mm min ss sec" 'combos assemblage du nom dim formatNomFile$(5) formatNomFile$(1)="< rien >" formatNomFile$(2)="date" formatNomFile$(3)="heure" formatNomFile$(4)="nom" '** boucle principale 'définition de l'interface 'taille et couleur de la fenêtre WindowWidth=800 WindowHeight=600 'choix de l'extension des fichiers extension$="" GROUPBOX #gener.extfic, "Extension des fichiers de table", 10, 100, 760, 42 RADIOBUTTON #gener.rbtxt, "*.txt", [ext_txt], [rien], 20, 116, 80, 20 RADIOBUTTON #gener.rbdat, "*.dat", [ext_dat], [rien], 120, 116, 80, 20 RADIOBUTTON #gener.rbcsv, "*.csv", [ext_csv], [rien], 220, 116, 80, 20 RADIOBUTTON #gener.rbextlib, "Libre :", [ext_libre], [rien], 320, 116, 50, 20 TEXTBOX #gener.tbext, 370, 116, 30, 20 'choix du type de nom pour le dossier qui contiendra les tables STATICTEXT #gener.stnom, "Nom du jeu de tables :", 20, 158, 130, 20 '113 TEXTBOX #gener.tbnom, 150, 155, 500, 20 '110 'nom du set de tables, date STATICTEXT #gener.stfmtdate, "Format date :", 20, 185, 90, 20 combobox #gener.cbdatefile, formatDate$(), [creer_nom_dossier_cb], 20, 205, 90, 20 STATICTEXT #gener.stfmtheure, "Format heure :", 120, 185, 90, 20 combobox #gener.cbheurefile, formatHeure$(), [creer_nom_dossier_cb], 120, 205, 90, 20 STATICTEXT #gener.stfmtjeutab, "Formation du nom du jeu de tables", 225, 185, 200, 20 combobox #gener.cbchamp1, formatNomFile$(), [creer_nom_dossier_cb], 225, 205, 60, 20 combobox #gener.cbchamp2, formatNomFile$(), [creer_nom_dossier_cb], 295, 205, 60, 20 combobox #gener.cbchamp3, formatNomFile$(), [creer_nom_dossier_cb], 365, 205, 60, 20 STATICTEXT #gener.stnomdeft, "Aperçu :", 440, 185, 340, 20 STATICTEXT #gener.stnomdef, "nomdossier$", 440, 208, 340, 20 'fenêtre de validation TEXTEDITOR #gener.visu, 20, 250, 750, 230 fonteditor$="Liberation_Mono 12" 'validation, quitter BUTTON #gener.eff, "Eff. Affichage", [Efface_texteditor], ul, 465, 500, 100, 35 'génération des tables 285 235 = -50pix GROUPBOX #gener.extfic, "Générer les tables", 235, 483, 220, 62 CHECKBOX #gener.chkaff, "sur Fenetre", [vers_affichage], [sans_affichage], 255, 500, 80, 20 CHECKBOX #gener.chkfic, "sur Fichier", [vers_fichier], [sans_ficher], 255, 520, 80, 20 BUTTON #gener.gen, "Générer", [generer_la_base], ul, 345, 500, 100, 35 BUTTON #gener.quit, "Quitter", [quitter], ul, 680, 510, 100, 20 'ouverture de l'interface open "Convertisseur tables en datas vers fichiers" for window as #gener print #gener.visu, "!font ";fonteditor$ 'police d'affichage des données print #gener, "trapclose [quitter]" 'quitter par le gadget de fermeture rbtnEXT=1 : print #gener.rbtxt, "set" surfenetre=1 : print #gener.chkaff, "set" surfichier=0 : print #gener.chkfic, "reset" 'preset nom du set de tables indexDate=9 : print #gener.cbdatefile, "!";formatDate$(indexDate) indexHeure=3 : print #gener.cbheurefile, "!";formatHeure$(indexHeure) indexChp1=2 : print #gener.cbchamp1, "!";formatNomFile$(indexChp1) indexChp2=3 : print #gener.cbchamp2, "!";formatNomFile$(indexChp2) indexChp3=4 : print #gener.cbchamp3, "!";formatNomFile$(indexChp3) 'et avec ces preset on crée le nom du set de tables gosub [creer_nom_dossier] print #gener.stnomdef, nomdossier$ wait 'fin du programme end '** sous programmes [Efface_texteditor] print #gener.visu, "!cls" wait 'extension des fichiers table [rien] wait [ext_txt] rbtnEXT=1 extension$="txt" if origine=1 then return:origine=0 else wait [ext_dat] rbtnEXT=2 extension$="dat" if origine=1 then return:origine=0 else wait [ext_csv] rbtnEXT=3 extension$="csv" if origine=1 then return:origine=0 else wait [ext_libre] rbtnEXT=4 print #gener.tbext,"!contents? extension$" if origine=1 then return:origine=0 else wait 'générer la base de données [vers_affichage] surfenetre=1 if origine=1 then return:origine=0 else wait [sans_affichage] surfenetre=0 if origine=1 then return:origine=0 else wait [vers_fichier] surfichier=1 if origine=1 then return:origine=0 else wait [sans_ficher] surfichier=0 if origine=1 then return:origine=0 else wait [creer_nom_dossier_cb] 'on arrive ici après avoir fait un choix dans une combobox gosub [creer_nom_dossier] wait [creer_nom_dossier] 'on arrive ici par un 'gosub' 'lit les index des combobox de création du nom du jeu de table '(priorité à l'actuel contenu des combobox sauf s'il est 0) #gener.cbdatefile, "selectionindex? idx" : if idx<>indexDate and idx>0 then indexDate=idx #gener.cbheurefile, "selectionindex? idx" : if idx<>indexHeure and idx>0 then indexHeure=idx #gener.cbchamp1, "selectionindex? idx" : if idx<>indexChp1 and idx>0 then indexChp1=idx #gener.cbchamp2, "selectionindex? idx" : if idx<>indexChp2 and idx>0 then indexChp2=idx #gener.cbchamp3, "selectionindex? idx" : if idx<>indexChp3 and idx>0 then indexChp3=idx 'top horaire j$=date$("yyyy/mm/dd") h$=time$() 'déterminer la date de l'instant annee$=left$(j$,4) anneeCourte$=right$(annee$,2) mois$=mid$(j$,6,2) nomMois$=word$("jan fév mar avr mai juin juil aout sept oct nov dec",val(mois$)) jour$=right$(j$,2) nbrejour=val(date$("days")) 'nbrejour=42561 -> samedi numjour=1+nbrejour-int(nbrejour/7)*7 nomJour$=word$("mardi mercredi jeudi vendredi samedi dimanche lundi",numjour) 'formatage de la date select case indexDate case 1:ladate$ = nomJour$ case 2:ladate$ = nomMois$ case 3:ladate$ = annee$ case 4:ladate$ = jour$;sepdate$;mois$;sepdate$;anneeCourte$ case 5:ladate$ = jour$;sepdate$;mois$;sepdate$;annee$ case 6:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;anneeCourte$ case 7:ladate$ = nomJour$;sepdate$;nomMois$;sepdate$;annee$ case 8:ladate$ = jour$;sepdate$;nomMois$;sepdate$;anneeCourte$ case 9:ladate$ = jour$;sepdate$;nomMois$;sepdate$;annee$ case 10:ladate$ = anneeCourte$;sepdate$;mois$;sepdate$;jour$ case 11:ladate$ = annee$;sepdate$;mois$;sepdate$;jour$ case 12:ladate$ = anneeCourte$;sepdate$;nomMois$;sepdate$;nomJour$ case 13:ladate$ = annee$;sepdate$;nomMois$;sepdate$;nomJour$ end select 'déterminer l'heure de l'instant heure$=left$(h$,2) min$=mid$(h$,4,2) sec$=right$(h$,2) 'formatage de l'heure select case indexHeure case 1:lheure$ = heure$;"-";min$ case 2:lheure$ = heure$;"-";min$;"-";sec$ case 3:lheure$ = heure$;"h";min$ case 4:lheure$ = heure$;"h";min$;"min" case 5:lheure$ = heure$;"h";min$;"min";sec$ case 6:lheure$ = heure$;"h";min$;"min";sec$;"s" end select 'récupération du nom du jeu de tables print #gener.tbnom,"!contents? lenom$" 'construction du nom complet du jeu de tables nomdossier$="" separation$=" - " 'chaine de séparation des paramètres dans le nom du set sep1$=separation$ select case indexChp1 case 1 : champ1$="":sep1$="" case 2 : champ1$=ladate$ case 3 : champ1$=lheure$ case 4 : champ1$=lenom$ end select sep2$=separation$ select case indexChp2 case 1 : champ2$="":sep2$="" case 2 : champ2$=ladate$ case 3 : champ2$=lheure$ case 4 : champ2$=lenom$ end select select case indexChp3 case 1 : champ3$="" case 2 : champ3$=ladate$ case 3 : champ3$=lheure$ case 4 : champ3$=lenom$ end select if champ3$="" then sep2$="" if champ2$="" and champ3$="" then sep1$="" nomdossier$=champ1$+sep1$+champ2$+sep2$+champ3$ 'vérification de la validité de nomdossier$ if nomdossier$="" then if lenom$<>"" then 'on prend le nom qui a été entré dans la textbox 'on l'attribue au nom du dossier et on met en conformité 'les combobox avec cette situation nomdossier$=lenom$ indexChp1=4:print #gener.cbchamp1,"selectindex ";indexChp1 indexChp2=1:print #gener.cbchamp2,"selectindex ";indexChp2 indexChp3=1:print #gener.cbchamp3,"selectindex ";indexChp3 else 'et s'il n'y a pas de nom dans la textbox, on informe l'utilisateur ligne1$="Choisir au moins un champ <date> ou <heure> dans" ligne2$="la section 'Formation du nom du jeu de tables,'" ligne3$="ou entrer un nom dans la ligne 'Nom du jeu de tables'" ligne4$="puis cliquer sur <Générer>" notice ligne1$+chr$(10)+ligne2$+chr$(10)+ligne3$+chr$(10)+ligne4$ end if end if print #gener.stnomdef, nomdossier$ return [generer_la_base] gosub [creer_nom_dossier] print #gener.visu, "" print #gener.visu, "nom du jeu de tables : ";nomdossier$ creertables=0 'à 1, donne l'accord pour créer la base ' et reste à zéro en cas d'anomalie 'affichage des tables sur fenêtre if surfenetre=1 then creertables=1 'création des tables dans fichiers if surfichier=1 then 's'il n'existe pas, on tente de créer le dossier de la base test = mkdir(nomdossier$) if test = 0 then 'dossier prêt, on peut continuer creertables=1 else 'il y a un problème, on s'arrête là n1$="Problème : la création du dossier a échoué" n2$="La base de donnée n'est pas créée" n3$="Code de l'erreur : ";str$(test) notice n1$+chr$(10)+n2$+chr$(10)+n3$ end if end if if creertables=1 then gosub [créer_tables] wait [créer_tables] 'crée les table, et les affiche dans la fenêtre et/ou les enregistre en fichiers separ$=";" 'séparateur de champs for tables=1 to NbreTables 'on traite toutes les tables 'sélection de la table à afficher/transférer select case tables case 1 : restore [profs] case 2 : restore [matieres] case 3 : restore [enseigne] end select 'on récupère le nom, le complément (nom long ou racine verbe),le nombre d'enregistrements, 'de champs par enregistrement, et le nom des colonnes read nom$,complement$,type,nbenr,nbchamps,courtoisie$,entete$ 'dimensionnement du tableau image du fichier longueurTI = nbenr + 4 'nbenr + nombre de lignes d'information avant le bloc de données dim Tableimage$(longueurTI) 'bloc informatif Tableimage$(0)="type=";type 'table de données ou table de relation Tableimage$(1)=complement$ 'nom long ou racine du verbe Tableimage$(2)=courtoisie$ 'champs à afficher ta$="ident."+separ$ 'ligne d'en-tête du bloc de données for col=1 to nbchamps ta$=ta$+word$(entete$,col," ")+separ$ next tb$=left$(ta$, len(ta$)-len(separ$)) 'retrait du dernier séparateur Tableimage$(3)=tb$ 'bloc de données comptenr=0 'compteur d'enregistrement for enr=0 to nbenr-1 ta$=str$(comptenr)+separ$ 'ajout de l'identifiant for champ=1 to nbchamps read a$ ta$=ta$+a$+separ$ 'ajout des champs et du séparateur next tb$=left$(ta$, len(ta$)-len(separ$)) 'retrait du dernier séparateur Tableimage$(enr+4)=tb$ ta$="" comptenr=comptenr+1 next 'générer le chemin de la base et le nom des fichiers print #gener.visu,"" print #gener.visu,"nom de la table : ";nom$+"."+extension$ nomdufichier$=DefaultDir$+"\"+nomdossier$+"\"+nom$+"."+extension$ print #gener.visu,"chemin et nom du fichier : ";nomdufichier$ 'affichage des tables sur fenêtre if surfenetre=1 then for a=0 to longueurTI-1 print #gener.visu, Tableimage$(a) next end if 'écriture des tables en fichier if surfichier=1 then 'création des tables open nomdufichier$ for output as #fichier for a=0 to longueurTI-1 print #fichier, Tableimage$(a) next close #fichier end if next return [quitter] 'quitter le programme close #gener end wait
Le programme pour lire les tables créées par le logiciel ci-dessus :
Code VB :
'29 juillet 2017 ' 'test de faisabilité d'une base de donnée, affichage du contenu de fichiers ' 'pour le moment ce qui fonctionne : ' affichage des tables de donnée ' affichage des tables de relation ' l'ordre des enregistrement est l'ordre dans lequels ils sont dans le fichier, il ' n'y a aucun tri ni regroupement 'préréglages nomainwin tab$=space$(4) 'pour indentation dans l'affichage des tables separ$=";" 'caractère de séparation des champs dans les fichiers 'définition de l'interface 'taille de la fenêtre WindowWidth=800 WindowHeight=600 'interface de commande BUTTON #base.gen, "Afficher la base", [Afficher_la_base], ul, 20, 20, 100, 20 BUTTON #base.quit, "Quitter", [quitter], ul, 670, 510, 100, 20 'affichage des messages de fonctionnement statictext #base.msgt,"Messages de fonctionnement :", 20, 60, 150, 20 TEXTEDITOR #base.msg, 20, 80, 750, 100 fonteditor$="Liberation_Mono 12" 'affichage de de la base statictext #base.vis,"Etats et résultats de requêtes :", 20, 200, 150, 20 TEXTEDITOR #base.visu, 20, 220, 750, 260 fonteditor$="Liberation_Mono 12" 'ouverture de l'interface open "Base de données" for window as #base print #base.visu, "!font ";fonteditor$ 'police d'affichage des données print #base, "trapclose [quitter]" 'quitter par le gadget de fermeture wait 'fin du programme end '** sous-programmes [quitter] 'quitter le programme close #base end [Afficher_la_base] 'sélectionner la base qu'on veut afficher FILEDIALOG "Choisir un fichier de la base de données :", "*.*", fichier$ print #base.msg, "Fichier sélectionné : ";fichier$ 'si pas de sélection par l'utilisateur anomalie=0 if fichier$="" then anomalie=1 anomalie1$="Annulation de l'opération par l'utilisateur" else 'déterminer le nom du dossier de la base fin=0 a=len(fichier$) posit=0 while fin<>1 if mid$(fichier$,a,1)="\" then posit=len(fichier$)-a fin=1 end if a=a-1 if a<0 then anomalie2$="Il aurait dû y avoir au moins un \ dans le chemin de la base" fin=1:anomalie=1 end if wend end if 'si tout va bien if anomalie=0 then 'analyse de la base de donnée 'affichage du chemin du dossier de la base dossier$=left$(fichier$,len(fichier$)-posit) print #base.msg, "Base : ";dossier$ 'chargement des informations sur le dossier dans le tableau info$() dim info$(10,10) files dossier$, info$() 'lecture des infos du dossier NbFic=val(info$(0, 0)) NbDos=val(info$(0, 1)) Lett$=info$(0, 2) chem$=info$(0, 3) chemincomplet$=Lett$+chem$ 'lecture des infos des fichiers print #base.msg,"" print #base.msg,"Fichiers trouvés : " 'extraire le nom de la base du nom de son dossier fin=0 posit=1 long=len(chemincomplet$)-1 borne1=0 borne2=0 nbaslash=0 while fin=0 a$=mid$(chemincomplet$,posit,1) if a$="\" then borne1=borne2:borne2=posit posit=posit+1 if posit>long then fin=1 wend 'détermination et affichage du nom et du chemin de la base nombase$ = mid$(chemincomplet$,borne2+1,long-borne2) cheminbase$ = left$(chemincomplet$,borne2) print #base.visu,"Base de données :" print #base.visu,tab$;"Nom : ";nombase$ print #base.visu,tab$;"Chemin : ";cheminbase$ print #base.visu,"" print #base.visu,"" 'affichage des tables de données : for Fichier=1 to NbFic 'nom et chemin de la table en cours d'analyse nomTable$=info$(Fichier, 0) chemtable$=chemincomplet$+nomTable$ 'lecture de l'en-tête du fichier contenant la table open chemtable$ for input as #table 'déterminer le type de table : 0=donnée, 1=relation line input #table,type$ type=val(word$(type$,2,"=")) 'affichage de la table si elle est une table de données if type=0 then print #base.msg,"Trouvé : ";nomTable$ line input #table,nomlong$ 'nom long de la table line input #table,champaff$ 'champs à afficher lors de l'ouverture de la base line input #table,entete$ 'noms des colonnes du bloc de données gosub [table_de_données] end if close #table next 'affichage des tables de relation : for Fichier=1 to NbFic nomTable$=info$(Fichier, 0) chemtable$=chemincomplet$+nomTable$ open chemtable$ for input as #table line input #table,type$ type=val(word$(type$,2,"=")) if type=1 then print #base.msg,"Trouvé : ";nomTable$ line input #table,verbe$ 'racine du verbe line input #table,tables$ 'nom des tables liées line input #table,entete$ 'noms des colonnes du bloc de données gosub [table_de_relation] end if close #table next print #base.visu,"" print #base.visu,"" else 'l'utilisateur n'a pas choisi la base, ou il y a un problème dans le chemin print #base.msg, "Afficher la base : opération annulée." if anomalie1$<>"" then print #base.msg,anomalie1$ if anomalie2$<>"" then print #base.msg,anomalie2$ print #base.msg, "En attente d'action de l'utilisateur..." end if wait [table_de_données] 'affichage en-tête explicatif : nom de la table et liste des champs désignés print #base.visu, "Table ";nomTable$;", liste des ";nomlong$;"s :" print #base.visu,"" 'détermination du nombre de champs à afficher nbchampaff=1 for a=1 to len(champaff$) if mid$(champaff$,a,1)=" " then nbchampaff=nbchampaff+1 next nbchampaff=nbchampaff-1 'affichage des données, seulement les champs sélectionnés. while eof(#table)=0 line input #table,enregistrement$ b$=tab$ 'indentation for a=1 to nbchampaff champ=1+val(word$(champaff$,a+1," ")) b$=b$+word$(enregistrement$,champ,separ$)+" " next print #base.visu,b$ wend print #base.visu,"" print #base.visu,"" return [table_de_relation] 'on affiche les champs les champs de chaque table, correspondants à chaque relation 'recherche des tables liées table1$=word$(tables$,1," ") table2$=word$(tables$,2," ") trouve1=0 trouve2=0 for a=1 to NbFic if table1$=info$(a, 0) then trouve1=a if table2$=info$(a, 0) then trouve2=a next 'si l'une des tables liées n'est pas trouvée if trouve1=0 or trouve2=0 then print #base.msg, "!!!" print #base.msg, "Anomalie : la table ";nomTable$;" ne sera pas affichée, parce que :" if trouve1=0 then print #base.msg, "le programme ne trouve pas ";table1$ if trouve2=0 then print #base.msg, "le programme ne trouve pas ";table2$ print #base.msg, "" else 'sinon affichage de la table de relation 'extraction du nom long de la table 1 fic1$=chemincomplet$+info$(trouve1, 0) open fic1$ for input as #t1 line input #t1, enr$ line input #t1, enr$ nomlong1$=enr$ close #t1 'extraction du nom long de la table 2 fic2$=chemincomplet$+info$(trouve2, 0) open fic2$ for input as #t2 line input #t2, enr$ line input #t2, enr$ nomlong2$=enr$ close #t2 'et affichage de l'en-tete de la table print #base.visu, "Table ";nomTable$;", ";nomlong1$;" : ";nomlong2$ print #base.visu,"" 'affichage des relations while eof(#table)=0 'pour chacun des enregistrements line input #table,enregistrement$ 'recherche de l'enregistrement de la première table liée id1=val(word$(enregistrement$,2,separ$)) open fic1$ for input as #t1 while eof(#t1)=0 line input #t1, enr$ premchamp=val(word$(enr$,1,separ$)) if premchamp=id1 then enr1$=enr$ wend close #t1 'recherche de l'enregistrement de la seconde table liée id2=val(word$(enregistrement$,3,separ$)) open fic2$ for input as #t2 while eof(#t2)=0 line input #t2,enr$ premchamp=val(word$(enr$,1,separ$)) if premchamp=id2 then enr2$=enr$ wend close #t2 'puis affichage de la table relation$=word$(enr1$,3,separ$)+" "+word$(enr1$,2,separ$)+" : "+word$(enr2$,2,separ$) print #base.visu,tab$;relation$ wend print #base.visu,"" print #base.visu,"" end if return
Et le zip qui contient les deux programmes et une base toute prête, pour ceux qui aiment les zip : base-de-donnee-v0_2
Edité par Christophe Le 29/07/2017 à 22h47
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Bah moi je me demande toujours quelle sorte de traitement je pourrais bien leur faire subir aux données
A part la recherche et la combinatoire (et ses grands nombres)
A part la recherche et la combinatoire (et ses grands nombres)
____________________
Roro
Roro
Je t'ai suggéré une idée sur l'autre fil.
Pour en revenir au présent projet :
* Il y a l'idée : faire le Tourmalet
* Il y a les moyens : utiliser un vélo
* et il y a la réalité : apprendre à faire du vélo et acquérir l'endurance
C'est pour ça que c'est si long, que nous en sommes toujours à nos trois sempiternelles tables du début, et que je n'ai toujours pas l'outil pour vérifier la vertu que j'attribue à la séparation des données en de multiples tables.
Voici donc un simple rapport d'étape.
Mode d'emploi : découvrir la base, puis faire la recherche.
Pour faire des recherches, il faut cliquer sur les boutons "Champs pré-sélectionnés" ou "Tous les champs", car le bouton "Les fichiers bruts" ne fait que lister le contenu des tables de la base.
Pour le moment un seul critère fonctionne. Il n'y a pas de tri alphabétique dans l'affichage des résultats et les doublons ne sont pas supprimés.
Petit bug : dans le filtre, lorsqu'on change la table et le champ sur lesquels on veut faire la recherche, il arrive que la combobox "valeur" reste bloquée : choisir un autre champ, puis revenir au champ souhaité.
Les traitements se font toujours à partir des fichiers : il n'y a plus de données en tableau, sauf les caractéristiques nécessaires à leur affichage.
Tout en zip : générateur de base, base prête à l'emploi, et visualiseur. Comme d'hab, les versions ont changé, donc utiliser les fichiers d'une version précédente ne fonctionnera pas, on est toujours dans l'expérimental...
Voilà : base V0.03
Pour en revenir au présent projet :
* Il y a l'idée : faire le Tourmalet
* Il y a les moyens : utiliser un vélo
* et il y a la réalité : apprendre à faire du vélo et acquérir l'endurance

C'est pour ça que c'est si long, que nous en sommes toujours à nos trois sempiternelles tables du début, et que je n'ai toujours pas l'outil pour vérifier la vertu que j'attribue à la séparation des données en de multiples tables.
Voici donc un simple rapport d'étape.
Mode d'emploi : découvrir la base, puis faire la recherche.
Pour faire des recherches, il faut cliquer sur les boutons "Champs pré-sélectionnés" ou "Tous les champs", car le bouton "Les fichiers bruts" ne fait que lister le contenu des tables de la base.
Pour le moment un seul critère fonctionne. Il n'y a pas de tri alphabétique dans l'affichage des résultats et les doublons ne sont pas supprimés.
Petit bug : dans le filtre, lorsqu'on change la table et le champ sur lesquels on veut faire la recherche, il arrive que la combobox "valeur" reste bloquée : choisir un autre champ, puis revenir au champ souhaité.
Les traitements se font toujours à partir des fichiers : il n'y a plus de données en tableau, sauf les caractéristiques nécessaires à leur affichage.
Tout en zip : générateur de base, base prête à l'emploi, et visualiseur. Comme d'hab, les versions ont changé, donc utiliser les fichiers d'une version précédente ne fonctionnera pas, on est toujours dans l'expérimental...
Voilà : base V0.03
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Le tout n'est pas de savoir où on va
Mais d'y aller.
Et on va y arriver.
Mais d'y aller.
Et on va y arriver.
____________________
Roro
Roro
Assurément. Et le projet commence à devenir solide. Me suis aperçu qu'auparavant je n'y connaissais rien en programmation 
Le tri alphabétique avec suppression de doublons a été intégré dans les listes affichées par les comboboxs, et ça change la vie : on sélectionne le seul prof "Bongrain" présent dans la combobox, et les dix "Bongrain" présents dans la base sont affichés dans le texteditor, chacun avec leur prénom (en fait j'ai juste fait l'essai avec Lavache, et il n'y en a que deux, mais le principe est le même pour dix)
Les bugs qui restent à résoudre ne semblent pas rhédibitoires, nous allons bientôt pouvoir nous attaquer au vrai problème, la la la lalère
En attendant, c'est le week-end...
A+

Le tri alphabétique avec suppression de doublons a été intégré dans les listes affichées par les comboboxs, et ça change la vie : on sélectionne le seul prof "Bongrain" présent dans la combobox, et les dix "Bongrain" présents dans la base sont affichés dans le texteditor, chacun avec leur prénom (en fait j'ai juste fait l'essai avec Lavache, et il n'y en a que deux, mais le principe est le même pour dix)
Les bugs qui restent à résoudre ne semblent pas rhédibitoires, nous allons bientôt pouvoir nous attaquer au vrai problème, la la la lalère

En attendant, c'est le week-end...
A+
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Bon, maintenant, les filtres filtrent selon ce que je voulais obtenir. Enfin, seulement la première colonne. L'évolution suivante est l'ajout d'une table de relation et d'une table de données, et voir si le filtrage fonctionne toujours.
Il y a un petit bug que je n'ai pas encore corrigé et qui traine depuis le début : il arrive que le changement de table dans le filtre perturbe le programme qui ne sort plus rien dans le fenêtre du bas. Dans ce cas, on le ferme et on le relance, ça ne prend pas de temps.
De même, quand on change de table, il faut d'abord choisir le champ vide, puis ensuite la table qu'on désire. Des petites bricoles à corriger ultérieurement.
Edit : A n'y rien comprendre, ça remarche...
J'avais retiré le lien de téléchargement, car j'obtenais une "OS error 16r57" quand je tentais d'utiliser la base que j'avais uploadé sur le forum. En fait le listing se chargeait bien et le programme fonctionnait mais l'erreur n'arrivait que lorsque je voulais analyser les tables de la base, que ce soit avec wine ou windows. Mon comparateur de fichier ne trouvait aucune différence entre les fichiers téléchargés et les fichiers originaux. Le fichier original fonctionnait sans problème... L'hypothèse vraisemblable est que mes fichiers basics sont sur un disque dur USB, et qu'il a parfois un petit temps de latence pendant lequel il est indisponible. C'est la première fois que ça me fait ça.
Donc je remet le lien : /upload/base-de-donnees-v0_04---filtres.zip
Edité par Christophe Le 24/08/2017 à 02h44
Il y a un petit bug que je n'ai pas encore corrigé et qui traine depuis le début : il arrive que le changement de table dans le filtre perturbe le programme qui ne sort plus rien dans le fenêtre du bas. Dans ce cas, on le ferme et on le relance, ça ne prend pas de temps.
De même, quand on change de table, il faut d'abord choisir le champ vide, puis ensuite la table qu'on désire. Des petites bricoles à corriger ultérieurement.
Edit : A n'y rien comprendre, ça remarche...
J'avais retiré le lien de téléchargement, car j'obtenais une "OS error 16r57" quand je tentais d'utiliser la base que j'avais uploadé sur le forum. En fait le listing se chargeait bien et le programme fonctionnait mais l'erreur n'arrivait que lorsque je voulais analyser les tables de la base, que ce soit avec wine ou windows. Mon comparateur de fichier ne trouvait aucune différence entre les fichiers téléchargés et les fichiers originaux. Le fichier original fonctionnait sans problème... L'hypothèse vraisemblable est que mes fichiers basics sont sur un disque dur USB, et qu'il a parfois un petit temps de latence pendant lequel il est indisponible. C'est la première fois que ça me fait ça.
Donc je remet le lien : /upload/base-de-donnees-v0_04---filtres.zip
Edité par Christophe Le 24/08/2017 à 02h44
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
L'ajout d'une table de donnée et d'une table de relation a mis un évidence un bug qui permettait à une table de relation, normalement invisible à l'utilisateur, de prendre la place d'une table de donnée sans que son nom apparaisse dans la combobox, l'utilisateur croyait sélectionner la table de donnée. Bug corrigé, il n'y a maintenant que les tables de données qui sont mises à disposition de l'utilisateur. (je fournirais le listing plus tard, quand il sera plus complet et fiabilisé)
Il reste toujours le bug du programme qui se met à faire n'importe quoi après un changement de table, c'est probablement un mélange quelque part, deux variables qui portent le même nom, ou un truc du genre. Ça reste à découvrir.
Petit à petit on avance dans le bon sens, mais je n'aurais jamais imaginé que ça me prendrait autant de temps ni d'énergie. Soit la programmation n'est pas vraiment mon truc, soit on aborde des domaines auxquels je n'était pas du tout préparé, donc il faut tout mettre en place, tout tester, avant de trouver la voie qui semble la bonne.
D'ailleurs, à ce titre et pour le moment, la lecture des fichiers se fait séquentiellement, du début à la fin, donc dès qu'on a besoin de retrouver une donnée il faut fermer le fichier, le ré-ouvrir, et le re-parcourir depuis le début, d'où des circonvolutions qui complexifient le programme.
Je reste sur ce système qui fonctionne, malgré tout, et dans une éventuelle seconde version, j'essaierais les fichiers à accès aléatoire (ça m'a toujours amusé, cette appellation, on peut penser qu'une fois l'ordi veut bien, une fois il veut pas et qu'on ne sait pas quand il voudra, enfin c'est aléatoire, comme accès
En fait c'est un mode de gestion de fichier dans lequel on peut aller directement à un enregistrement spécifié.
Je pars oublier un peu toute cette technologie. Il est vrai qu'il y a bientôt un an j'avais dit que j'arrêtais, c'est raté pour cette fois
Edité par Christophe Le 24/08/2017 à 21h41
Il reste toujours le bug du programme qui se met à faire n'importe quoi après un changement de table, c'est probablement un mélange quelque part, deux variables qui portent le même nom, ou un truc du genre. Ça reste à découvrir.
Petit à petit on avance dans le bon sens, mais je n'aurais jamais imaginé que ça me prendrait autant de temps ni d'énergie. Soit la programmation n'est pas vraiment mon truc, soit on aborde des domaines auxquels je n'était pas du tout préparé, donc il faut tout mettre en place, tout tester, avant de trouver la voie qui semble la bonne.
D'ailleurs, à ce titre et pour le moment, la lecture des fichiers se fait séquentiellement, du début à la fin, donc dès qu'on a besoin de retrouver une donnée il faut fermer le fichier, le ré-ouvrir, et le re-parcourir depuis le début, d'où des circonvolutions qui complexifient le programme.
Je reste sur ce système qui fonctionne, malgré tout, et dans une éventuelle seconde version, j'essaierais les fichiers à accès aléatoire (ça m'a toujours amusé, cette appellation, on peut penser qu'une fois l'ordi veut bien, une fois il veut pas et qu'on ne sait pas quand il voudra, enfin c'est aléatoire, comme accès

En fait c'est un mode de gestion de fichier dans lequel on peut aller directement à un enregistrement spécifié.
Je pars oublier un peu toute cette technologie. Il est vrai qu'il y a bientôt un an j'avais dit que j'arrêtais, c'est raté pour cette fois

Edité par Christophe Le 24/08/2017 à 21h41
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Que tu ouvre-ferme des fichiers ou que tu transfère de tableaux en tableaux ou en chaînes, c'est du pareil au même. Dans un cas tu fais travailler le disque, et il est fait pour ça; dans l'autre c'est la RAM; et on manque rarement de RAM. Pour les temps de transfert, ça a l'air de se valoir, il faudrait tester sur des gros volumes; je me suis arrêté à 500 000.
Ce qui est long, c'est l'affichage et le tri multi niveaux.
Arrêter..Ne pas arrêter...Perso tant que je trouve des trucs à faire je les fais et j'en cherche d'autres; en me maudissant de mon manque de rigueur.
A-tu ou a-tu eu "Access" de "Mini-Mou-crosoft" ? Je l'ai eu peu de temps, ça ne m'avait pas paru casser des briques, mais ça a pu évoluer ?.
Ce qui est long, c'est l'affichage et le tri multi niveaux.
Arrêter..Ne pas arrêter...Perso tant que je trouve des trucs à faire je les fais et j'en cherche d'autres; en me maudissant de mon manque de rigueur.
A-tu ou a-tu eu "Access" de "Mini-Mou-crosoft" ? Je l'ai eu peu de temps, ça ne m'avait pas paru casser des briques, mais ça a pu évoluer ?.
____________________
Roro
Roro
Citation:
Pour l'ordi, oui, quoique le temps de lecture est dépendant de la mécanique du disque, et qu'on ne sait pas comment sont gérés en interne les accès séquentiels ou aléatoires du basic. Pour nous, par contre, il est intéressant de se poser la question de la commodité d'une méthode par rapport à une autre. Après on peut essayer de voir laquelle est la plus performante.
Travailler directement sur les fichiers est un test, et en meme temps j'en apprend davantage sur leur fonctionnement. L'autre point intéressant, c'est de pouvoir économiser de la mémoire, même si ce n'est plus aussi critique qu'autrefois. Tout dépend de la gourmandise des applications qui tournent en meme temps, et de la taille des tables qu'on voudrait mettre en tableau (les pixels d'un film, par exemple)
On est dans l'expérimental pur.
Citation:
Non, j'ai eu accès à Access il y a 20 ans, le temps d'une formation. Aucune idée de savoir ce qu'il est devenu depuis. L'univers des bases de données me semble quand même assez abscon. J'ai essayé d'utiliser le module "base" d'Open Office avant le schisme Open Office - Libre Office, mais je le trouvais trop contraignant, je n'arrivais à afficher, dans un état, qu'une table liée à mon critère alors qu'il peut y avoir plusieurs tables qui lui sont liées. J'ai fini par laisser tomber, ça ne devait pas être d'une importance capitale.
L'objet actuel de cette discussion n'est qu'un visualiseur, il ne fait que lire l'état des liaison entre les tables et il affiche le rapport correspondant. Si un jour je gère aussi la modification dynamique des tables par le logiciel, là j'aurais créé une vraie base, qu'on pourra connecter à ton programme qui créait l'emploi du temps des professeurs. Ce qui, au vu de l'évolution du projet, est une douce ou fumeuse utopie
Mais, bon, maintenant qu'on est lancé...
Que tu ouvre-ferme des fichiers ou que tu transfère de tableaux en tableaux ou en chaînes, c'est du pareil au même.
Pour l'ordi, oui, quoique le temps de lecture est dépendant de la mécanique du disque, et qu'on ne sait pas comment sont gérés en interne les accès séquentiels ou aléatoires du basic. Pour nous, par contre, il est intéressant de se poser la question de la commodité d'une méthode par rapport à une autre. Après on peut essayer de voir laquelle est la plus performante.
Travailler directement sur les fichiers est un test, et en meme temps j'en apprend davantage sur leur fonctionnement. L'autre point intéressant, c'est de pouvoir économiser de la mémoire, même si ce n'est plus aussi critique qu'autrefois. Tout dépend de la gourmandise des applications qui tournent en meme temps, et de la taille des tables qu'on voudrait mettre en tableau (les pixels d'un film, par exemple)
On est dans l'expérimental pur.
Citation:
A-tu ou a-tu eu "Access"
Non, j'ai eu accès à Access il y a 20 ans, le temps d'une formation. Aucune idée de savoir ce qu'il est devenu depuis. L'univers des bases de données me semble quand même assez abscon. J'ai essayé d'utiliser le module "base" d'Open Office avant le schisme Open Office - Libre Office, mais je le trouvais trop contraignant, je n'arrivais à afficher, dans un état, qu'une table liée à mon critère alors qu'il peut y avoir plusieurs tables qui lui sont liées. J'ai fini par laisser tomber, ça ne devait pas être d'une importance capitale.
L'objet actuel de cette discussion n'est qu'un visualiseur, il ne fait que lire l'état des liaison entre les tables et il affiche le rapport correspondant. Si un jour je gère aussi la modification dynamique des tables par le logiciel, là j'aurais créé une vraie base, qu'on pourra connecter à ton programme qui créait l'emploi du temps des professeurs. Ce qui, au vu de l'évolution du projet, est une douce ou fumeuse utopie

Mais, bon, maintenant qu'on est lancé...
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Aaaaaah ! ça y est ! J'ai compris ce que tu fais!
C'est comme un gestionnaire d'idées ou de projets: connaître les relations entres les choses.
C'est pas mal pour mettre en relations des articles ou parties de Wikipédia; je propose le système nerveux comme thème; bien propice aux relations.
Je vais attendre que ton truc te paraisse abouti avec un exemple. Le système de stockage sur fichiers .txt est très bien, c'est simple.
Je reste perplexe sur les noms des relations, ce que tu appelle: " l'état des liaison entre les tables et le rapport correspondant".
Citation:
Ce n'est pas utopique, c'est faisable "fixe" avec des boucles imbriquées ou récursif (si on y arrive, soyons modeste, et réaliste); mais on se heurte très vite à la masse des possibles (sorties) et à leur dépouillement. Mais bon, en filtrant c'est gérable, on peut aussi y appliquer de la statistique et autres...; mais on entre dans les cas particuliers (tel établissement, telles contraintes, tel code particulier...)
C'est comme un gestionnaire d'idées ou de projets: connaître les relations entres les choses.
C'est pas mal pour mettre en relations des articles ou parties de Wikipédia; je propose le système nerveux comme thème; bien propice aux relations.
Je vais attendre que ton truc te paraisse abouti avec un exemple. Le système de stockage sur fichiers .txt est très bien, c'est simple.
Je reste perplexe sur les noms des relations, ce que tu appelle: " l'état des liaison entre les tables et le rapport correspondant".
Citation:
l'emploi du temps des professeurs
Ce n'est pas utopique, c'est faisable "fixe" avec des boucles imbriquées ou récursif (si on y arrive, soyons modeste, et réaliste); mais on se heurte très vite à la masse des possibles (sorties) et à leur dépouillement. Mais bon, en filtrant c'est gérable, on peut aussi y appliquer de la statistique et autres...; mais on entre dans les cas particuliers (tel établissement, telles contraintes, tel code particulier...)
____________________
Roro
Roro
Citation:
Ce n'est pas ton projet que je trouve utopique, c'est le mien. Lorsqu'il donnera un reflet fidèle des fichiers, on pourra peut-être tenter de le brancher à ton générateur, ce qui était l'intention première de cette discussion, mais je n'ai pas encore réfléchi à comment on va procéder, ni si sera possible.
Citation:
C'était l'état à l'instant "t" de la base, pas l'état qui fournit sous forme lisible le résultat d'une recherche. Le programme lit simplement les relations qui existent entre les tables, et affiche à l'écran les relations qu'on désire voir, il ne les modifie pas et il n'en crée pas non plus.
J'ai aussi mon vocabulaire perso
Pour le fonctionnement, si par exemple j'ai une table qui recense des professeurs, une table qui recense des matières, ces deux tables seront tables de données, je peux utiliser une table que j’appellerais "enseigne" et qui ne contiendra que des relations "profs-matières". Si Bidule enseigne le dessin et les maths, j'aurais dans "enseigne" deux relations, "Bidule-dessin" et "Bidule-maths" (en fait, leur identifiant)
A partir de là, on peut chercher dans la table enseigne :
les professeurs qui enseignent le dessin, la requête nous donnera Bidule
les professeurs qui enseignent les mathématiques : bidule
les professeurs qui enseignent la philo : pas de résultat
les matières enseignées par Bidule : dessin et maths
...
et les afficher dans un état.
Mes souvenirs en base de données sont plutôt lointains et je n'ai guère envie de me replonger dans des ouvrages techniques. Cette base est un essai "pour le fun", et avec ton histoire de profs qui enseignent des matières pendant des créneaux horaires, il était tentant d'essayer de créer une petite base simple en basic, pour voir où cela allait nous amener.
Citation:
Peut-être que j'étais trop accaparé par la programmation pour être plus explicite... Et des fois aussi on a sa propre solution "qui-va-bien" en tête, et on se demande pourquoi d'autres cherchent ailleurs, hein ?
Voili voilà
Edité par Christophe Le 27/08/2017 à 15h11
Ce n'est pas utopique, c'est faisable "fixe" avec des boucles imbriquées ou récursif (si on y arrive, soyons modeste, et réaliste)
Ce n'est pas ton projet que je trouve utopique, c'est le mien. Lorsqu'il donnera un reflet fidèle des fichiers, on pourra peut-être tenter de le brancher à ton générateur, ce qui était l'intention première de cette discussion, mais je n'ai pas encore réfléchi à comment on va procéder, ni si sera possible.
Citation:
Je reste perplexe sur les noms des relations, ce que tu appelle: " l'état des liaison entre les tables et le rapport correspondant".
C'était l'état à l'instant "t" de la base, pas l'état qui fournit sous forme lisible le résultat d'une recherche. Le programme lit simplement les relations qui existent entre les tables, et affiche à l'écran les relations qu'on désire voir, il ne les modifie pas et il n'en crée pas non plus.
J'ai aussi mon vocabulaire perso

Pour le fonctionnement, si par exemple j'ai une table qui recense des professeurs, une table qui recense des matières, ces deux tables seront tables de données, je peux utiliser une table que j’appellerais "enseigne" et qui ne contiendra que des relations "profs-matières". Si Bidule enseigne le dessin et les maths, j'aurais dans "enseigne" deux relations, "Bidule-dessin" et "Bidule-maths" (en fait, leur identifiant)
A partir de là, on peut chercher dans la table enseigne :
les professeurs qui enseignent le dessin, la requête nous donnera Bidule
les professeurs qui enseignent les mathématiques : bidule
les professeurs qui enseignent la philo : pas de résultat
les matières enseignées par Bidule : dessin et maths
...
et les afficher dans un état.
Mes souvenirs en base de données sont plutôt lointains et je n'ai guère envie de me replonger dans des ouvrages techniques. Cette base est un essai "pour le fun", et avec ton histoire de profs qui enseignent des matières pendant des créneaux horaires, il était tentant d'essayer de créer une petite base simple en basic, pour voir où cela allait nous amener.
Citation:
Aaaaaah ! ça y est ! J'ai compris ce que tu fais!
Peut-être que j'étais trop accaparé par la programmation pour être plus explicite... Et des fois aussi on a sa propre solution "qui-va-bien" en tête, et on se demande pourquoi d'autres cherchent ailleurs, hein ?

Voili voilà
Edité par Christophe Le 27/08/2017 à 15h11
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Le blème c'est le temps de traitement; avec seulement 1000 lignes et en shuntant l'affichage, on dépasse la minute pour le tri simple
____________________
Roro
Roro
Roland:
C'est en cela que je disais que Just/Liberty Basic n'était pas fait pour les bases de données, une fonction de tri y est très utile, et nous n'avons pas d'instruction de tri de table dans JB/LB... Donc il faut la programmer avec les instructions existantes, et le traitement sera nécessairement plus long qu'avec une instruction unique.
Le blème c'est le temps de traitement; avec seulement 1000 lignes et en shuntant l'affichage, on dépasse la minute pour le tri simple
C'est en cela que je disais que Just/Liberty Basic n'était pas fait pour les bases de données, une fonction de tri y est très utile, et nous n'avons pas d'instruction de tri de table dans JB/LB... Donc il faut la programmer avec les instructions existantes, et le traitement sera nécessairement plus long qu'avec une instruction unique.
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Citation:
Non, c'est juste parce que le langage est interprété
Plus on est proche du langage machine plus c'est rapide, mais plus c'est merdique à coder.
plus long qu'avec une instruction unique
Non, c'est juste parce que le langage est interprété
Plus on est proche du langage machine plus c'est rapide, mais plus c'est merdique à coder.
____________________
Roro
Roro
Je te trouve quand même un tantinet affirmatif. Le compilateur ne saura jamais ce que tu veux faire de ton code, et appliquera donc un traitement standard pour chacune des instructions qu'il a traiter pour créer l'exécutable, et tant pis s'il y a des pas pour rien 
Un petit testeur improvisé pour comparer deux méthodes différentes d'arriver au même résultat :
Code VB :
'Tophe

Un petit testeur improvisé pour comparer deux méthodes différentes d'arriver au même résultat :
Code VB :
'comparaison de rapidité de deux blocs d'instructions ayant même fonction nombressais=25 nombredetours=1000 WindowWidth = 800 WindowHeight = 400 nomainwin statictext #1.qtetest,"Quantité de tests :", 10, 20, 150, 20 TEXTBOX #1.qtetest1, 170, 17, 100, 20 statictext #1.qteboucle,"Quantité de boucles par test :", 10, 40, 150, 20 TEXTBOX #1.qteboucle1, 170, 37, 100, 20 BUTTON #1.start, "Démarrer test", [start], ul, 280, 17, 100, 40 TEXTEDITOR #1.result, 10, 70, 790, 200 BUTTON #1.quit, "Quitter", [quitter], ul, 680, 310, 100, 20 open "Durée d'exécution d'un bloc d'instructions basic" for window as #1 print #1.qtetest1, str$(nombressais) print #1.qteboucle1, str$(nombredetours) print #1, "trapclose [quitter]" wait [start] print #1.qtetest1, "!contents? nombressais$" print #1.qteboucle1, "!contents? nombredetours$" nombressais=val(nombressais$) nombredetours=val(nombredetours$) dim essais(nombressais,2) print #1.result,"" print #1.result,"Test en cours pour ";nombressais$;" essais de "; nombredetours$;" boucles." for numessai=0 to nombressais-1 debut=time$("ms") 'instructions à tester : les placer à l'intérieur de la boucle "a" for a=1 to nombredetours b=int(rnd(1)*10) if b=0 then c=c if b=1 then c=c if b=2 then c=c if b=3 then c=c if b=4 then c=c if b=5 then c=c if b=6 then c=c if b=7 then c=c if b=8 then c=c if b=9 then c=c next fin=time$("ms") essais(numessai,0)=fin-debut debut=time$("ms") 'instructions à tester : les placer à l'intérieur de la boucle "a" for a=1 to nombredetours b=int(rnd(1)*10) select case b case 0 : c=c case 1 : c=c case 2 : c=c case 3 : c=c case 4 : c=c case 5 : c=c case 6 : c=c case 7 : c=c case 8 : c=c case 9 : c=c end select next fin=time$("ms") essais(numessai,1)=fin-debut next b=0:bmin=0:bmax=0:bsum=0:bmoy=0 c=0:cmin=0:cmax=0:csum=0:cmoy=0 for a=0 to nombressais-1 b=essais(a,0) if a=0 then bmin=b if b<bmin then bmin=b if b>bmax then bmax=b bsum=bsum+b c=essais(a,1) if a=0 then cmin=c if c<cmin then cmin=c if c>cmax then cmax=b csum=csum+c next bmoy=bsum/nombressais cmoy=csum/nombressais print #1.result,"série de tests achevées" print #1.result, "Solution 1 : durée mini = ";bmin;" ms, durée maxi = ";bmax;" ms, durée moyenne = ";bmoy;" ms" print #1.result, "Solution 2 : durée mini = ";cmin;" ms, durée maxi = ";cmax;" ms, durée moyenne = ";cmoy;" ms" wait [quitter] close #1 end
'Tophe
____________________
Just BASIC v2.0 :
utilisation occasionnelle ou vérification/débugage difficile avec Windows XP sur un petit eeepc
Just BASIC v2.0 :
Dans ces deux c'est logique
Ton idée de "Testeur-Comparateur est très bonne
Pour générer le fichier de 7 mots 2000 lignes j'ai bricolé un "Chargeur" (aléatoire) qui ne demande qu'à être amélioré.
J'aimerais bien trouver la relation exacte entre le temps et la longueur pour deux boucles imbriquées du genre: (nlignes * nmots/ligne)/coeff lié à nlignes ?
En faisant empiriquement par tests on doit voir la forme de la courbe.
Ton idée de "Testeur-Comparateur est très bonne
Pour générer le fichier de 7 mots 2000 lignes j'ai bricolé un "Chargeur" (aléatoire) qui ne demande qu'à être amélioré.
J'aimerais bien trouver la relation exacte entre le temps et la longueur pour deux boucles imbriquées du genre: (nlignes * nmots/ligne)/coeff lié à nlignes ?
En faisant empiriquement par tests on doit voir la forme de la courbe.
____________________
Roro
Roro
• Index
1 Utilisateur en ligne : 0 Administrateur, 0 Modérateur, 0 Membre et 1 Visiteur
Utilisateur en ligne : Aucun membre connecté
Utilisateur en ligne : Aucun membre connecté
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie