Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: ISAM toujours ISAM Mer 24 Jan 2024 - 0:21 | |
| Bonsoir Lepetitmarocain, ISAM n'est pas opérationnel pour l'instant. Comme alternative, KGF.DLL intègre SQLite. Peut-être pourrais-tu l'utiliser ? Voici le programme de démonstration de Klaus : - 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 L'aide de KGF est à jour. Tu y trouveras tous les détails nécessaires. Bonne programmation ! | |
|