![]() ![]() | |
Auteur | Messages |
---|---|
linuxos | #16 Posté le 3/3/2025 à 19:01:04 |
Un peu de sel, de poivre et la crevette sera... ![]() | Gambix, Il me semble qu'il serait possible de permettre ce mécanisque de controle d'un quelconque Jeton au niveau du Mini Serveur Web, pour remettre le dis Jeton a l'Application Web. Mais bon, il faudrait demander l'avis a Benoit et si eventuellement il a le temps. Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
linuxos | #17 Posté le 3/3/2025 à 19:01:59 |
Un peu de sel, de poivre et la crevette sera... ![]() | Bonjour, Suite des defis... Defis 5 - BD, AUTO-INCREMENT, INDEX Lors de la définition des tables de la base de données, il y a quelques astuces a ne pas manquer qui facilite grandement le gestion de la base de données par la suite. L'IDE de Gambas intégre nativement un Editeur de base de données, faure bien pratique, mais qui ne gére pas toutes les spécificités de différentes base de données, tels que SQLite3, MySQL ou PostGreSQL, etc... Hors, comme vous le constaterai dans chaque tables que j'ai défini, il y a toujours un champ 'ID' (Ex: id_bien_document, id_document), et celui-ci est important car il doit-etre Unique et généralement de type Nombre Entier. De ce fait, durant la vie des dites tables, les enregistrements sont amenées a etre Ajouté, Supprimé, donc techniquement il va falloir s'assurer de ne pas avoir de doublon d'ID sinon SQLite3 va retourner une erreur de violation de contrainte. c'est ici que la premiere astuce intervient pour faciliter tout cela mais necessite d'utiliser un programme externe a l'IDE car non disponible dans l'Editeur de BD de Gambas. Pour ma part j'utilise 'DB Browser for SQLite' (mais aussi "DBeaver Community") afin de rajouter l'option 'AUTO-INCREMENT" sur le champ ID de toutes mes tables. Avec cette option, plus besoin de gérer l'ID d'une table dans son code, c'est automatique et magiquement géré pas SQLite3 lui mếme. La 2eme astuce concerne l'ajout d'Index sur les champs des tables de la BD sur lequels vont se faire les principales recherche, tri, regroupement. Il va de soit que pour un petit nombre de données dans une table, la difference entre avoir des INDEXes ou pas est ridicule en terme de temps d'execution de requette, mais pour un grand nombre données a traverser, la difference sera plus que significative. Cela fait partie des choses a faire pour améliorer les performances des base de données. Defis 6 - Verrouillage de l'arriere plan d'une Application Web lors de PopUp Dans mon Application Web, il peut y avoir des panneaux 'PopUP' qui apparaissent pour saisir/editer un Locataire, une Note, etc... Lors de l'apparaition du PopUp dans la Page Web, il faut s'assurer que l'Utilisateur ne puisse pas cliquer partout dans le reste de la Page Web qui se trouve derriere le PopUp. Au debut j'utilisais la technique qui consiste a Verrouiller (Ex: WebButton.Enabled = False) tousles Objets de la Page Web qui étaient en arriere plan du PopUp mais lors du Verrouillage, les Objets vérrouillés on tendance a disparaitre un peu et devenir tout Grisatre. Cela focntionne très bien mais pas trés joli. Voici donc une autre façon de proceder qui est beaucoup plus élégante et pas très compliquée a mettre en oeuvre. L'idée c'est que lorsque le PopUp est afficher en avant plan de la Page Web, juste avant on fait afficher un WebForm dont le fond est 'Transparant' qui se retrouvera affiché ENTRE la Page Web et le PopUp. Ainsi, la Page Web ne sera pas altérée visuellement (contrairement au Verrouillage des Objets expliqué précedement), mais l'Utilisateur ne pourra plus rien 'cliquer' dans la Page Web, excepté ce qui se trouve dans le PopUp. Simple et élégant (Peut-etre cette technique est utilisée classiquement mais je ne le savait pas avant). Voila Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
gambix | #18 Posté le 3/3/2025 à 20:25:51 |
La simplicité évite les erreurs![]() | Pour l'auto incrément: https://gambaswiki.org/wiki/comp/gb.db/db/serial Ce que Gambas m'a appris c'est qu'avec le temps on peut être capable de tout. |
linuxos | #19 Posté le 3/3/2025 à 21:27:02 |
Un peu de sel, de poivre et la crevette sera... ![]() | Merci Gambix, autant pour moi je ne savais pas. Maintenant j'ai fait la modif dans toutes les tables de mon projet. Donc pour illustrer la remarque de Gambix: Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
linuxos | #20 Posté le 4/3/2025 à 16:13:14 |
Un peu de sel, de poivre et la crevette sera... ![]() | Gambix, Je reviens sur l'option que tu mentionnais plus haut a propos du Type 'Serie' (ou DB.Serial) et voici mon retour d'experience. Il se trouve que j'ai du faire marche arriere et revenir a ma configuration des ID de mes Tables de base de données pour la raison suivante. Tout d'abors, lorsque vous manipulez la structure de base de données, un conseil, faites une sauvegarde avant, car tout peut arriver. Dans mon cas, le changement de Type de Champ ID des tables de BD de 'ENTIER' + Clé Primaire + AUTOINCREMENT, c'est soldé pas une perte des données déja présente dans chaque table modifiée, au travers de l'Editeur de BD de Gambas IDE. Heureusement j'avais fait un sauvegarde par précaution. Apres plusieurs manipulations/essais, il s'avère qu'avec la bonne suite d'action pour changer du Type 'ENTIER' + Clé Primaire + AUTOINCREMENT -> au Type 'SERIE' + Clé primaire, il n'y pas de perte de données, mais c'est quand même très étrange Voici la procedure qui a fonctionne pour moi sans perte de donnée: 1 - Afficher la structure de la table concernée dans l'Editeur de BD de Gambas 2 - Cliquer sur l'onglet 'INDEX' pour afficher les INDEXes configurés 3 - Supprimer l'INDEX relatif au Champ ID de la Table si il y an a 1 4 - Sauvegarder les modifications de la Table - /!\ Etape importante 5 - Cliquer sur l'onglet 'CHAMP' pour afficher la liste de Champs de la Table 6 - Sauvegarder les modifications de la Table - /!\ Etape importante 7 - Cliquer sur l'onglet 'INDEX' pour afficher les INDEXes 8 - Créer un nouvel INDEX pour le Champ ID modifié dans les étapes précedantes 9 - Vérifiez que toutes les données dans la Table sont toujours la Maintenant, voici pourquoi ma solution de 'ENTIER' + Clé Primaire + AUTOINCREMENT me convient mieux. En fait cette solution, plutot que le type 'SERIE', dans l'Editeur de BD de Gambas, me laisse plus de souplesse, car dans l'Editeur si je supprime des enregistrements, je suis tout de meme libre de saisir le numero d'ID que je souhaite pour mes tests alors que dans le cas de d'ID de Type 'SERIE', l'Editeur de Gambas incrémente indefiniment l'ID et ne me laisse, en aucun cas, la possibilté de saisir le mien. Même si je peux force in ID de mon choix dans l'Editeur de BD, lors de l'insertion d'un nouvel enregistrement dans la Table par la commande SQL 'INSERT INTO ...", tout ce passe bien et SQLite defini lui meme le prochain numero d'ID a utiliser. Je pense que ce sont 2 fonctionnement differents, Type 'ENTIER + Clé Primaire + AUTOINCREMENT' ou Type 'SERIE', mais les 2 sont corrects. C'est juste que dans mon cas, le Type 'ENTIER ..." me laisse plus de souplesse le mon developpment de l'Application Web et du debugage. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
Patrick | #21 Posté le 4/3/2025 à 17:54:30 |
Bonsoir, Une petite question, par essence une appli web est multiutilisateur alors pourquoi le choix de sqlitle, mysql (ou autre) n'aurait pas été mieux ? Les clés en série, c'est bien mais pas toujours, il vaut parfois mieux une combinaison de plusieurs champs dans une table pour créer un index unique. Il y a aussi un truc très pratique dans le sql, les TRIGGER. Cela va permettre de contrôler les modifications que tu apportes à ta base. | |
linuxos | #22 Posté le 4/3/2025 à 18:42:50 |
Un peu de sel, de poivre et la crevette sera... ![]() | Bonjour Patrick, J'utilise SQlite par facilité, pas besoin de prendre un canon pour tuer une souris. J'ai déja utilisé SQLite avec 1.5 Millions d'enregistrements sans problème. Dernier point, SQLite peut etre utilisé purement en Mémoire, donc pour un gros traitement temporaire de données, monter toutes les données en mémoire, les traiter avec SQLite afin de produire un résultat, regroupement, totaux, tri, s'avere bien plus rapide que de faire ça directement dans la BD sur disque dur, bien que maintenant nous disposons de SSD ou NVME (mais ça reste très cher). Qui plus est cela ne change rien d'utiliser SQLite ou MySQL dans mon cas, Oui c'est une Application Web mais qui heberge sa propre base de données, au meme titre que si l'Application communiquait avec un MySQL sur la meme machine ou distant. Ce qui rend l'Application Web multi-utilisateur, c'est le fait qu'elle soit accessible sur le réseau, c'est pas d'avoir la base de données accessible sur le réseau. C'est l'Application Web qui communique avec la BD et elle seule. Est-ce que ça fait du sens ce que je dis, ou ai-je mal compris ta question ? Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
gambix | #23 Posté le 5/3/2025 à 10:01:53 |
La simplicité évite les erreurs![]() | La question reste que si deux sessions simultané veulent accéder a ta base en écriture.. comment tu gères les priorités ? Ce que Gambas m'a appris c'est qu'avec le temps on peut être capable de tout. |
linuxos | #24 Posté le 5/3/2025 à 15:41:09 |
Un peu de sel, de poivre et la crevette sera... ![]() | Bonjour, Voici la réponse a la question de requettes concurente vers une BD SQLite3. De ce que je lis, SQLite3 est dit 'transactionnel' et je vous invite a lire cette page afin de vor si j'ai bien compris. https://w3schools.tech/fr/tutorial/sqlite/sqlite_transactions A la fin de l'article, il est précisé que même si l'utilisateur ne gére pas ces requettes vers SQLite3 en mode 'transactionel', SQLite le fait par défaut, donc c'est plutot 'safe'. D'un autre coté, j'ai utilisé SQLite3 pour mon projet mais je pourrais très facilement permettre d'utiliser MySQL ou PostGreSQL car a part les lignes de code pour la connection, le reste du code sont des requettes SQL basiques, communes a tous ces types de Base de données. Bien sur il faudrait construire la même structure des tables dans chacun de type de base de données: MySQL, PostgreSQL Voila, je sais pas si ça réponds correctement a la question. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
linuxos | #25 Posté le 5/3/2025 à 16:04:26 |
Un peu de sel, de poivre et la crevette sera... ![]() | Autre point a préciser. Pour le moment le mécanisme pour l'imiter les accès aux utilisateurs en fonction de leur profile est prévus dans le code, mais il me fallait atteindre un certain degrés de maturité de l'application pour définir quoi autoriser ou bloquer, genre: Droit en Lecture, ou Lecture/Ecriture, panneaux accèssibles ou non, etc... Je tiens a préciser que normalement, pour mon usage personnel, je n'aurai pas besoin de tout ça, gérer des droits selon les utilisateurs, et d'autres choses, mais je poursuis l'exercice comme si c'etait un serieux projet avec tous les aspects a considérer. Je fais ça pour ma connaissance personnel, mais aussi dans le but de vous le retranscrire, et prouver aussi, quelque part, que Gambas a tout pour ce genre de projet et qu'il n'a pas a rougir de ses concurents plus populaire. Même si ce n'est pas facile, rien que le plaisir de coder en Gambas sans faire du HTML... c'est du bonheur (avis personnel) Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
valaquarus | #26 Posté le 5/3/2025 à 16:45:15 |
-- Unus Ex Altera --![]() | Bonsoir Linuxos, Je viens de créer une page Projets Expliqués pour ton projet en wiki. Tu me dis ce que tu en penses? Personnellement je n'aime pas le forum car il est par essence très volatile malgré le fait de pouvoir faire des recherches par mot clés pas toujours très rentables. Je n'ai pas les images mais tu peux les insérer toi-même au bon endroit dans ton texte, si tu le veux bien. Ce sera plus facile que de m'envoyer les images pour que je les déplace au bon endroit. Philippe Système d'exploitation : KDE Manjaro.testing ~ Version Gambas : 3.20.2 |
linuxos | #27 Posté le 5/3/2025 à 19:12:28 |
Un peu de sel, de poivre et la crevette sera... ![]() | Merci Philippe pour le travail, je viens de repasser le texte que tu as posé, corrigé quelques ue de mes fautes au passage. C'est que je me rend compte que j'ai été trés locace... Question pour toi, au vue de ce aue tu as lu de mon texte, cela te semble t'il comprehensible ou trop technique, fouilli, confu, juste pour savoir. Sinon j'ai refait le petit bout de diagramme en mode texte (pas pertinant) par une schema plus parlant que voici Je n'ai pas eu le temps de tout relire pour l'instant, je ferai ça sous peu. Je précise, j'habite au Canada donc je suis en décalage de -6h par rapport a vous. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
linuxos | #28 Posté le 5/3/2025 à 20:02:57 |
Un peu de sel, de poivre et la crevette sera... ![]() | Bon comme promis, j'ai déposé ici, dans la forge du Site le projet. Toutes les données dans l'application sont ici a titre d'exemple et toutes fictives. J'utilise Gambas version de DEV car Benoit a corrigé quelques bug lié justement a JIT et a gb.web.gui/Mini Server Web Il se peux que cela fonctionne très bien avec la derniere version stable de Gambas J'ai aussi ajouté la variable GB_HTTPD_HOST pour limiter l'acces a une IP, dans mon cas 127.0.0.1, et j'ai poussé ma modif a Benoit mais je ne suis pas sur quelle est été deja ajouté a la branche MASTER de Gambas. Dans votre cas cela n'aura pas d'impact, juste que l'Application répondra toutes requettes réseaux: 0.0.0.0 Je précise que certaines parties ne sont pas encore finies. - Panneau du Profil Utilisateur - Suppression d'un Bien Immo (la suppression des données n'est pas encore codée) - Panneau de la liste de Locataires - Gestion des droits/acces en fonction de l'utilisateur connecté Donc après avoir téléchargé l'Application, il faut activer le Mini serveur Web de l'application dans l'IDE. Le mieux est d'ajouter les variable d'environement nécessaires (même si des boutons sont disponible dans l'IDE pour ça) Il est aussi possible de voir tous les Log de l'application en temps réels, ceci a but informatif et aussi pour montrer comment je DEBUG ce genre d'application: - Crée le fichier '/tmp/gbGestionImmobilier.log' -> cmd: touch /tmp/gbGestionImmobilier.log - Suivre les Logs dans un terminal -> cmd: tail -f /tmp/gbGestionImmobilier.log Login/Password: admin/demo Important: Changer le Chemin vers le répertoire des Documents + Photos dans l'Application -> Administration Pour finir, la vidéo du jour pour montrer les derniers ajouts: video_dupliquer_et_gallerie_photo.mp4 J'ai enlevé les documents de test, ainsi que les photos pour alléger l'archive. Laissez moi savoir si cela fonctionne Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
valaquarus | #29 Posté le 5/3/2025 à 22:27:44 |
-- Unus Ex Altera --![]() | Bonsoir Olivier, voici l'adresse du lien vers ta page projet : https://gambas-fr.org/wiki/applicationweb Relis le tout et dis moi si les incrustations sont au bon endroit (à priori, oui). Ici il est 23h29 je vais pas tardé à me coucher. Philippe Système d'exploitation : KDE Manjaro.testing ~ Version Gambas : 3.20.2 |
linuxos | #30 Posté le 5/3/2025 à 23:18:55 |
Un peu de sel, de poivre et la crevette sera... ![]() | Merci Phillipe, J'espere avoir corrigé toutes les fautes et erreurs dans la page du projet maintenant. J'en ai profité pour retourcher le schema qui montre l'architecture de l'Application Web + Mini Serveur Web + CADDY en frontal pour faire du HTTPS. Olivier Lorsqu'on s'occupe d'informatique, il faut faire comme les canards... Paraître calme en surface et pédaler comme un forcené par en dessous. |
![]() ![]() |