[R] Version SQLite
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Si tu pouvais poster ici ou en privé ton code actuel et un jeu d'essai (bidon ou pas, je m'en fiche) ça gagnerait un temps considérable.
Au passage, chaque CREATE .. SQL est une instruction SQL. S'il y en a plusieurs à la suite dans un _SQLite_Exec, les séparer par un point-virgule tout simplement.
Au passage, chaque CREATE .. SQL est une instruction SQL. S'il y en a plusieurs à la suite dans un _SQLite_Exec, les séparer par un point-virgule tout simplement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
je bloque sur cette commande:
message d'erreur :
! SQLite.au3 Error
--> Function: _SQLite_Exec
--> Query: CREATE TABLE UsersGroups ( UserId INTEGER CONSTRAINT fkUsersGroup_User REFERENCES Users (UserId) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED, GroupId INTEGER CONSTRAINT fkUsersGroups_Group REFERENCES Groups (GroupId) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED, CONSTRAINT () PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
--> Error: near "(": syntax error
► Afficher le texte
! SQLite.au3 Error
--> Function: _SQLite_Exec
--> Query: CREATE TABLE UsersGroups ( UserId INTEGER CONSTRAINT fkUsersGroup_User REFERENCES Users (UserId) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED, GroupId INTEGER CONSTRAINT fkUsersGroups_Group REFERENCES Groups (GroupId) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY DEFERRED, CONSTRAINT () PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
--> Error: near "(": syntax error
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Tu as changé les crochets contre des parenthèses !
CONSTRAINT () PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
devrait être
CONSTRAINT [] PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
CONSTRAINT () PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
devrait être
CONSTRAINT [] PRIMARY KEY (UserId, GroupId) ON CONFLICT IGNORE);
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
je pensais qu'il n'y avait pas de crochet ds les envoies de commande ,mea-culpa
je continue la création pour renseigne la base.
je continue la création pour renseigne la base.
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Pour SQL :
-) des simples quotes encadrent un littéral texte, à doubler pour représenter une quote significative
'c''est comme ça'
-) des crochets droits encadrent un nom du schéma (table [virtuelle], colonne, contrainte, index, trigger, vue, alias, base, collation ...)
[ma table] ou [cet index-là au nom Unicode bizarre ΞζϝЗБ]
-) SQLite accepte aussi des doubles quotes au lieu de crochets droits (compatibilité MS)
"ma table" ou "cet index-là au nom Unicode bizarre ΞζϝЗБ"
Le type de contrainte dont on parlait peut avec SQLite ne pas avoir de nom, d'où le [] qu'on peut aussi écrire "" ou même sucrer complètement.
-) des simples quotes encadrent un littéral texte, à doubler pour représenter une quote significative
'c''est comme ça'
-) des crochets droits encadrent un nom du schéma (table [virtuelle], colonne, contrainte, index, trigger, vue, alias, base, collation ...)
[ma table] ou [cet index-là au nom Unicode bizarre ΞζϝЗБ]
-) SQLite accepte aussi des doubles quotes au lieu de crochets droits (compatibilité MS)
"ma table" ou "cet index-là au nom Unicode bizarre ΞζϝЗБ"
Le type de contrainte dont on parlait peut avec SQLite ne pas avoir de nom, d'où le [] qu'on peut aussi écrire "" ou même sucrer complètement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
j'ai mon fichier txt avec les utilisateurs et groupes du type:
user1,GG-XX
user1,GG-YY
user2,GG-XX
user2,GG-ZZ
Pour la création de la base plus d'erreur ( les crochets)
Pour renseigner la base voici le code
Par contre j'ai des erreurs
user1,GG-XX
user1,GG-YY
user2,GG-XX
user2,GG-ZZ
Pour la création de la base plus d'erreur ( les crochets)
Pour renseigner la base voici le code
► Afficher le texte
► Afficher le texte
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Il faut quoter tes littéraux !
4 simples X devraient le faire.
C'est bien visible dans la ligne d'erreur que l'UDF SQLite t'affiche dans la console :
Ce que tu lui passes (USER1, GG-XX) c'est deux identifiants de schéma, pas des chaînes littérales ('USER1', 'GG-XX')
4 simples X devraient le faire.
Code : Tout sélectionner
_SQLite_Exec($hDb, "insert into Users (Username) values (" & X($res[0]) & ");" & _
"insert into Groups (Groupname) values (" & X($res[1]) & ");" & _
"insert into UsersGroups (UserId, GroupId) values ((select UserId from Users where Username = " & X($res[0]) & ", (select GroupId from Groups where Groupname = " & X($res[1]) & " );")Code : Tout sélectionner
insert into Users (Username) values (USER1);insert into Groups (Groupname) values (GG-XX);insert into UsersGroups (UserId, GroupId) values ((select UserId from Users where Username = USER, (select GroupId from Groups where Groupname = GG-XX );La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
j'ai repris le code avec la fonction X
mais toujours message d'erreur:
le code :
ça rempli bien la table 'Users' ds son intégralité j'ai bien tous mes utilisateurs,
pour la table 'Groups' , elle est partiellement remplie,
pour la table 'UsersGroups', elle est vide.
j'utilise le logiciel SQLite 2009 Pro pour éditer la base.
► Afficher le texte
► Afficher le texte
► Afficher le texte
pour la table 'Groups' , elle est partiellement remplie,
pour la table 'UsersGroups', elle est vide.
j'utilise le logiciel SQLite 2009 Pro pour éditer la base.
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Plates excuses, essaye ça :
► Afficher le texte
Comme tu veux...j'utilise le logiciel SQLite 2009 Pro pour éditer la base.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
super , la création de la base est ok ,
l'insertion ds la base est correct , j'ai modifié les inserts ,de faire tous d'un seul bloque généré des erreurs.
Pour la création d'une base par mois, c comme j'ai les log tous les mois donc ... , mais créer un base générale , j'adhère , cela modifie les insert ds la base ou je garde les insert actuel?
pas de souci
malgré les nombreux pièges ( bout de code, information incomplète, ect..).
Au début j'avais commencé un code via des requêtes snmp vers les imprimantes et copieur pour interroger les compteurs d'impression , puis mettre tout cela ds un fichier excel.
Puis la demande de création de script en se basant sur le spooler d'impression ( la base sqlite), question est ce que tous les impressions qui passent par le spooler d'impression sont bien réellement imprimées, chez moi hélas non car les fonctions avancées des copieurs permet de faire du stockage avant impression. D'où l'info du spooler est partiellement vrai.
l'idéale sa serait de merger les deux, mais la c l'usine. La plupart des logiciels de rapport d'impression se base sur le spooler d'impression des serveurs d'impression.
Stop j'arrête la réflexion ( c dimanche et OL fait match nul contre PSG). je rectifie , l'OL vient de perdre arrrhhh!!
Voici les différents scripts qui vont m'aider à effectuer des rapports d'impression assez finement en pièce jointe.
Pour le script snmp , je pense qu'on peut l'optimiser
Pour le script Excel , peut on renseigner le fichier sans l'ouvrir ?
Pour le script SQlite , merci jchd
j'ai encore des lacunes sur les requêtes sqlite ex:
- requête avec les groupes et le nombre d'impression A4 (total copie*pages)
l'insertion ds la base est correct , j'ai modifié les inserts ,de faire tous d'un seul bloque généré des erreurs.
Pour la création d'une base par mois, c comme j'ai les log tous les mois donc ... , mais créer un base générale , j'adhère , cela modifie les insert ds la base ou je garde les insert actuel?
c pour tester ta myopie traditionnelleremis les parenthèses que tu avais enlevé dans l'insert (user, groupe), salopiaud
Au début j'avais commencé un code via des requêtes snmp vers les imprimantes et copieur pour interroger les compteurs d'impression , puis mettre tout cela ds un fichier excel.
Puis la demande de création de script en se basant sur le spooler d'impression ( la base sqlite), question est ce que tous les impressions qui passent par le spooler d'impression sont bien réellement imprimées, chez moi hélas non car les fonctions avancées des copieurs permet de faire du stockage avant impression. D'où l'info du spooler est partiellement vrai.
l'idéale sa serait de merger les deux, mais la c l'usine. La plupart des logiciels de rapport d'impression se base sur le spooler d'impression des serveurs d'impression.
Stop j'arrête la réflexion ( c dimanche et OL fait match nul contre PSG). je rectifie , l'OL vient de perdre arrrhhh!!
Voici les différents scripts qui vont m'aider à effectuer des rapports d'impression assez finement en pièce jointe.
Pour le script snmp , je pense qu'on peut l'optimiser
Pour le script Excel , peut on renseigner le fichier sans l'ouvrir ?
Pour le script SQlite , merci jchd
j'ai encore des lacunes sur les requêtes sqlite ex:
- requête avec les groupes et le nombre d'impression A4 (total copie*pages)
► Afficher le texte
- Fichiers joints
-
consolidation_compteur_imp_mail.au3- (78.07 Kio) Téléchargé 80 fois
-
collecte_compteur_imp_mail.au3- (229.8 Kio) Téléchargé 79 fois
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Version SQLite
Tu peux accumuler niaisement, tu as la date de chaque printout, indexée. Rien ne limite la fourchette de dates, ni au niveau des inserts, ni ailleurs. C'est à toi de requérir sur "date between xxx and yyy" si tu en as besoin. Côté volume, rien à craindre, SQLite assume.
Pour SNMP, je ne suis pas assez familier avec, donc je risque de te dire (encore) des couenneries. Au niveau du principe, tente d'extraire les infos sous le même format que celui des logs. Quite à rajouter une colonne "source" dans la table printout, qui pourrait valoir 'S' (SNMP), 'L' (logs), 'D' (divination), ...
Tu peux faire ce que tu veux avec un fichier Excel via l'UDF ... Excel. Facile.
Pour le total de copies par groupe, il faut savoir de quoi on parle :
select upper(groupname) as Groupe, total(pages * copies) as "Copies imprimées" from printouts natural join users natural join usersgroups natural join groups group by groupname order by groupname;
va bien renvoyer une liste de tous les groupes qui ont imprimé avec le total des copies faites par ce groupe.
Mais ...
si un user fait partie de deux ou plusieurs groupes, son total de copies
Il faut toujours bien réfléchir avant de se lancer dans le vide sans parachute sinon nos merveilleuses machines nous renvoient, à la vitesse de l'éclair, nos "myopies" dans les dents sous forme de données non significatives et de pseudo-informations faussées.
Exercice : modifier la requête précédente pour éviter cela, faisant donc en sorte que le total des copies attribuées aux différents groupes corresponde au total des copies physiques.
Quand tu as des requêtes récurrentes (type rapports), n'hésite pas à en faire des vues, par exemple :Zut, j'ai bien peur d'avoir donné la solution...
Ensuite, dans ton appli, tu peux récupérer le contenu de la vue comme si c'était une table, à laquelle tu peux d'ailleurs rajouter des conditions de sélection :Une vue ne coûte rien : ce n'est qu'une requête (celle qui définit la vue) stockée dans la DDL de la base. Elle ne s'exécute que lorsque tu l'affiche avec ton manager ou quand tu "tapes" dedans avec une autre requête, comme celle ci-dessus. Elle en devient alors une sous-requête. Cela simplifie/clarifie le code de ton appli. Qui plus est, il est possible de modifier les données d'une vue (si, si !) par des triggers INSTEAD OF qui permettent de modifier la ou les tables qui alimentent cette vue.
>Tu vois que les possibilités sont virtuellement infinies, avec _très_ peu de code en fait (une fois que le schéma de la base est créé). Imagine le code AutoIt qu'il te faudrait écrire si tu voulais obtenir autant de souplesse et de puissance de requêtes et les difficultés de mise au point et de maintenance/évolution.
Encore une fois, j'avoue profiter lâchement de ton exemple de projet pour illustrer à quel point SQLite s'avère l'outil idéal pour stocker, organiser et accéder à des données applicatives sous un format portable, compact et terriblement efficace. Quand on rajoute à ça les qualités ACID que SQLite offre naturellement, on voit mal pourquoi certains s'obstinent à maintenir péniblement des usines à gaz de multiples fichiers aux formats propriétaires qui n'assurent aucune solidité et demandent beaucoup plus d'efforts de développement.
Pour SNMP, je ne suis pas assez familier avec, donc je risque de te dire (encore) des couenneries. Au niveau du principe, tente d'extraire les infos sous le même format que celui des logs. Quite à rajouter une colonne "source" dans la table printout, qui pourrait valoir 'S' (SNMP), 'L' (logs), 'D' (divination), ...
Tu peux faire ce que tu veux avec un fichier Excel via l'UDF ... Excel. Facile.
Pour le total de copies par groupe, il faut savoir de quoi on parle :
select upper(groupname) as Groupe, total(pages * copies) as "Copies imprimées" from printouts natural join users natural join usersgroups natural join groups group by groupname order by groupname;
va bien renvoyer une liste de tous les groupes qui ont imprimé avec le total des copies faites par ce groupe.
Mais ...
si un user fait partie de deux ou plusieurs groupes, son total de copies
► Afficher le texte
Exercice : modifier la requête précédente pour éviter cela, faisant donc en sorte que le total des copies attribuées aux différents groupes corresponde au total des copies physiques.
Quand tu as des requêtes récurrentes (type rapports), n'hésite pas à en faire des vues, par exemple :
► Afficher le texte
Ensuite, dans ton appli, tu peux récupérer le contenu de la vue comme si c'était une table, à laquelle tu peux d'ailleurs rajouter des conditions de sélection :
► Afficher le texte
>Tu vois que les possibilités sont virtuellement infinies, avec _très_ peu de code en fait (une fois que le schéma de la base est créé). Imagine le code AutoIt qu'il te faudrait écrire si tu voulais obtenir autant de souplesse et de puissance de requêtes et les difficultés de mise au point et de maintenance/évolution.
Encore une fois, j'avoue profiter lâchement de ton exemple de projet pour illustrer à quel point SQLite s'avère l'outil idéal pour stocker, organiser et accéder à des données applicatives sous un format portable, compact et terriblement efficace. Quand on rajoute à ça les qualités ACID que SQLite offre naturellement, on voit mal pourquoi certains s'obstinent à maintenir péniblement des usines à gaz de multiples fichiers aux formats propriétaires qui n'assurent aucune solidité et demandent beaucoup plus d'efforts de développement.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [..] Version SQLite
merci pour les requêtes "create view",
je te remercie du temps que tu as consacré sur mon problème et trouver la bonne solution pour que ce script soit stable dans le temps et aussi d'orienter vers le SQL car c vraiment puissant couplé avec AutoIt.
on a du te le dire une bonne centaine de fois , un tuto sur SQLite
# une section sur SQLite dans le forum ?#
alors ça c terribleEnsuite, dans ton appli, tu peux récupérer le contenu de la vue comme si c'était une table, à laquelle tu peux d'ailleurs rajouter des conditions de sélection :
Spoiler pour :
select * from [Copies/Groupe] where date like '2011-09';
c pour mettre à jour la vue?je vais chercher sur un forum sqlQui plus est, il est possible de modifier les données d'une vue (si, si !) par des triggers INSTEAD OF qui permettent de modifier la ou les tables qui alimentent cette vue.
je te remercie du temps que tu as consacré sur mon problème et trouver la bonne solution pour que ce script soit stable dans le temps et aussi d'orienter vers le SQL car c vraiment puissant couplé avec AutoIt.
on a du te le dire une bonne centaine de fois , un tuto sur SQLite
# une section sur SQLite dans le forum ?#
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Version SQLite
L'intérêt des vues est qu"elles permettent de disposer de tables (fictives dans ce sens où elles ne contiennent aucune données elles-mêmes) rassemblant des requêtes simples ou extrêmement complexes sans surcharger ni la base ni l'application.
J'ai un tout autre point de vue concernant les procédures stockées. Ou bien ce sont des fonctions génériques (traitement particulier de chaînes ou autre) et dans ce cas elles devraient être implémentées sous forme d'extension. Ou bien elles sont propriétaires à une appli et devraient par conséquent être ramenées dans l'application. J'ai vu trop de cas où on utilise des procédures stockées pour créer une couche orientée-objet à du SQL classique. C'est pour moi une perversion dangereuse, car pour une modif de spécification, on doit synchroniser les modifs du schéma, des procédures stockées et de l'application ; c'est le contraire de la POO !
Je m'égare... Oui des vues sont utilisables telles quelles via par exemple un manager comme SQLite Expert qui te permet d'en faire un rapport texte, CSV, Excel, HTML, ... ou par toi dans une autre requête (ou autre vue) comme s'il s'agissait d'une table physique. C'est donc une "brique" SQL, tout comme une classe est une brique en POO. Exemple typique : j'ai une appli qui syndique deux bases dans des domaines connexes mais bien distincts. Plutôt que de mélanger dans une requête des éléments "bas niveau" des deux bases, je crée des vues dans les deux bases, offrant à la syndication les seuls éléments qu'elle a à connaître sans avoir à mettre les mains dans le cambouis et à tout mélanger. La syndication n'a plus à se préoccuper du "comment" pour l'obtention de telle info, on lui présente toute ficelée. La savoir-faire et les recettes de cuisine internes à une base restent cloîtrées au sein de celle-ci. C'est encore une forme de POO (limitée certes) ou au moins relève d'une salutaire séparation des pouvoirs. BTW, on peut accéder à une base externe après l'avoir rendue accessible avec un ATTACH. Très simple.
Oui moi aussi je trouve SQL très performant pour une palette d'utilisation incroyable et une sûreté de fonctionnement inégalée. Le fait que SQLite soit sans administration, sans installation et portable sur toute plate-forme 32 ou 64 bits sans _aucun_ changement en fait un outil de choix dans bien des cas ou l'instinct de beaucoup amène à construire des châteaux de sable qui ne tiennent ni la distance (maintenance, évolution) ni la charge (volume, multi-utilisateurs). L'investissement requis au départ pour construire la base et la faire vivre est vite rentabilisé et ce qui semble ardu et tortueux à un néophyte ne représente souvent qu'un petit pavé de lignes, surtout avec une plate-forme comme AutoIt.
Ton post est en fait un tuto "live". Du fond de mon actuelle cabanne de chantier et avec pour lien une clé 3G qui me coûte un bras et deux jambes chaque jour, j'ai du mal à faire beaucoup plus pour le moment. Plus tard, je ne dis pas...
Bonne chance pour ton projet et n'hésite pas à taper dans le mail si tu coinces sur un truc.
Sur ce, je présente à tou[te]s mes plus plates excuses pour avoir volontairement fait dévier ce post (long de par ma faute) d'un pur sujet AutoIt à des considérations centrées sur SQLite. Ceci dit, je crois que ce n'était pas une mauvaise chose et pourra servir à d'autres.
J'ai un tout autre point de vue concernant les procédures stockées. Ou bien ce sont des fonctions génériques (traitement particulier de chaînes ou autre) et dans ce cas elles devraient être implémentées sous forme d'extension. Ou bien elles sont propriétaires à une appli et devraient par conséquent être ramenées dans l'application. J'ai vu trop de cas où on utilise des procédures stockées pour créer une couche orientée-objet à du SQL classique. C'est pour moi une perversion dangereuse, car pour une modif de spécification, on doit synchroniser les modifs du schéma, des procédures stockées et de l'application ; c'est le contraire de la POO !
Je m'égare... Oui des vues sont utilisables telles quelles via par exemple un manager comme SQLite Expert qui te permet d'en faire un rapport texte, CSV, Excel, HTML, ... ou par toi dans une autre requête (ou autre vue) comme s'il s'agissait d'une table physique. C'est donc une "brique" SQL, tout comme une classe est une brique en POO. Exemple typique : j'ai une appli qui syndique deux bases dans des domaines connexes mais bien distincts. Plutôt que de mélanger dans une requête des éléments "bas niveau" des deux bases, je crée des vues dans les deux bases, offrant à la syndication les seuls éléments qu'elle a à connaître sans avoir à mettre les mains dans le cambouis et à tout mélanger. La syndication n'a plus à se préoccuper du "comment" pour l'obtention de telle info, on lui présente toute ficelée. La savoir-faire et les recettes de cuisine internes à une base restent cloîtrées au sein de celle-ci. C'est encore une forme de POO (limitée certes) ou au moins relève d'une salutaire séparation des pouvoirs. BTW, on peut accéder à une base externe après l'avoir rendue accessible avec un ATTACH. Très simple.
Oui moi aussi je trouve SQL très performant pour une palette d'utilisation incroyable et une sûreté de fonctionnement inégalée. Le fait que SQLite soit sans administration, sans installation et portable sur toute plate-forme 32 ou 64 bits sans _aucun_ changement en fait un outil de choix dans bien des cas ou l'instinct de beaucoup amène à construire des châteaux de sable qui ne tiennent ni la distance (maintenance, évolution) ni la charge (volume, multi-utilisateurs). L'investissement requis au départ pour construire la base et la faire vivre est vite rentabilisé et ce qui semble ardu et tortueux à un néophyte ne représente souvent qu'un petit pavé de lignes, surtout avec une plate-forme comme AutoIt.
Ton post est en fait un tuto "live". Du fond de mon actuelle cabanne de chantier et avec pour lien une clé 3G qui me coûte un bras et deux jambes chaque jour, j'ai du mal à faire beaucoup plus pour le moment. Plus tard, je ne dis pas...
Bonne chance pour ton projet et n'hésite pas à taper dans le mail si tu coinces sur un truc.
Sur ce, je présente à tou[te]s mes plus plates excuses pour avoir volontairement fait dévier ce post (long de par ma faute) d'un pur sujet AutoIt à des considérations centrées sur SQLite. Ceci dit, je crois que ce n'était pas une mauvaise chose et pourra servir à d'autres.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [R] Version SQLite
j'ai voulu créer 2 vues:
puis les requêtes sur ces vues:
et une vue [utilisateur / copie A4]:
par contre un truc bizarre ds la base,
exemple:
user1 membre du groupe XX
ds la vue [utilisateur / copie A4] j'ai bien mon user1 avec le nombre de copie.
lorsque j'ouvre la vue [Copies/Groupe/A4], je n'ai pas le groupe XX dont l'utilisateur fait parti.
► Afficher le texte
► Afficher le texte
► Afficher le texte
exemple:
user1 membre du groupe XX
ds la vue [utilisateur / copie A4] j'ai bien mon user1 avec le nombre de copie.
lorsque j'ouvre la vue [Copies/Groupe/A4], je n'ai pas le groupe XX dont l'utilisateur fait parti.
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Version SQLite
N'ayant pas ta base ni celle que j'ai fabriqué à l'arrache sous la main, je tente une hypothèse : et si ton user1 fait partie de plus d'un groupe ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
ludoo
- Niveau 4

- Messages : 89
- Enregistré le : lun. 11 août 2008 09:25
- Localisation : Drôme 26
- Status : Hors ligne
Re: [R] Version SQLite
oui effectivement , l'utilisateur fait partie de plusieurs groupe.
le nom des groupes est de la forme : GG-xx-ab , GG-xx-ac
code de la base avec les vues.
le nom des groupes est de la forme : GG-xx-ab , GG-xx-ac
code de la base avec les vues.
► Afficher le texte
Ludo
- jchd
- AutoIt MVPs (MVP)

- Messages : 2284
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [R] Version SQLite
C'est donc bien cela. Revois le message où j'évoquais cette subtilité. Si on liste tous les groupes d'un utilisateur et qu'on fait le total de _leurs_ copies (de cchaque groupe), on dupplique l'information des utilisateurs faisant partie de plus d'un groupe. D'où le left outer join et alors il peut y avoir des groupes qui "disparaissent" (en fait, les copies sont décomptées sous un autre groupe).
Si j'ai 5 boîtes de tomates pelées que je considère comme faisant partie à la fois de la famille des fruits et de la famille des légumes, ce n'est pas pour autant que j'ai 10 de ces boîtes en stock ! Si je liste niaisement le stock de chaque famille, c'est bien le résultat absurde que j'obtiens.
Soit on fait un état du stock des légumes, soit des fruits, soit des boîtes de conserves. Toute autre combinaison n'a pas de sémantique et est une erreur mathématique (n'oublions pas que SQL traite essentiellement des ensembles, de leurs éléments et de leurs relations avec une logique reposant quasi-exclusivement sur la théorie mathématique sous-jacente).
De la même façon, un fichier ne peut appartenir à la fois à deux arborescence distinctes. Soit on le copie ailleurs (il y a alors deux fichiers distincts), soit on en fait un lien symbolique (ce qui est un autre type d'objet distinct du fichier réel).
On frôle le "paradoxe" du catalogue des catalogues qui ne se mentionnent pas eux-mêmes...
Si j'ai 5 boîtes de tomates pelées que je considère comme faisant partie à la fois de la famille des fruits et de la famille des légumes, ce n'est pas pour autant que j'ai 10 de ces boîtes en stock ! Si je liste niaisement le stock de chaque famille, c'est bien le résultat absurde que j'obtiens.
Soit on fait un état du stock des légumes, soit des fruits, soit des boîtes de conserves. Toute autre combinaison n'a pas de sémantique et est une erreur mathématique (n'oublions pas que SQL traite essentiellement des ensembles, de leurs éléments et de leurs relations avec une logique reposant quasi-exclusivement sur la théorie mathématique sous-jacente).
De la même façon, un fichier ne peut appartenir à la fois à deux arborescence distinctes. Soit on le copie ailleurs (il y a alors deux fichiers distincts), soit on en fait un lien symbolique (ce qui est un autre type d'objet distinct du fichier réel).
On frôle le "paradoxe" du catalogue des catalogues qui ne se mentionnent pas eux-mêmes...
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
