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 |
|
|
| KGF_dll - nouvelles versions | |
|
+6papydall Marc jean_debord Minibug JP06 Klaus 10 participants | |
Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 11:48 | |
| Ahhhh merci Marc ! Je commençais à désespérer... Je sais parfaitement comment utiliser KGF et comment il fonctionne... Mais là il y a donc bien un problème ! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 12:16 | |
| KGF.dll V9.57 du 25/10/2021Nouveautés: - nouvelle fonction WhoLaunchedMeModules modifiés: KGF.dllLa doc suivra. Voici l'utilisation: - Code:
-
dim res%, s$ dll_on "KGF.dll" s$ = string$(255," ") res% = dll_call1("WhoLaunchedMe",adr(s$)) message s$ end Lancez-le par l'éditeur, puis générez un EXE et lancez l'EXE... Merci, Marc ! En effet, il semble y avoir un problème sur certains systèmes. Là, je le crains, ce n'est pas de mon ressort... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 12:32 | |
| Bonjour Klaus ! Ce qui est surprenant dans cette histoire c'est que les anciennes versions de KGF fonctionnent parfaitement chez moi. Si par exemple je lance GPP2 et la version embarquée tout fonctionne parfaitement. Si maintenant j'utilise la dernière version il dit qu'il ne la trouve pas ! C'est très étrange non ?! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 12:42 | |
| Oui, incompréhensible en effet. J'ai toujours la même version Delphi, j'ai juste ajouté de nouvelles fonctions. Et d'après la capture de Marc, il trouve bien la DLL mais n'arrive pas à la charger. On voit bien que la ligne 4 avec DLL_ON n'est exécutée que si KGF.dll existe. Il s'agit donc d'un problème lié au contenu de la DLL qui empêche Panoramic de la charger. Et là, je me demande pourquoi ça varie d'une machine à l'autre - je ne vois aucune explicaton pour cela.
Est-ce que Jack en aurait une ?
P.S. Recharge KGF.dll et exécute le petit code que j'ai posté ci-dessus. Tu verras, ce sera amusant... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 12:59 | |
| - Klaus a écrit:
- Recharge KGF.dll et exécute le petit code que j'ai posté ci-dessus. Tu verras, ce sera amusant...
Je voudrai bien.... mais il ne trouve toujours pas le dll... Il se pourrai peut être que ce soit lié aussi aux dernières maj de Windows en vu du passage à W11 ???!!!! J'espère que tu trouvera la solution, sinon certains d'entre nous ne pourrons plus utiliser KGF. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 13:10 | |
| - Klaus a écrit:
- - nouvelle fonction WhoLaunchedMe
Résultat : | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 13:28 | |
| - Citation :
- Il se pourrai peut être que ce soit lié aussi aux dernières maj de Windows en vu du passage à W11 ???!!!!
Ca m'étonnerait. Je suis sous W10 avec toutes les mises à jour appliquées e je n'ai aucun problème. @Mark: Merci pour le test. Si tu génères ce petit programme en EXE puis tu le lances par l'explorateur, tu verras la différence. Cette fonction retourne le chemin et le nom de l'exécutable qui a lance le programme en cous. Un moyen de savoir si l'on a été lancé par un éditeur ou non (dans ce dernier pas, explorer.exe sera le nom du programme). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 13:51 | |
| @Minibug: J'ai déposé sur mon site une autre version de KGF.dll. Fonctionnellement identique, elle est beaucoupplus grosse: 6873 ko. J'ai simplement omis la compression de la DLL. Pourrais-tu télécharger cette version et l'essayer stp ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 14:17 | |
| - Klaus a écrit:
- Si tu génères ce petit programme en EXE puis tu le lances par l'explorateur, tu verras la différence.
Oui, j’ai déjà fait l’essai. Egalement depuis un disque externe et dans ce cas, je n’ai aucune fenêtre d’information qui apparaît. Pour le problème de chargement de KGF, j’ai isolé deux ordinateurs sensiblement équivalents avec la même version de Windows 10 . Sur un disque externe USB, j’ai copié dans la racine, mon exe de test et la DLL KGF. J’ai donc côte à côte deux ordinateurs : - Un qui fonctionne bien avec KGF ; - un qui refuse de charger KGF. Je ne sais pas trop où chercher pour percer ce mystère. Je vais commencer par comparer les variables d’environnement… Je me permets de répondre à la place de Minibug : Pour ce qui est de la version KGF non compressée (7 037 952 octets), le problème est le même. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 14:28 | |
| Merci, Marc. Tes essais sont précieux.
Comme cela ne dépend visiblement pas de la compression, je vais la remettre, mais avec la version la plus récente du compresseur. On ne sait jamais... Je viens de mettre cette version compressée en ligne. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 15:47 | |
| Windows 7 est beaucoup plus bavard que Windows 10 ! Sous Windows 7, lors du chargement de KGF, j’ai deux messages d’erreur successifs. Le deuxième est sans importance, il annonce simplement l’échec du chargement de la DDL. Mais le premier est très parlant : Effectivement, sur les ordinateurs où il n’y a pas de problème, je retrouve plusieurs fois sqlite3.dll dans différentes applications (python, Rad Studio…). Tous les répertoires qui mènent à ces dll sont dans les variables d'environnement système. Sur les autres ordinateurs sans la présence d'un sqlite3.dll, il y a le message impossible de charger la DLL. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 15:56 | |
| Voilà qui est intéressant ! Et ça le fait aussi avec le petit programme de 4 lignes contenant juste ton essai avec DLL_ON tout seul ? | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 16:00 | |
| Oui, je n'ai utilisé que celui là. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 16:04 | |
| Ok. Merci, Marc. Ca me donne une piste précise à suivre. Je te tiendrai au courant. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 16:05 | |
| J'espère ne pas avoir fait fausse route... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 16:58 | |
| Non, non - tu as bien vu le problème. J'ai pu l'identifier grâce à tes essais et je suis en train de le corriger. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Lun 25 Oct 2021 - 18:29 | |
| Bonsoir à tous les 2. je viens juste de me connecter... - Marc a écrit:
- Je me permets de répondre à la place de Minibug :
Pour ce qui est de la version KGF non compressée (7 037 952 octets), le problème est le même. Tu as bien fais. Je viens de tester et effectivement c'est pareil ! J'ai vu que tu avais identifié un partie du problème. J'espère que Klaus va trouver la solution... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 7:56 | |
| KGF.dll V9.58 du 26/10/2021
Nouveautés: - SQLite3: correction du bug en chargement de la DLL
Modules modifiés: KGF.dll
La doc est inchangée.
Oui, j'ai trouvé et corrigé cette nuit. Tout devrait être opérationnel maintenant. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 10:58 | |
| Bonjour Klaus, C’est bon ! Je ne sais pas où tu as caché la SQLite v3.6.7 ! J’ai juste un problème sur un seul ordinateur, la base de donnée est bien remplie mais le grid ne veut pas se remplir. Sur les autres ordinateurs c’est correct. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 11:17 | |
| La base de données s'installe automatiquement dans C:\SQLite367\SQLite367.dll. Comme ça, il n'y a as de conflit avec d'autres versions éventuelles de SQLite.
Le remplissage de la grille dépend de 2 points: - le remplissage qui est fait par des données aleatoires, donc forcément différentes sur chaque machine - des critères de sélection et de tri qui sont placés juste au-dessus de la grille.
Par défaut, le critère de sélection est "A%". On n'a donc que les enregistrements dont la clé commence par A. Enlève le "A" et laisse juste le "%" (sans les guillemets) et refais le remplissage. Tu verras la grille se remplir. | |
| | | Marc
Nombre de messages : 2466 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 11:25 | |
| Mince ! J’ai oublié d’enlever le "A" ! Donc tout va bien !
Merci Klaus ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 12:34 | |
| Je confirme aussi Klaus, ça fonctionne sans bug !!! Bon je n'ai pas le temps d'aller plus loin ce midi mais je regarderai dès que possible ta demo... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 15:07 | |
| Voici une nouvelle version du programme de démo (KGF.dll est inchangée): MODIFICATION DE DONNEES.Après remplissage du GRID à partir de la base, on peut maintenant cliquer sur une cellule quelconque sauf première colonne). Le contenu s'affiche alors dans un champ "Valeur:" sous la grille. On peut y modifier la valeur pis cliquer sur le bouton "Mise à jour" et le champ sera mis à jour dans la base de données. Même si l'on sort du programme par la croix rouge, on relance le programme ensuite et onréaffiche le GRID, la modification est bien prise en compte. On peut utiliser le champ "Critère" en haut pour restraindre le nombre d'enregistrements affichés, faire une modif dans un des enrgistrements affichés, puis réafficher le GRID dans la totalité, la modification sera bien présente sur le bon enregistrement, mais qui ne sera évidemment pas affiché dans la même ligne. Voici le code: - Code:
-
' test_SQLite3.bas
label init, open, close, reset, exit label sample1 label start, exec, commit, rollback, fill, fillgrid, tables, columns label clickgrid, maj
dim res%, base$, SQL%, xNbrRecords%, x%, sOtherID$, sName$, sNumber$ dim p%, sNotes$, sSQL$, RowCount%, TestTable$, i%, j%, s$, y%, id$, champ$ TestTable$ = "TestTable"
full_space 0 : on_close 0,exit
main_menu 1 sub_menu 11 : parent 11,1 : caption 11,"File" sub_menu 111 : parent 111,11 : caption 111,"Initialize SQLite3" : on_click 111,init sub_menu 112 : parent 112,11 : caption 112,"Open SQLite3" : on_click 112,open sub_menu 113 : parent 113,11 : caption 113,"Close SQLite3" : on_click 113,close sub_menu 114 : parent 114,11 : caption 114,"Reset SQLite3" : on_click 114,reset sub_menu 115 : parent 115,11 : caption 115,"-" sub_menu 116 : parent 116,11 : caption 116,"Exit" : on_click 116,exit sub_menu 12 : parent 12,1 : caption 12,"Sample scripts SQL" sub_menu 121 : parent 121,12 : caption 121,"Create sample table" : on_click 121,sample1 sub_menu 13 : parent 13,1 : caption 13,"Execute scripts SQL" sub_menu 131 : parent 131,13 : caption 131,"Start transaction" : on_click 131,start sub_menu 132 : parent 132,13 : caption 132,"Execute script from memo" : on_click 132,exec sub_menu 133 : parent 133,13 : caption 133,"Commit transaction" : on_click 133,commit sub_menu 134 : parent 134,13 : caption 134,"Rollback transaction" : on_click 134,rollback sub_menu 135 : parent 135,13 : caption 135,"-" sub_menu 136 : parent 136,13 : caption 136,"Fill data base" : on_click 136,fill sub_menu 137 : parent 137,13 : caption 137,"Fill grid from data base" : on_click 137,fillgrid sub_menu 138 : parent 138,13 : caption 138,"Get table names in data base" : on_click 138,tables sub_menu 139 : parent 139,13 : caption 139,"Get column names in table 'Critère'" : on_click 139,columns
alpha 1000 : top 1000,10 : left 1000,10 : caption 1000,"Réponse de SQLite3:" memo 1001 : top 1001,30 : left 1001,10 : width 1001,500 : height 1001,300 : bar_both 1001
alpha 1010 : top 1010,350 : left 1010,10 : caption 1010,"Script SQL:" memo 1011 : top 1011,370 : left 1011,10 : width 1011,500 : height 1011,300 : bar_both 1011
progress_bar 1020 : top 1020,680 : left 1020,10 : width 1020,500
alpha 1030 : top 1030,10 : left 1030,540 : caption 1030,"Critère:" edit 1031 : top 1031,10 : left 1031,600 : width 1031,300 text 1031,"A%" alpha 1032 : top 1032,40 : left 1032,540 : caption 1032,"Paramètre:" edit 1033 : top 1033,40 : left 1033,600 : width 1033,300 text 1033,"ORDER BY OtherID ASC" grid 1034 : top 1034,70 : left 1034,540 : width 1034,500 : height 1034,300 grid_column 1034,5 : grid_row 1034,500 : grid_column_fixed 1034,0 grid_one_column_width 1034,1,40 grid_one_column_width 1034,2,60 grid_one_column_width 1034,3,80 grid_one_column_width 1034,4,100 grid_one_column_width 1034,5,200 grid_write 1034,1,1,"ID" grid_write 1034,1,2,"OtherID" grid_write 1034,1,3,"Name" grid_write 1034,1,4,"Number" grid_write 1034,1,5,"Notes" on_click 1034,clickgrid alpha 1035 : top 1035,390 : left 1035,540 : caption 1035,"Ligne:" alpha 1036 : top 1036,390 : left 1036,570 alpha 1037 : top 1037,390 : left 1037,600 : caption 1037,"Colonne:" alpha 1038 : top 1038,390 : left 1038,640 alpha 1039 : top 1039,390 : left 1039,680 : caption 1039,"Valeur:" edit 1040 : top 1040,390 : left 1040,720 : width 1040,200 button 1041 : top 1041,390 : left 1041,950 : caption 1041,"Mise à jour" : on_click 1041,maj
dll_on "KGF.dll"
end
init: res% = dll_call0("InitializeSQLite3") item_add 1001,"init "+str$(res%) res% = dll_call1("GetSQLite3Version",handle(1011)) item_add 1001," version "+str$(res%) return
open: base$ = "MonTestSQLite2.db" SQL% = dll_call2("OpenSQLite3",adr(base$),handle(1001)) item_add 1001,"open "+str$(SQL%) ' récupérer le nombre de lignes de la réponse RowCount% = dll_call2("GetSQLite3RowCount",SQL%,adr(TestTable$)) item_add 1001," "+str$(rowcount%)+" Lignes dans table "+TestTable$ return
close: SQL% = dll_call1("CloseSQLite3",SQL%) item_add 1001,"close "+str$(SQL%) return reset: res% = dll_call0("ResetSQLite3") clear 1001 item_add 1001,"reset "+str$(res%) return exit: SQL% = dll_call1("CloseSQLite3",SQL%) res% = dll_call0("ResetSQLite3") terminate sample1: : ' création d'une table de démo clear 1011 item_add 1011,"CREATE TABLE "+TestTable$+" ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL," item_add 1011,"[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB);" return start: res% = dll_call1("StartSQLite3Transaction",SQL%) item_add 1001,"start transaction "+str$(res%) return exec: res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) item_add 1001,"Script execution "+str$(res%) return commit: res% = dll_call1("CommitSQLite3Transaction",SQL%) item_add 1001,"commit transaction "+str$(res%) return rollback: res% = dll_call1("RollbackSQLite3Transaction",SQL%) item_add 1001,"irollbacknvalidate transaction "+str$(res%) return fill: if SQL%=0 message "No database open" return end_if xNbrRecords% = 10 : ' 500 min 1020,0 : max 1020,xNbrRecords% clear 1011 for x%=1 to xNbrRecords% Position 1020,x% ' construire la requête SQL sOtherID$ = str$(int(1 + Rnd(9))) sName$ = chr$(int(65+rnd(26)))+str$(x%) sNumber$ = rnd(1) p% = instr(sNumber$,",") if p%>0 then sNumber$ = left$(sNumber$,p%-1)+"."+mid$(sNumber$,p%+1,len(sNumber$)) sNotes$ = "Possibilité de stocker des données BLOB" sSQL$ = "INSERT INTO "+TestTable$+"(Name,OtherID,Number,Notes) VALUES (²"+sName$+"²,"+sOtherID$+","+sNumber$+",²"+sNotes$+"²);" item_add 1011,sSQL$ ' exécuter la requête SQL res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(sSQL$)) if res%<0 item_add 1011,"Erreur dans requête SQL" return end_if next x% item_add 1011,"Database filled with "+str$(xNbrRecords%)+" records" Position 1020,0 return
fillgrid: if SQL%=0 message "No database open" return end_if ' récupérer le nombre de lignes de la réponse RowCount% = dll_call2("GetSQLite3RowCount",SQL%,adr(TestTable$)) if RowCount%<1 item_add 1011,"Table "+TestTable$+"manquante ou vide" return end_if grid_row 1034,RowCount%+1 ' charger la table dans le gridRequête SQL sSQL$ = "SELECT * " sSQL$ = sSQL$ + "FROM "+testTable$ sSQL$ = sSQL$ + " WHERE (("+testTable$+".Name)" sSQL$ = sSQL$ + " Like ²"+text$(1031)+"²)" if text$(1033)<>"" sSQL$ = sSQL$ + " "+text$(1033)+";" else sSQL$ = sSQL$ + ";" end_if
' préparation de la requête: sélection des enregistrements de la table selon les critères res% = dll_call2("CompileSQLite3Script",SQL%,adr(sSQL$))
' Vider grid for i%=2 to RowCount%+1 for j%=1 to grid_column(1034) grid_write 1034,i%,j%,"" next j% next i% ' boucle d'affichage du résultat min 1020,0 : max 1020,5 : position 1020,0 for i%=1 to RowCount% position 1020,i% ' Remplissage grid par lecture de chacun des colonnes de chacun des enregistrements res% = dll_call1("GetSQLite3NextRow",SQL%) if res%<0 then exit_for for j%=1 to 5 res% = dll_call2("GetSQLite3CellText",SQL%,j%) grid_write 1034,i%+1,j%,text$(1001) : ' Ecriture dans la cellule correspondante next j% next i% res% = dll_call1("FinalizeSQLite3Request",SQL%) return
tables: if SQL%=0 message "No database open" return end_if res% = dll_call1("GetSQLite3TableNames",SQL%) item_add 1001,str$(res%)+" tables" return columns: if SQL%=0 message "No database open" return end_if s$ = trim$(text$(1031)) if s$="" then s$ = TestTable$ res% = dll_call2("GetSQLite3ColumnNames",SQL%,adr(s$)) item_add 1001,str$(res%)+" colonnes dans table "+s$ return
clickgrid: x% = mouse_x_left_down(1034) y% = mouse_y_left_down(1034) x% = grid_x_to_column(1034,x%) y% = grid_y_to_row(1034,y%) - 1 s$ = grid_read$(1034,y%+1,x%) caption 1036,str$(y%) caption 1038,str$(x%) text 1040,s$ id$ = grid_read$(1034,y%+1,1) champ$ = grid_read$(1034,1,x%) return
maj: if x%<2 message "colonne interdite" return end_if s$ = trim$(text$(1040)) sSQL$ = "UPDATE TestTable SET "+champ$+" = ²"+s$+"² WHERE ID= ²"+id$+"² ;" clear 1011 item_add 1011,sSQL$ res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) item_add 1001,"UPDATE execution "+str$(res%) gosub fillgrid item_add 1001,"FILLGRID execution "+str$(res%) return | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: KGF_dll - nouvelles versions Mar 26 Oct 2021 - 17:36 | |
| Je viens de télécharger le dernier code et remettre à jour la dll, mais.... heuuu Klaus c'est normal que le GRID reste désespérément vide ??!!! Edit : J'ai trouvé ! Je n'ai pas encore tout compris mais ça fonctionne. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: KGF_dll - nouvelles versions Mer 27 Oct 2021 - 1:43 | |
| Voici une nouvelle version du programme de démo. Déjà auparavant, le programme de démo contenait une ligne du menu "Execute scripts SQL" qui permet d'exécuter une requête SQL (multi-ligne) placée dans le mémo en bas à gauche. J'ai ajouté 3 lignes au menu "Sample scripts SQL" pour montrer un peu la puissance de ce dispositif: "Delete sample table"Ce script supprime purement et simplement la table TestTable. Cliquez sur cette ligne, puis sur "Execute script from memo" dans me menu "Execute scripts SQL". Un clic sur "Fill grid from data base" montrera alors par un message d'erreur que la table est absente, ainsi qu'un clic sur "Get table names in data base" (0 tables trouvées). "Delete records with selection"Ce script supprime tous les enregistrements qui correspondent à un critère. Saisissez "Number < 0.3" dans le champ "Critère" en haut à droite. Cliquez sur cette ligne, puis sur "Execute script from memo" dans me menu "Execute scripts SQL". Mettez "%" dans "Critère" et cliquez sur "Fill grid from data base" pour voir l'effet. "Empty sample table"Ce script vide complètement ta table TestTable. Cliquez sur cette ligne, puis sur "Execute script from memo" dans me menu "Execute scripts SQL". Un clic sur "Fill grid from data base" montrera alors par un message d'erreur que la table est vide, ainsi qu'un clic sur "Get table names in data base" (1 tables trouvées). Il n'y a pas de nouvelle version de KGF.dll. C'est simplement du code Panoramic pour montrer les capacités des requètes SQL. A vous de tester vos propres requêtes en les plaçant dans le mémo en bas à gauche, en mettant le caractère "²" à la place des guillemets. Puis cliquez sur "Execute script from memo" dans me menu "Execute scripts SQL". - Code:
-
' test_SQLite3.bas
label init, open, close, reset, exit label sample1, sample2, sample3, sample4 label start, exec, commit, rollback, fill, fillgrid, tables, columns label clickgrid, maj
dim res%, base$, SQL%, xNbrRecords%, x%, sOtherID$, sName$, sNumber$ dim p%, sNotes$, sSQL$, RowCount%, TestTable$, i%, j%, s$, y%, id$, champ$ TestTable$ = "TestTable"
full_space 0 : on_close 0,exit
main_menu 1 sub_menu 11 : parent 11,1 : caption 11,"File" sub_menu 111 : parent 111,11 : caption 111,"Initialize SQLite3" : on_click 111,init sub_menu 112 : parent 112,11 : caption 112,"Open SQLite3" : on_click 112,open sub_menu 113 : parent 113,11 : caption 113,"Close SQLite3" : on_click 113,close sub_menu 114 : parent 114,11 : caption 114,"Reset SQLite3" : on_click 114,reset sub_menu 115 : parent 115,11 : caption 115,"-" sub_menu 116 : parent 116,11 : caption 116,"Exit" : on_click 116,exit sub_menu 12 : parent 12,1 : caption 12,"Sample scripts SQL" sub_menu 121 : parent 121,12 : caption 121,"Create sample table" : on_click 121,sample1 sub_menu 122 : parent 122,12 : caption 122,"Delete sample table" : on_click 122,sample2 sub_menu 123 : parent 123,12 : caption 123,"Delete records with selection" : on_click 123,sample3 sub_menu 124 : parent 124,12 : caption 124,"Empty sample table" : on_click 124,sample4 sub_menu 13 : parent 13,1 : caption 13,"Execute scripts SQL" sub_menu 131 : parent 131,13 : caption 131,"Start transaction" : on_click 131,start sub_menu 132 : parent 132,13 : caption 132,"Execute script from memo" : on_click 132,exec sub_menu 133 : parent 133,13 : caption 133,"Commit transaction" : on_click 133,commit sub_menu 134 : parent 134,13 : caption 134,"Rollback transaction" : on_click 134,rollback sub_menu 135 : parent 135,13 : caption 135,"-" sub_menu 136 : parent 136,13 : caption 136,"Fill data base" : on_click 136,fill sub_menu 137 : parent 137,13 : caption 137,"Fill grid from data base" : on_click 137,fillgrid sub_menu 138 : parent 138,13 : caption 138,"Get table names in data base" : on_click 138,tables sub_menu 139 : parent 139,13 : caption 139,"Get column names in table 'Critère'" : on_click 139,columns
alpha 1000 : top 1000,10 : left 1000,10 : caption 1000,"Réponse de SQLite3:" memo 1001 : top 1001,30 : left 1001,10 : width 1001,500 : height 1001,300 : bar_both 1001
alpha 1010 : top 1010,350 : left 1010,10 : caption 1010,"Script SQL:" memo 1011 : top 1011,370 : left 1011,10 : width 1011,500 : height 1011,300 : bar_both 1011
progress_bar 1020 : top 1020,680 : left 1020,10 : width 1020,500
alpha 1030 : top 1030,10 : left 1030,540 : caption 1030,"Critère:" edit 1031 : top 1031,10 : left 1031,600 : width 1031,300 text 1031,"A%" alpha 1032 : top 1032,40 : left 1032,540 : caption 1032,"Paramètre:" edit 1033 : top 1033,40 : left 1033,600 : width 1033,300 text 1033,"ORDER BY OtherID ASC" grid 1034 : top 1034,70 : left 1034,540 : width 1034,500 : height 1034,300 grid_column 1034,5 : grid_row 1034,500 : grid_column_fixed 1034,0 grid_one_column_width 1034,1,40 grid_one_column_width 1034,2,60 grid_one_column_width 1034,3,80 grid_one_column_width 1034,4,100 grid_one_column_width 1034,5,200 grid_write 1034,1,1,"ID" grid_write 1034,1,2,"OtherID" grid_write 1034,1,3,"Name" grid_write 1034,1,4,"Number" grid_write 1034,1,5,"Notes" on_click 1034,clickgrid alpha 1035 : top 1035,390 : left 1035,540 : caption 1035,"Ligne:" alpha 1036 : top 1036,390 : left 1036,570 alpha 1037 : top 1037,390 : left 1037,600 : caption 1037,"Colonne:" alpha 1038 : top 1038,390 : left 1038,640 alpha 1039 : top 1039,390 : left 1039,680 : caption 1039,"Valeur:" edit 1040 : top 1040,390 : left 1040,720 : width 1040,200 button 1041 : top 1041,390 : left 1041,950 : caption 1041,"Mise à jour" : on_click 1041,maj
dll_on "KGF.dll"
end
sub ClearGrid() dim_local r11%,c1% grid_row 1034,1 end_sub
init: res% = dll_call0("InitializeSQLite3") item_add 1001,"init "+str$(res%) res% = dll_call1("GetSQLite3Version",handle(1011)) item_add 1001," version "+str$(res%) return
open: base$ = "MonTestSQLite2.db" SQL% = dll_call2("OpenSQLite3",adr(base$),handle(1001)) item_add 1001,"open "+str$(SQL%) ' récupérer le nombre de lignes de la réponse RowCount% = dll_call2("GetSQLite3RowCount",SQL%,adr(TestTable$)) item_add 1001," "+str$(rowcount%)+" Lignes dans table "+TestTable$ return
close: SQL% = dll_call1("CloseSQLite3",SQL%) item_add 1001,"close "+str$(SQL%) return reset: res% = dll_call0("ResetSQLite3") clear 1001 item_add 1001,"reset "+str$(res%) return exit: SQL% = dll_call1("CloseSQLite3",SQL%) res% = dll_call0("ResetSQLite3") terminate sample1: : ' création d'une table de démo clear 1011 item_add 1011,"CREATE TABLE "+TestTable$+" ([ID] INTEGER PRIMARY KEY,[OtherID] INTEGER NULL," item_add 1011,"[Name] VARCHAR (255),[Number] FLOAT, [notes] BLOB);" return sample2: : ' supprimer une table de démo clear 1011 item_add 1011,"DROP TABLE ²"+TestTable$+"²" return sample3: : ' supprimer des enregistrements avec sélection clear 1011 item_add 1011,"DELETE FROM ²"+TestTable$+"² WHERE "+text$(1031) return sample4: : ' vider une table de démo clear 1011 item_add 1011,"DELETE FROM ²"+TestTable$+"²" return start: res% = dll_call1("StartSQLite3Transaction",SQL%) item_add 1001,"start transaction "+str$(res%) return exec: res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) item_add 1001,"Script execution "+str$(res%) clearGrid() return commit: res% = dll_call1("CommitSQLite3Transaction",SQL%) item_add 1001,"commit transaction "+str$(res%) return rollback: res% = dll_call1("RollbackSQLite3Transaction",SQL%) item_add 1001,"irollbacknvalidate transaction "+str$(res%) return fill: if SQL%=0 message "No database open" return end_if xNbrRecords% = 10 : ' 500 min 1020,0 : max 1020,xNbrRecords% clear 1011 for x%=1 to xNbrRecords% Position 1020,x% ' construire la requête SQL sOtherID$ = str$(int(1 + Rnd(9))) sName$ = chr$(int(65+rnd(26)))+str$(x%) sNumber$ = rnd(1) p% = instr(sNumber$,",") if p%>0 then sNumber$ = left$(sNumber$,p%-1)+"."+mid$(sNumber$,p%+1,len(sNumber$)) sNotes$ = "Possibilité de stocker des données BLOB" sSQL$ = "INSERT INTO "+TestTable$+"(Name,OtherID,Number,Notes) VALUES (²"+sName$+"²,"+sOtherID$+","+sNumber$+",²"+sNotes$+"²);" item_add 1011,sSQL$ ' exécuter la requête SQL res% = dll_call2("ExecuteSQLite3Script",SQL%,adr(sSQL$)) if res%<0 item_add 1011,"Erreur dans requête SQL" return end_if next x% item_add 1011,"Database filled with "+str$(xNbrRecords%)+" records" Position 1020,0 return
fillgrid: if SQL%=0 message "No database open" return end_if ' récupérer le nombre de lignes de la réponse RowCount% = dll_call2("GetSQLite3RowCount",SQL%,adr(TestTable$)) if RowCount%<1 item_add 1011,"Table "+TestTable$+"manquante ou vide" return end_if grid_row 1034,RowCount%+1 ' charger la table dans le gridRequête SQL sSQL$ = "SELECT * " sSQL$ = sSQL$ + "FROM "+testTable$ sSQL$ = sSQL$ + " WHERE (("+testTable$+".Name)" sSQL$ = sSQL$ + " Like ²"+text$(1031)+"²)" if text$(1033)<>"" sSQL$ = sSQL$ + " "+text$(1033)+";" else sSQL$ = sSQL$ + ";" end_if
' préparation de la requête: sélection des enregistrements de la table selon les critères res% = dll_call2("CompileSQLite3Script",SQL%,adr(sSQL$))
' Vider grid for i%=2 to RowCount%+1 for j%=1 to grid_column(1034) grid_write 1034,i%,j%,"" next j% next i% ' boucle d'affichage du résultat min 1020,0 : max 1020,5 : position 1020,0 for i%=1 to RowCount% position 1020,i% ' Remplissage grid par lecture de chacun des colonnes de chacun des enregistrements res% = dll_call1("GetSQLite3NextRow",SQL%) if res%<0 then exit_for for j%=1 to 5 res% = dll_call2("GetSQLite3CellText",SQL%,j%) grid_write 1034,i%+1,j%,text$(1001) : ' Ecriture dans la cellule correspondante next j% next i% res% = dll_call1("FinalizeSQLite3Request",SQL%) return
tables: if SQL%=0 message "No database open" return end_if res% = dll_call1("GetSQLite3TableNames",SQL%) item_add 1001,str$(res%)+" tables" return columns: if SQL%=0 message "No database open" return end_if s$ = trim$(text$(1031)) if s$="" then s$ = TestTable$ res% = dll_call2("GetSQLite3ColumnNames",SQL%,adr(s$)) item_add 1001,str$(res%)+" colonnes dans table "+s$ return
clickgrid: x% = mouse_x_left_down(1034) y% = mouse_y_left_down(1034) x% = grid_x_to_column(1034,x%) y% = grid_y_to_row(1034,y%) - 1 s$ = grid_read$(1034,y%+1,x%) caption 1036,str$(y%) caption 1038,str$(x%) text 1040,s$ id$ = grid_read$(1034,y%+1,1) champ$ = grid_read$(1034,1,x%) return
maj: if x%<2 message "colonne interdite" return end_if s$ = trim$(text$(1040)) sSQL$ = "UPDATE TestTable SET "+champ$+" = ²"+s$+"² WHERE ID= ²"+id$+"² ;" clear 1011 item_add 1011,sSQL$ res% = dll_call2("ExecuteSQLite3Script",SQL%,handle(1011)) item_add 1001,"UPDATE execution "+str$(res%) gosub fillgrid item_add 1001,"FILLGRID execution "+str$(res%) return
Les 3 scripts ajoutés ont été écrits selon les informations del'excellent site de cours SQL: https://sql.sh/cours/. | |
| | | Contenu sponsorisé
| Sujet: Re: KGF_dll - nouvelles versions | |
| |
| | | | KGF_dll - nouvelles versions | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |