Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Un gestionnaire de contacts avec SQLite3 (KGF.dll) | |
| | Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Mer 1 Déc 2021 - 10:39 | |
| J'ai fait une petite démonstration de l'utilisation de SQLite3 via KGF.dll. Il s'agit d'un gestionnaire de contacts - rien de bien compliqué. Au lancement, le programme affiche ceci: Les champs en haut de la page montrent: - le chemin vers SQLite3 avec sa valeur par défaut - le nom de la DLL pour SQLite3 avec sa valeur par défaut - le chemin et nom de la base de données SQLite3 contenant les contacts A côté de chacun de ces champs; il y a un bouton "..." permettant de changer ces valeurs par défaut. Voir les commentaires au début du code pour plus d'informations. Il y a aussi un grand bouton "Demarrer". Ce bouton lance le programme en utilisant les valeurs ci-dessus. Si la base de données n'existe pas, elle sera créée automatiquement, sinon elle sera ouverte. Dans tous les cas, le programme signale le nombre de contacts présents dans la base. Puis, il affiche: On voit qu'il y a la liste des contacts à gauche. Un clic dans cette liste sélectionne un contact. Le bandeau de commande au-dessus montre 6 boutons d'action: - Ajouter = création d'un nouveau contact - Modifier = changer le contenu des champs d'un contact sélectionné - Supprimer = supprimer le contact sélectionné - Trier = trier la liste des contacts selon un critère quelconque (tous les champs peuvent servir de critère !) - Filtrer = filtrer la liste des contacts par égalité, avec jokers et/ou par fourchettes de valeurs - Exporter/ Importer Chacun de ces boutons affiche sa propre fenêtre. Ce sont les deux derniers points qui font la démonstration de force de cet outil qu'est SQLite3. Pour expérimenter ces fonctions, commencez par créer quelques contacts (3 ou plus) par le bouton Ajouter. Voici la fenêtre sui s'affiche: On remplit les champs (seul le champ Nom est obligatoire, mais il est conseillé d'en remplir le plus possible). Le bouton Valider crée alors le contact et son nom et prénom s'affichent aussitôt dans la liste des contacts. Les fenêtres pour Modifier et Supprimer sont identiques mis à part le titre de la fenêtre. Par défaut, l'affichage dans la liste des contacts se fait dans l'ordre chronologique de leur création. Le bouton Trier permet de changer cela. Voici la fenêtre de tri: Par défaut, le tri s'effetuera selon le Nom suivi du Prénom. Mais les 3 combos permettent de choisir n'importe quel champ comme critère (Code postal, Portable, ...). On peut combiner jusqu'à 3 critères de tri. Le critère de tri, une fois choisi, reste actif jusqu'à ce qu'on change ce critère par un autre. Par défaut, tous les contacts sont inclus dans la liste des contacts (pas de filtrage). Le bouton Filter permet de définir une multitude de critères de filtrage. Voici sa fenêtre: Une aide simple est affichée en bas gauche. Le bouton Valider effectue le filtrage et ce filtrage restera en vigueur jusqu'à la prochaine demande de filtrage. Le bouton Vider le filtre efface tous les champs. En cliquant sur Valider ensuite, on annule le filtrage en vigueur et on revient à la situation sans filtrage. Le bouton Exporter / Importer affiche la fenêtre suivante: On peut choisir le fichier CSV pour l'export ou l'import. Puis, on choisit l'option Exporter ou Importer, puis valider. Voici le code du programme: - Code:
-
' Contacts_avec_SQLite.bas
' Ce programme montre la gestion d'une base de données de contacts ' à l'aide de SQLite de KGF.dll.
' SQLite3 est trouvé par défaut dans le dossier C:\SQLite367. ' Si ce dossier n'existe pas il sera créé automatiquement. ' Un bouton, actif au lancement du programme, permet de changer ce dossier.
' La version par défaut de SQLite2 est la version V.3.6.7. ' Un bouton, actif au lancement du programme, permet de changer cette version, ' par exemple pour la version V3.36 téléchargeable ici: https://sqlite.org/download.html
' La version par défaut est embarquée dans KGF.dll. ' Une éventuelle autre version devra être téléchargée séparément et copiée dans de dossier de SQLite3. ' Il est de la responsabilité de l'tilisateur de télécharger une éventuelle autre version et ' de la placer dans le dossier de SQLite3 avant le lancement du programme.
' Si le dossier choisi pour SQLite3 ne contient pas cette version de SQLite3, ' alors SQLite3 sera exrait de KGF.dll et placé dans ce dossier et la version par défaut ' sera utilisée, même si une autre version a été demandée.
' Par défaut, les contacts sont mémorisés dans un fichier MesContacts.db dans le dossier DIR_CURRENT$. ' Un bouton, actif au lancement du programme, permet de changer le nom et le chemin d'accès au fichier. ' Si ce fichier n'existe pas, il sera créé et formatté comme base SQLite3 vide.
' La base de données des contacts cntient les tables suivantes: ' Contacts liste des contacts
' Chaque contact est mémorisé sous forme d'un enregistrement avec le format suivant: ' ID numéro unique identifiant le contact (attribué automatiquement de façon chronologique) ' Nom nom de famille ' Prénom prénom(s) ' Numero numéro de rue ' Bis complément (bis, ter, ...) ' Adresse1 première ligne d'adresse ' Adresse2 seconde ligne d'adresse ' Codepost code postal ' Ville ville ' Pays paye ' Portable numéro de réléphone portable ' Fixe numéro de téléphone fixe ' Mail adresse mail ' Seul le champ Nom est obligatoire. ' Les autres champs peuvent rester vides, mais il est conseillé de remplir Prenom et Portable.
label close0, select_folder, select_version, select_base, demarrer, quitter label select_contact, ajouter_contact, valider, modifier_contact, supprimer_contact label trier_contact, filtrer_contact, vider_filtre, exporter_contacts, select_fichier
dim res%, racine$, s$, s1$, filter$, i%, err%, Colonnes$(14), n_contacts%, SQL%, action%, index%, n_champs% dim table$ table$ = "Contacts"
' numaros des objets du panel 200 (liste des contacts) dim n_list% ' numéros des objets du panel 300 (détails d'un contact) dim n_nom%, n_prenom%, n_numero%, n_bis%, n_adresse1%, n_adresse2%, n_codepost%, n_ville%, n_pays% dim n_portable%, n_fixe%, n_mail% ' numéros des objets du panel 400 (tri) dim n_tri1%, n_tri2%, n_tri3% ' numéros des objets du panel 500 (filtre) pour la colonne de gauche dim nf1_nom%, nf1_prenom%, nf1_numero%, nf1_bis%, nf1_adresse1%, nf1_adresse2%, nf1_codepost% dim nf1_ville%, nf1_pays%, nf1_portable%, nf1_fixe%, nf1_mail% ' numéros des objets du panel 500 (filtre) pour la colonne de droite dim nf2_nom%, nf2_prenom%, nf2_numero%, nf2_bis%, nf2_adresse1%, nf2_adresse2%, nf2_codepost% dim nf2_ville%, nf2_pays%, nf2_portable%, nf2_fixe%, nf2_mail% ' numéros des objets du pabel 600 (export/import) dim n_nomfichier%, n_exporter%, n_importer% ' variables contenant les critères de tri et de sélection en vigueur dim crit$, where$ crit$ = " ORDER BY ID" where$ = "" ' variables temporaires contenant les champs d'un contact dim ID_contact$ dim nom_contact$, prenom_contact$, numero_contact$, bis_contact$, adresse1_contact$, adresse2_contact$ dim codepost_contact$, ville_contact$, pays_contact$, portable_contact$, fixe_contact$, mail_contact$
dll_on "KGF.dll" creer_GUI()
end
' ************************************** ' ************************************** ' ********** les SUBs de service ******* ' ************************************** ' **************************************
sub creer_GUI() full_space 0 on_close 0,close0 caption 0,"Gestion de contacts avec SQLite3"
alpha 1 : top 1,10 : left 1,10 : caption 1,"Dossier SQLite3:" edit 2 : top 2,10 : left 2,100 : width 2,300 : inactive 2 text 2,"C:\SQLite367" button 3 : top 3,10 : left 3,left(2)+width(2) : width 3,30 : font_bold 3 : caption 3,"..." on_click 3,select_folder
alpha 4 : top 4,10 : left 4,left(3) + 70 : caption 4,"Version:" edit 5 : top 5,10 : left 5,left(4)+50 : width 5,100 : inactive 5 text 5,"SQLite367.dll" button 6 : top 6,10 : left 6,left(5)+width(5) : width 6,30 : font_bold 6 : caption 6,"..." on_click 6,select_version alpha 7 : top 7,10 : left 7,left(6) + 70 : caption 7,"Base de données:" edit 8 : top 8,10 : left 8,left(7)+100 : width 8,400 : inactive 8 text 8,dir_current$+"\MesContacts.db" button 9 : top 9,10 : left 9,left(8)+width(8) : width 9,30 : font_bold 9 : caption 9,"..." on_click 9,select_base button 10 : top 10,40 : left 10,300 : width 10,width_client(0)-600 : caption 10,"Démarrer" font_bold 10 : font_size 10,16 : on_click 10,demarrer : inactive 10 button 11 : top 11,40 : left 11,300 : width 11,width_client(0)-600 : caption 11,"Quitter" font_bold 11 : font_size 11,16 : on_click 11,quitter : hide 11
memo 1001 : hide 1001 : bar_both 1001 memo 1011 : hide 1011 : bar_both 1011
colonnes$(1) = "ID" colonnes$(2) = "Nom" colonnes$(3) = "Prenom" colonnes$(4) = "Numero" colonnes$(5) = "Bis" colonnes$(6) = "Adresse1" colonnes$(7) = "Adresse2" colonnes$(8) = "Codepost" colonnes$(9) = "Ville" colonnes$(10) = "Pays" colonnes$(11) = "Portable" colonnes$(12) = "Fixe" colonnes$(13) = "Mail" ' panel des boutons de commande panel 100 : hide 100 : top 100,70 : left 100,0 : width 100,width_client(0) : height 100,40 color 100,255,255,0 button 101 : parent 101,100 : top 101,5 : left 101,10 : width 101,120 : caption 101,"Ajouter" font_bold 101 : on_click 101,ajouter_contact button 102 : parent 102,100 : top 102,5 : left 102,left(101)+width(101)+20 : width 102,120 caption 102,"Modifier" : font_bold 102 : on_click 102,modifier_contact button 103 : parent 103,100 : top 103,5 : left 103,left(102)+width(102)+20 : width 103,120 caption 103,"Supprimer" : font_bold 103 : on_click 103,supprimer_contact button 104 : parent 104,100 : top 104,5 : left 104,left(103)+width(103)+20 : width 104,120 caption 104,"Trier" : font_bold 104 : on_click 104,trier_contact button 105 : parent 105,100 : top 105,5 : left 105,left(104)+width(104)+20 : width 105,120 caption 105,"Filtrer" : font_bold 105 : on_click 105,filtrer_contact button 106 : parent 106,100 : top 106,5 : left 106,left(105)+width(105)+20 : width 106,180 caption 106,"Exporter / Importer" : font_bold 106 : on_click 106,exporter_contacts ' panel des données panel 200 : hide 200 : top 200,110 : left 200,0 : width 200,width(100) : height 200,height_client(0) - top(200)
list 201 : parent 201,200 : top 201,10 : left 201,10 : width 201,200 : height 201,height_client(200)-20 on_click 201,select_contact n_list% = 201 ' panel des champs d'un contact panel 300 : hide 300 : parent 300,200 : top 300,10 : left 300,left(201)+width(201)+30 width 300,width_client(200)-left(300)-10 : height 300,height(201) : color 300,255,95,255 alpha 301 : parent 301,300 : left 301,40 : top 301,80 : font_size 301,10 : caption 301,"Nom:" edit 302 : parent 302,300 : left 302,150 : top 302,top(301) : width 302,300 n_nom% = 302 alpha 303 : parent 303,300 : left 303,40 : top 303,top(301)+30 : font_size 303,10 : caption 303,"Prénom:" edit 304 : parent 304,300 : left 304,150 : top 304,top(303) : width 304,300 n_prenom% = 304 alpha 305 : parent 305,300 : left 305,40 : top 305,top(303)+50 : font_size 305,10 : caption 305,"Adresse:" edit 306 : parent 306,300 : left 306,150 : top 306,top(305) : width 306,40 n_numero% = 306 combo 307 : parent 307,300 : left 307,left(306)+width(306)+20 : top 307,top(305) : width 307,60 item_add 307,"" item_add 307,"Bis" item_add 307,"Ter" item_add 307,"Quater" res% = dll_call2("SelectComboBoxItem",handle(307),1) n_bis% = 307 edit 308 : parent 308,300 : left 308,left(307)+width(307)+20 : top 308,top(307) : width 308,300 n_adresse1% = 308 edit 309 : parent 309,300 : left 309,left(308) : top 309,top(308)+30 : width 309,300 n_adresse2% = 309 alpha 310 : parent 310,300 : left 310,40 : top 310,top(309)+30 : font_size 310,10 : caption 310,"Ville:" edit 311 : parent 311,300 : left 311,150 : top 311,top(310) : width 311,40 n_codepost% = 311 edit 312 : parent 312,300 : left 312,left(311)+width(311)+20 : top 312,top(310) : width 312,300 n_ville% = 312 alpha 313 : parent 313,300 : left 313,40 : top 313,top(311)+30 : font_size 313,10 : caption 313,"Pays:" edit 314 : parent 314,300 : left 314,left(312) : top 314,top(311)+30 : width 314,300 n_pays% = 314 alpha 315 : parent 315,300 : left 315,40 : top 315,top(314)+50 : font_size 315,10 : caption 315,"Portable:" edit 316 : parent 316,300 : left 316,150 : top 316,top(315) : width 316,100 n_portable% = 316 alpha 317 : parent 317,300 : left 317,40 : top 317,top(316)+30 : font_size 317,10 : caption 317,"Fixe:" edit 318 : parent 318,300 : left 318,150 : top 318,top(317) : width 318,100 n_fixe% = 318 alpha 319 : parent 319,300 : left 319,40 : top 319,top(318)+30 : font_size 319,10 : caption 319,"Mail:" edit 320 : parent 320,300 : left 320,150 : top 320,top(319) : width 320,300 n_mail% = 320
alpha 330 : parent 330,300 : top 330,20 : left 330,150 : font_size 330,16 : font_bold 330 button 331 : parent 331,300 : top 331,top(320)+50 : left 331,150 : width 331,300 : caption 331,"Valider" font_bold 331 : font_size 331,12 : on_click 331,valider ' panel des critères de tri panel 400 : hide 400 : parent 400,200 : top 400,10 : left 400,left(201)+width(201)+30 width 400,width_client(200)-left(400)-10 : height 400,height(201) : color 400,255,95,255 alpha 401 : parent 401,400 : top 401,20 : left 401,150 : font_size 401,16 : font_bold 401 caption 401,"Critères de tri" alpha 402 : parent 402,400 : left 402,20 : top 402,80 : font_size 402,12 : caption 402,"Trier par:" combo 403 : parent 403,400 : left 403,150 : top 403,top(402) : width 403,80 n_tri1% = 403 : charger_criteres_tri(403,2)
combo 404 : parent 404,400 : left 404,left(403)+width(403)+20 : top 404,top(402) : width 404,80 n_tri2% = 404 : charger_criteres_tri(404,3) combo 405 : parent 405,400 : left 405,left(404)+width(404)+20 : top 405,top(402) : width 405,80 n_tri3% = 405 : charger_criteres_tri(405,1)
button 431 : parent 431,400 : top 431,top(404)+50 : left 431,150 : width 431,300 : caption 431,"Valider" font_bold 431 : font_size 431,12 : on_click 431,valider
' panel des critères de filtrage panel 500 : hide 500 : parent 500,200 : top 500,10 : left 500,left(201)+width(201)+30 width 500,width_client(200)-left(500)-10 : height 500,height(201) : color 500,255,95,255 alpha 501 : parent 501,500 : left 501,20 : top 501,80 : font_size 501,10 : caption 501,"Nom:" edit 502 : parent 502,500 : left 502,100 : top 502,top(501) : width 502,300 nf1_nom% = 502 alpha 503 : parent 503,500 : left 503,20 : top 503,top(501)+30 : font_size 503,10 : caption 503,"Prénom:" edit 504 : parent 504,500 : left 504,100 : top 504,top(503) : width 504,300 nf1_prenom% = 504 alpha 505 : parent 505,500 : left 505,20 : top 505,top(503)+50 : font_size 505,10 : caption 505,"Adresse:" edit 506 : parent 506,500 : left 506,100 : top 506,top(505) : width 506,40 nf1_numero% = 506 combo 507 : parent 507,500 : left 507,left(506)+width(506)+20 : top 507,top(505) : width 507,60 item_add 507,"" item_add 507,"Bis" item_add 507,"Ter" item_add 507,"Quater" res% = dll_call2("SelectComboBoxItem",handle(507),1) nf1_bis% = 507 edit 508 : parent 508,500 : left 508,left(507)+width(507)+20 : top 508,top(507) : width 508,300 nf1_adresse1% = 508 edit 509 : parent 509,500 : left 509,left(508) : top 509,top(508)+30 : width 509,300 nf1_adresse2% = 509 alpha 510 : parent 510,500 : left 510,20 : top 510,top(509)+30 : font_size 510,10 : caption 510,"Ville:" edit 511 : parent 511,500 : left 511,100 : top 511,top(510) : width 511,40 nf1_codepost% = 511 edit 512 : parent 512,500 : left 512,left(511)+width(511)+20 : top 512,top(510) : width 512,300 nf1_ville% = 512 alpha 513 : parent 513,500 : left 513,20 : top 513,top(511)+30 : font_size 513,10 : caption 513,"Pays:" edit 514 : parent 514,500 : left 514,left(512) : top 514,top(511)+30 : width 514,300 nf1_pays% = 514 alpha 515 : parent 515,500 : left 515,20 : top 515,top(514)+50 : font_size 515,10 : caption 515,"Portable:" edit 516 : parent 516,500 : left 516,100 : top 516,top(515) : width 516,100 nf1_portable% = 516 alpha 517 : parent 517,500 : left 517,20 : top 517,top(516)+30 : font_size 517,10 : caption 517,"Fixe:" edit 518 : parent 518,500 : left 518,100 : top 518,top(517) : width 518,100 nf1_fixe% = 518 alpha 519 : parent 519,500 : left 519,20 : top 519,top(518)+30 : font_size 519,10 : caption 519,"Mail:" edit 520 : parent 520,500 : left 520,100 : top 520,top(519) : width 520,300 nf1_mail% = 520 edit 552 : parent 552,500 : left 552,570 : top 552,top(501) : width 552,300 nf2_nom% = 552 edit 554 : parent 554,500 : left 554,left(552) : top 554,top(503) : width 554,300 nf2_prenom% = 554 edit 556 : parent 556,500 : left 556,left(552) : top 556,top(505) : width 556,40 nf2_numero% = 556 combo 557 : parent 557,500 : left 557,left(556)+width(556)+20 : top 557,top(505) : width 557,60 item_add 557,"" item_add 557,"Bis" item_add 557,"Ter" item_add 557,"Quater" res% = dll_call2("SelectComboBoxItem",handle(557),1) nf2_bis% = 557 edit 558 : parent 558,500 : left 558,left(557)+width(557)+20 : top 558,top(507) : width 558,300 nf2_adresse1% = 558 edit 559 : parent 559,500 : left 559,left(558) : top 559,top(558)+30 : width 559,300 nf2_adresse2% = 559 edit 561 : parent 561,500 : left 561,left(556) : top 561,top(510) : width 561,40 nf2_codepost% = 561 edit 562 : parent 562,500 : left 562,left(561)+width(561)+20 : top 562,top(561) : width 562,300 nf2_ville% = 562 edit 564 : parent 564,500 : left 564,left(562) : top 564,top(511)+30 : width 564,300 nf2_pays% = 564 edit 566 : parent 566,500 : left 566,left(561) : top 566,top(515) : width 566,100 nf2_portable% = 566 edit 568 : parent 568,500 : left 568,left(566) : top 568,top(517) : width 568,100 nf2_fixe% = 568 edit 570 : parent 570,500 : left 570,left(568) : top 570,top(519) : width 570,300 nf2_mail% = 570 alpha 530 : parent 530,500 : top 530,20 : left 530,150 : font_size 530,16 : font_bold 530 caption 530,"Critères de filtrage"
button 532 : parent 532,500 : top 532,top(520)+50 : left 532,420 : width 532,300 : caption 532,"Vider le filtre" font_bold 532 : font_size 532,12 : on_click 532,vider_filtre button 531 : parent 531,500 : top 531,top(532)+50 : left 531,420 : width 531,300 : caption 531,"Valider" font_bold 531 : font_size 531,12 : on_click 531,valider alpha 590 : parent 590,500 : top 590,top(532) : left 590,20 s$ = "Les champs non vides de la colonne de gauche sont des critères de sélection." s$ = s$ + chr$(13)+chr$(10)+"Les champs peuvent contenir le caractère "+chr$(34)+"%"+chr$(34)+"." s$ = s$ + " C'est un joker." s$ = s$ + chr$(13)+chr$(10)+"Si la colonne de gauche est utilisée seule, on filtre sur une égalité." s$ = s$ + chr$(13)+chr$(10)+"L'utilisation des deux colones pour une même ligne définit une fourchette." s$ = s$ + chr$(13)+chr$(10)+"La colonne de droite est ignorée si celle de gauche n'est pas renseignée." caption 590,s$ ' panel des exports / imports panel 600 : hide 600 : parent 600,200 : top 600,10 : left 600,left(201)+width(201)+30 width 600,width_client(200)-left(600)-10 : height 600,height(201) : color 600,255,95,255 alpha 601 : parent 601,600 : top 601,20 : left 601,150 : font_size 601,16 : font_bold 601 caption 601,"Export / Import de contacts" alpha 604 : parent 604,600 : top 604,top(601)+50 : left 604,20 : font_size 604,10 caption 604,"Fichier CSV:" edit 605 : parent 605,600 : top 605,top(604) : left 605,150 : width 605,300 n_nomfichier% = 605 button 606 : parent 606,600 : top 606,top(605) : left 606,left(605)+width(605) : width 606,30 font_bold 606 : caption 606,"..." : on_click 606,select_fichier container_option 607 : parent 607,600 : top 607,top(606)+40 : left 607,150 : width 607,300 height 607,50 : caption 607,"Opération" option 608 : parent 608,607 : top 608,20 : left 608,20 : caption 608,"Exporter" option 609 : parent 609,607 : top 609,20 : left 609,150 : caption 609,"Importer" n_exporter% = 608 n_importer% = 609
button 631 : parent 631,600 : top 631,top(607)+height(607)+50 : left 631,150 : width 631,300 caption 631,"Valider" : font_bold 631 : font_size 631,12 : on_click 631,valider
active 10 end_sub
sub charger_contacts() clear 201 if n_contacts%>0 ' charger la table dans le gridRequête SQL s$ = "SELECT * FROM Contacts "+where$+crit$+";" ' préparation de la requête: sélection des enregistrements de la table selon les critères res% = dll_call2("CompileSQLite3Script",SQL%,adr(s$)) ' Remplissage LIST par lecture ID, nom et prénom de chacun des enregistrements for i%=1 to n_contacts% res% = dll_call1("GetSQLite3NextRow",SQL%) if res%<0 then exit_for ' prendre le ID res% = dll_call2("GetSQLite3CellText",SQL%,1) s$ = text$(1001)+": " ' prendre le nom res% = dll_call2("GetSQLite3CellText",SQL%,2) s$ = s$ + text$(1001)+", " ' prendre le prénom res% = dll_call2("GetSQLite3CellText",SQL%,3) s$ = s$ + text$(1001) ' ajouter cela à la liste item_add 201,s$ next i% ' finaliser la requête res% = dll_call1("FinalizeSQLite3Request",SQL%) end_if end_sub
sub charger_variables() ' extrauire les données des champs du panel 300 et les charger dans les variables prenom_contact$ = trim$(text$(n_prenom%)) numero_contact$ = trim$(text$(n_numero%)) bis_contact$ = str$(item_index(n_bis%)) adresse1_contact$ = trim$(text$(n_adresse1%)) adresse2_contact$ = trim$(text$(n_adresse2%)) codepost_contact$ = trim$(text$(n_codepost%)) ville_contact$ = trim$(text$(n_ville%)) pays_contact$ = trim$(text$(n_pays%)) portable_contact$ = trim$(text$(n_portable%)) fixe_contact$ = trim$(text$(n_fixe%)) mail_contact$ = trim$(text$(n_mail%)) end_sub
sub valider_nouveau() ' valider l'ajout d'un nouveau contact nom_contact$ = trim$(text$(n_nom%)) if nom_contact$="" : ' ce champ est le seul chanmp obligatoire message "Le nom du contact manque !" exit_sub end_if ' extraire les données du panel 300 charger_variables() ' construire la requête SQL s$ = "INSERT INTO Contacts (Nom,Prenom,Numero,Bis,Adresse1,Adresse2,Codepost,ville,Pays," s$ = s$ + "Portable,Fixe,Mail) VALUES (" s$ = s$ + "²"+nom_contact$+"²,²"+prenom_contact$+"²,²"+numero_contact$+"²,²"+bis_contact$ s$ = s$ + "²,²"+adresse1_contact$+"²,²"+adresse2_contact$+"²,²"+codepost_contact$ s$ = s$ + "²,²"+ville_contact$+"²,²"+pays_contact$ s$ = s$ + "²,²"+portable_contact$+"²,²"+fixe_contact$+"²,²"+mail_contact$+"²);" ' exécuter la requête SQL res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) if res%<0 message "Erreur dans requête SQL !" exit_sub end_if ' réafficher la liste n_contacts% = n_contacts% + 1 charger_contacts() message "Vous avez actuellement "+str$(n_contacts%)+" contacts." end_sub
sub valider_modifier() if ID_contact$="" message "Aucun contact n'a été sélectionné !" exit_sub end_if if text$(n_nom%)="" message "Le nom du contat manque !" exit_sub end_if
' extraire les données du panel 300 charger_variables() ' construire la requête SQL e les exécuter les unes après les autrez s$ = "UPDATE Contacts SET Nom = ²"+nom_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Prenom = ²"+prenom_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Numero = ²"+numero_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Bis = ²"+bis_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Adresse1 = ²"+adresse1_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Adresse2 = ²"+adresse2_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Codepost = ²"+codepost_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Ville = ²"+ville_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Pays = ²"+pays_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Portable = ²"+portable_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Fixe = ²"+fixe_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) s$ = "UPDATE Contacts SET Mail = ²"+mail_contact$+"² WHERE ID= ²"+id_contact$+"² ;" res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) charger_contacts() ID_contact$ = "" end_sub
sub valider_supprimer() if ID_contact$="" message "Aucun contact n'a été sélectionné !" exit_sub end_if if message_confirmation_yes_no("Voulez-vous vraiment supprimer "+item_read$(201,item_index(201))+" ?")<>1 then exit_sub
' préparer la requête SQL s$ = "DELETE FROM ²Contacts² WHERE Id="+ID_contact$
' exécuter le script res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(s$)) ' réafficher la liste n_contacts% = n_contacts% - 1 charger_contacts() message "Vous avez actuellement "+str$(n_contacts%)+" contacts." end_sub
sub trier_contact() dim_local t1%, t2%, t3% if n_contacts%<1 message "Il n'y a rien à trier !" exit_sub end_if t1% = item_index(n_tri1%) t2% = item_index(n_tri2%) t3% = item_index(n_tri3%) if t2%=t1% then t2% = 0 if t3%=t1% then t3% = 0 if t3%=t2% then t3% = 0 ' construire le critère de tri crit$ = " "+critere_de_tri$(t1%,t2%,t3%) ' réafficher la liste selon le tri demandé charger_contacts() end_sub
fnc generer_where$(champ1%,champ2%,nom$) ' construire la clause WHERE pour un seul champ ou couple de champs dim_local champ$, st$ ' SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; ' SELECT * FROM COMPANY WHERE NAME LIKE 'Ki%'; ' SELECT * FROM COMPANY WHERE AGE BETWEEN 25 AND 27; ' SELECT * FROM COMPANY WHERE AGE >= 25 AND SALARY >= 65000; champ$ = text$(champ1%) st$ = "" if champ$<>"" if instr(champ$,"%")>0 st$ = " "+nom$+" LIKE ²"+champ$+"² AND" else if text$(champ2%)<>"" st$ = " "+nom$+" BETWEEN ²"+champ$+"² AND ²"+text$(champ2%)+"² AND" else st$ = " "+nom$+" = ²"+champ$+"² AND" end_if end_if end_if result st$ end_fnc
sub filtrer_contact() if n_contacts%<1 message "Il n'y a rien à filtrer !" exit_sub end_if ' construire la clause WHERE pour tous les champs where$ = "" ' where$ = where$ + generer_where$(nf1_nom%,nf2_nom%,"Nom") s$ = generer_where$(nf1_nom%,nf2_nom%,"Nom") where$ = where$ + s$ where$ = where$ + generer_where$(nf1_prenom%,nf2_prenom%,"Prenom") where$ = where$ + generer_where$(nf1_numero%,nf2_numero%,"Numero") where$ = where$ + generer_where$(nf1_bis%,nf2_bis%,"Bis") where$ = where$ + generer_where$(nf1_adresse1%,nf2_adresse1%,"Adresse1") where$ = where$ + generer_where$(nf1_adresse2%,nf2_adresse1%,"Adresse2") where$ = where$ + generer_where$(nf1_codepost%,nf2_codepost%,"Codepost") where$ = where$ + generer_where$(nf1_ville%,nf2_ville%,"Ville") where$ = where$ + generer_where$(nf1_pays%,nf2_pays%,"Pays") where$ = where$ + generer_where$(nf1_portable%,nf2_portable%,"Portable") where$ = where$ + generer_where$(nf1_fixe%,nf2_fixe%,"Fixe") where$ = where$ + generer_where$(nf1_mail%,nf2_mail%,"Mail") if where$<>"" then where$ = " WHERE ("+left$(where$,len(where$)-4)+")" ' réafficher la liste selon la sélection demandée charger_contacts() end_sub
fnc critere_de_tri$(n1%,n2%,n3%) dim_local ct$ ct$ = " ORDER BY " +critere_tri$(n1%) if n2%>0 then ct$ = ct$ + ", "+critere_tri$(n2%) if n3%>0 then ct$ = ct$ + ", "+critere_tri$(n3%) result ct$ end_fnc
sub exporter_contacts() if checked(n_exporter%)=1 if count(201)=0 message "Il n'y a rien à exporter !" exit_sub end_if s$ = trim$(text$(n_nomfichier%)) if s$="" message "Le nom du fichier d'export manque !" exit_sub end_if if lower$(file_extract_extension$(s$))<>".csv" message "Ce n'est pas un fichier CSV !" exit_sub end_if if file_exists(s$)=1 if message_confirmation_yes_no("Ce fichier existe déjà ! Voulez-vous le remplacer ?")<>1 then exit_sub end_if cursor_hourglass 600 cursor_hourglass 631 res% = dll_call5("ExportSQLite3TableToCSV",SQL%,adr(table$),adr(s$),adr(where$),adr(crit$)) cursor_default 600 cursor_default 631 message "Les contacts sélectionnés ont été exportés dans le fichier." else s$ = trim$(text$(n_nomfichier%)) if s$="" message "Le nom du fichier d'import manque !" exit_sub end_if if lower$(file_extract_extension$(s$))<>".csv" message "Ce n'est pas un fichier CSV !" exit_sub end_if if file_exists(s$)=0 message "Ce fichier n'existe pas !" exit_sub end_if cursor_hourglass 600 cursor_hourglass 631 res% = dll_call3("ImportSQLite3TableFromCSV",SQL%,adr(s$),1) if res%>=0 then n_contacts% = n_contacts% + res% ' réafficher la liste charger_contacts() cursor_default 600 cursor_default 631 s$ = "Les contacts ont été importés du fichier."+chr$(13)+chr$(10) s$ = s$ + "Vous avez actuellement "+str$(n_contacts%)+" contacts." message s$ end_if end_sub
sub afficher_contact() ' récupérer les champs (sauf ID) res% = dll_call2("GetSQLite3CellText",SQL%,2) nom_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,3) prenom_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,4) numero_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,5) bis_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,6) adresse1_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,7) adresse2_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,8) codepost_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,9) ville_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,10) pays_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,11) portable_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,12) fixe_contact$ = text$(1001) res% = dll_call2("GetSQLite3CellText",SQL%,13) mail_contact$ = text$(1001) ' charger les champs de l'enregistrement trouvé dans le panel 300 text n_nom%,nom_contact$ text n_prenom%,prenom_contact$ text n_numero%,numero_contact$ i% = val(bis_contact$) res% = dll_call2("SelectComboBoxItem",handle(307),i%) text n_adresse1%,adresse1_contact$ text n_adresse2%,adresse2_contact$ text n_codepost%,codepost_contact$ text n_ville%,ville_contact$ text n_pays%,pays_contact$ text n_portable%,portable_contact$ text n_fixe%,fixe_contact$ text n_mail%,mail_contact$ end_sub
sub charger_criteres_tri(n%, index%) item_add n%," " item_add n%,"Nom" item_add n%,"Prénom" item_add n%,"Adresse 1" item_add n%,"Adresse 2" item_add n%,"Code Postal" item_add n%,"Ville" item_add n%,"Pays" item_add n%,"Portable" item_add n%,"Fixe" item_add n%,"Mail" res% = dll_call2("SelectComboBoxItem",handle(n%),index%) end_sub
fnc critere_tri$(n%) select n% case 1: result "ID" case 2: result "Nom" case 3: result "Prenom" case 4: result "Adresse1" case 5: result "Adresse2" case 6: result "Codepost" case 7: result "Ville" case 8: result "Pays" case 9: result "Portable" case 10: result "Fixe" case 11: result "Mail" end_select end_fnc
' ************************************** ' ************************************** ' ********** les routines évnements **** ' ************************************** ' **************************************
close0: SQL% = dll_call1("CloseSQLite3",SQL%) res% = dll_call0("ResetSQLite3") return
select_folder: racine$ = "C:\" s$ = string$(255," ") res% = dll_call4("FolderSelect",adr(racine$),adr(s$),0,1) if res%=1 then text 2,trim$(s$) return select_version: racine$ = text$(2) filter$ = "*.dll|*.dll" s$ = string$(255," ") res% = dll_call4("FileOpen",adr(racine$),adr(filter$),adr(s$),0) if res%=1 then text 5,file_extract_name$(trim$(s$)) return select_base: racine$ = "C:\" filter$ = "*.db|*.db" s$ = string$(255," ") res% = dll_call4("FileOpen",adr(racine$),adr(filter$),adr(s$),0) text 8,trim$(s$) return
demarrer: ' changer le chemin vers le dossier SQLite3 if active(3)=1 s$ = text$(2) res% = dll_call1("SelectAlternativeSQLite3Path",adr(s$)) end_if ' changer la version de SQLite3 if active(6)=1 s$ = text$(5) res% = dll_call1("SelectAlternativeSQLite3Version",adr(s$)) end_if ' initialiser SQLite3 if active(3)=1 then res% = dll_call0("InitializeSQLite3") inactive 3 : inactive 6 : inactive 9 ' tester si la base de données existe. Si absente, on la crée. if file_exists(text$(8))=0 if message_confirmation_yes_no("Base de données absente. Voulez-vous la créer ?")<>1 active 9 return end_if ' ici, on crée la base s$ = text$(8) SQL% = dll_call2("OpenSQLite3",adr(s$),handle(1001)) if SQL%=0 message "Erreur en création du fichier !" active 9 return end_if clear 1011 item_add 1011,"CREATE TABLE Contacts ([ID] INTEGER PRIMARY KEY," item_add 1011," [Nom] VARCHAR (50), [Prenom] VARCHAR (50), [Numero] INTEGER," item_add 1011," [Bis] VARCHAR (10), [Adresse1] VARCHAR (100), [Adresse2] VARCHAR (100)," item_add 1011," [Codepost] INTEGER, [Ville] VARCHAR (100), [Pays] VARCHAR (100)," item_add 1011," [Portable] INTEGER, [Fixe] INTEGER, [Mail] VARCHAR (30));" res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) ' message text$(1011)+"res%="+str$(res%) if res%<0 message "Erreur en création de la base de données !" active 9 SQL% = dll_call1("CloseSQLite3",SQL%) return end_if n_contacts% = 0 n_champs% = 13 else ' ici, on ouvre la base et on vérifié quela structure correspond s$ = text$(8) SQL% = dll_call2("OpenSQLite3",adr(s$),handle(1001)) if SQL%=0 message "Ce fichier n'est pas une base SQLite3 valide :" active 9 return end_if ' on charge la liste des tables res% = dll_call1("GetSQLite3TableNames",SQL%) if res%<>1 message "Ce fichier n'est pas une base des contacts !" active 9 SQL% = dll_call1("CloseSQLite3",SQL%) return end_if if item_read$(1001,1)<>"Contacts" message "Ce fichier n'est pas une base des contacts - tables non conformes !" message text$(1001) active 9 SQL% = dll_call1("CloseSQLite3",SQL%) return end_if ' on carge la liste des colonnes de la table "Contacts" s$ = "Contacts" res% = dll_call2("GetSQLite3ColumnNames",SQL%,adr(s$)) if res%<>13 message "Ce fichier n'est pas une base des contacts - nombre des colonnes non conformes !" active 9 SQL% = dll_call1("CloseSQLite3",SQL%) return end_if n_champs% = res% err% = 0 for i%=1 to res% s$ = item_read$(1001,i%) if instr(s$,"["+Colonnes$(i%)+"]")=0 then err% = 1 next i% if err%=1 message "Ce fichier n'est pas une base des contacts - noms des colonnes non conformes !" ' message text$(1001) active 9 SQL% = dll_call1("CloseSQLite3",SQL%) return end_if s$ = "Contacts" n_contacts% = dll_call2("GetSQLite3RowCount",SQL%,adr(s$)) end_if message "Vous avez actuellement "+str$(n_contacts%)+" contacts." ' charger la liste des contacts charger_contacts() ' afficher les données hide 10 show 11 show 100 show 200
return quitter: gosub close0 terminate select_contact: ' récupérer le ID du contact choisi index% = item_index(201) s$ = item_read$(201,index%) ID_contact$ = left$(s$,instr(s$,":")-1) ' requête SQL pour relire l'enregistrement du contact choisi par son ID s$ = "SELECT * FROM Contacts" s$ = s$ + " WHERE ((Contacts.ID) Like ²"+ID_contact$+"²)" ' préparation de la requête: sélection des enregistrements de la table selon les critères res% = dll_call2("CompileSQLite3Script",SQL%,adr(s$)) ' pointer sur le premier (unique) contact trouvé res% = dll_call1("GetSQLite3NextRow",SQL%) if res%<0 message "Contact non trouvé !" return end_if ' récupérer les champs (sauf ID) et les charger dans les champs du panel 300 afficher_contact() ' finaliser la requête res% = dll_call1("FinalizeSQLite3Request",SQL%) return
ajouter_contact: font_size 101,12 font_size 102,8 font_size 103,8 font_size 104,8 font_size 105,8 font_size 106,8 action% = 1 caption 330,"Ajout d'un nouveau contact" show 300 hide 400 hide 500 hide 600 return valider: select action% case 1 : ' ajout d'un nouveau contact valider_nouveau() case 2 : ' modifier un contact valider_modifier() case 3 : ' supprimer un contact valider_supprimer() case 4 : ' trier les contacts trier_contact() case 5 : ' filtrer les contacts filtrer_contact() case 6: ' exporter les contacts exporter_contacts() end_select return modifier_contact: font_size 101,8 font_size 102,12 font_size 103,8 font_size 104,8 font_size 105,8 font_size 106,8 action% = 2 caption 330,"Modification d'un contact" show 300 hide 400 hide 500 hide 600 return supprimer_contact: font_size 101,8 font_size 102,8 font_size 103,12 font_size 104,8 font_size 105,8 font_size 106,8 action% = 3 caption 330,"Suppression d'un contact" show 300 hide 400 hide 500 hide 600 return trier_contact: font_size 101,8 font_size 102,8 font_size 103,8 font_size 104,12 font_size 105,8 font_size 106,8 action% = 4 hide 300 show 400 hide 500 hide 600 return filtrer_contact: font_size 101,8 font_size 102,8 font_size 103,8 font_size 104,8 font_size 105,12 font_size 106,8 action% = 5 hide 300 hide 400 show 500 hide 600 return exporter_contacts: font_size 101,8 font_size 102,8 font_size 103,8 font_size 104,8 font_size 105,8 font_size 106,12 action% = 6 hide 300 hide 400 hide 500 show 600 mark_on n_exporter% return select_fichier: s$ = text$(8) racine$ = file_extract_path$(s$) filter$ = "Fichier CSV|*.csv" s$ = string$(255," ") res% = dll_call4("FileCreate",adr(racine$),adr(filter$),adr(s$),0) if res%>0 then text n_nomfichier%,trim$(s$) return vider_filtre: text nf1_nom%,"" text nf1_prenom%,"" text nf1_numero%,"" res% = dll_call2("SelectComboBoxItem",handle(nf1_bis%),1) text nf1_adresse1%,"" text nf1_adresse2%,"" text nf1_codepost%,"" text nf1_ville%,"" text nf1_pays%,"" text nf1_portable%,"" text nf1_fixe%,"" text nf1_mail%,"" text nf2_nom%,"" text nf2_prenom%,"" text nf2_numero%,"" res% = dll_call2("SelectComboBoxItem",handle(nf2_bis%),1) text nf2_adresse1%,"" text nf2_adresse2%,"" text nf2_codepost%,"" text nf2_ville%,"" text nf2_pays%,"" text nf2_portable%,"" text nf2_fixe%,"" text nf2_mail%,"" return
Dernière édition par Klaus le Sam 4 Déc 2021 - 12:13, édité 2 fois | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Mer 1 Déc 2021 - 23:57 | |
| Merci Klaus pour cette démonstration qui permet de mettre en pratique la puissance de la SQLite3 implantée dans KGF.DLL.
Mes différents tests effectués sont concluants.
Le code-source détaillé et commenté est très pédagogique. Il permet de mettre en pratique facilement sa propre base de données en se référant à ce très bel exemple tu nous donnes.
Merci !
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Jeu 2 Déc 2021 - 0:30 | |
| Merci, Marc !
Demain, j'ajouterai l'import/export en format CSV... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Jeu 2 Déc 2021 - 12:37 | |
| Voilà - il y a maintenant un bouton Exporter / Importer dans la barre de commande. Le source ainsi que le mode d'emploi a été mis à jour dans mon premier post. Voici un exemple d'export: - Code:
-
Nom, Prenom, Numero, Bis, Adresse1, Adresse2, Codepost, Ville, Pays, Portable, Fixe, Mail "Martin", "Dupont", "134", "2", "bld de la République", "", "72050", "Ville sur le Pont", "", "1122334455", "", "martin.dupont@orange.fr" "Delorme", "Juliette", "23", "1", "Rue de la Boëtie", "", "55120", "Arpant la Source", "", "644558822", "299886633", "jdelorme@gmail.com" "Charbonnier", "Marie-Paule", "29", "1", "Rue de l'Egalité", "face Pharmacie", "12500", "Vitré sur Ourgh", "", "1234567890", "9988776655", "josiane.charbonnier@gmail.com"
Attention: Il doit y avoir 4 lignes: 1 entête avec les noms des champs, puis 3 lignes pour les 3 contacts. Veillez à recoller les lignes qui seraient éventuellement coupées. Pour démarrer, il suffit alors de lancer le programme, en absence de toute base de données, puis importer ce fichier. Et on se trouve avec 3 contacts chargés. EDITDans le code actuel, l'export en CSV et son import est codé en Panoramic ce qui est assez lon (en code, pas en exécution !). Mais une version de KGF.dll en cours de préparation incluera ces deux fonctions de façon "native" dans KGF.dll. | |
| | | lepetitmarocain
Nombre de messages : 341 Age : 82 Localisation : Région Parisienne (à mon grand désespoir) Date d'inscription : 04/07/2018
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Ven 3 Déc 2021 - 19:02 | |
| Bonsoir à tous
@Klaus.
Je viens de tester le programme : Gestionnaire de Contacts , et j'ai un message d'erreur dés que j'appuie sur DÉMARRER.
(29) Not Correct Arithmetic expression : error in function line 838.
Je n'ai touché à rien sur les lignes de Dossier, Version et Base de Données
Peux tu STP me dire ce qu'il en est.
Merci
Bonne soirée | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Ven 3 Déc 2021 - 21:09 | |
| Difficile à dire. avec le code posté dans mon premier post, on a ceci: La seule cause possible de cette erreur serait que les fonctions de KGF.dll appelées ici ne soient pas présentes dans KGF.dll sur ta machine. Conclusion: recharge KGF.dll (via ma signature dans ce port) et réessaie... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Sam 4 Déc 2021 - 12:18 | |
| Suite à l'jout de fonctions d'export et import en CSV à KGF.dll, j'ai adapté mon programme de gestion de contacts à ces fonctions. Résultat: les deux grandes procédures réalisant ces fonctions ont été respectivement remplacées par un seul appel à une de ces nouvelles fonctions. Fonctionnellement, cependant, rien n'a changé.
Le code source a été mis à jour dans me premier post de ce fil de discussion. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Sam 4 Déc 2021 - 14:13 | |
| Bonjour Klaus
Je me demandais s'il serai possible de gérer la liste des objets pour mon éditeur d'objets que je suis en train de développer. En fait non, je sais que c'est possible mais je crains de mettre en place une usine à gaz...
Actuellement j'utilise des GRIDs et des DLISTs pour gérer tout ça !
Crois tu qu'au bout du compte je gagnerai d'une façon ou d'une autre en mettant en place une base de données telle que SQLite et KGF ? Quelle serai réellement la différence ? En sachant que la base n'est soumise a aucune règle de sécurité ni aucun soucis de rapidité.
Merci d'avance pour ta réponse Klaus. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Sam 4 Déc 2021 - 17:46 | |
| Difficile à répondre, sans plus de renseigements. SQLite3 est un stricte gestionnaire de bases de données. On peut y créer 1 ou plusieurs tables, chaque table étant composé d'enregistrements (de lignes) de composition identique, mais différente d'une table à l'autre. Chaque enregistrement peut contenir des champs de nature différente (valeurs entières, valeurs flottantes, strings, ...).
Tout dépend ce que tu veux gérer par cela. Il est peu utile de placer des morceaux entiers de code dans la base - mieux vaut mes mettre dans des fichiers et placer le nom du fichier dans la base.
Par contre, pour gérer les attributs d'un objet, on peut imaginer, pour chaque objet, un enregistrement avec des champs "libéllé", "valeur par défaut", valeur actuelle" pour chaque propriété. Ce serait une utilisation sensée pour SQLite3. Encore faudrait-il définir un format commun pour tous les objets ce qui semble peu pratique.
Par contre, on peut imaginer une solution avec plusieurs tables dans la même base. Une première table contient la liste des objets possibles, avec le nom de tous les attributs possibles. Il suffit de définir un nombre suffisant de champs pour pouvoir enregistrer l'objet ayant le plus d'attributs.
Ensuite, on aurait une table contenant tous les attributs avec leur valeur opar défaut.
Puis, il yaurait une table similaire à la première, mais contenant uniquement la liste des objets actuels du projet.
Puis, une dernière table contenant la liste des attributs actuels des objets du prohet avec leurs valeurs actuelles.
Il faudrait créer une première base SQLite3 "maître" contenant juste les deux premières tables. Puis, on exporte ces deux tables en format CSV. Ensuite, lors de la création d'un nouveau projet, on crée une nouvelle base, on y charge les deux ables exportées en CSV pour créer la base de connaissance, puis on crée les deux autres tables vides. Enuite, lors de la création d'un objet, on copie la définition de l'objet de la première base dans la troisième, puis, pour chaque propriéé utilisée, on copie la ligne correspondante de la 2ème base dans la 4ème en y mettant la valeur actuelle.
J'espère que j'ai à peu près capté ce que tu cherchais. Cependant, puisque tu parles de GRID, eh bien SQLite3 est juste en mémoire et sur disque. Il n'y a aucun affichage qui reste à gérer séparément. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) Sam 4 Déc 2021 - 17:58 | |
| Merci pour toutes ces explications Klaus. Cela me semble quand même un peu lourd a gérer. D'autant plus que ma base actuelle ( GRID+ DLIST) fonctionne parfaitement à ce jour. Je vais laisser comme ça pour le moment. Et je verrai ensuite si le besoin s'en fait sentir. De toutes les façons, si je décide de basculer vers SQLite il faudra que je reprenne toute la gestion. Ca me laissera aussi le temps de me familiariser avec le fonctionnement de SQLite dans KGF ! | |
| | | Contenu sponsorisé
| Sujet: Re: Un gestionnaire de contacts avec SQLite3 (KGF.dll) | |
| |
| | | | Un gestionnaire de contacts avec SQLite3 (KGF.dll) | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |