peut on changer la version de sqlite de AutoIt à savoir 3.6.22 et comment ,
car j'ai un probleme avec une requête, elle fonctionne sous Sqlite Manager 1.2.4 mais pas sous AutoIt
voici la requête:
merci de votre aide.



Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE VIRTUAL TABLE TexteGroupAd USING fts3(User GroupeAD);")

Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE VIRTUAL TABLE TexteGroupAd using fts4(User, GroupeAD)")Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE VIRTUAL TABLE TexteGroupAd using fts3(User, GroupeAD)")


Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE VIRTUAL TABLE TexteGroupAd using fts3(Id, User, GroupeAD)")
_SQLite_Exec($hDb, "INSERT INTO TexteGroupAd (Id, User, GroupeAD) SELECT Id, User, GroupeAD FROM log")
Code : Tout sélectionner
create table log (id integer primary key autoincrement, user text, groupead text);
CREATE VIRTUAL TABLE TexteGroupAd using fts3(User, GroupeAD);
insert into log(user, groupead) values ('Pierre', 'Utilisateurs');
insert into log(user, groupead) values ('Pierre', 'Groupe1');
insert into log(user, groupead) values ('Paul', 'Groupe2');
insert into log(user, groupead) values ('Eric', 'Groupe1');
insert into log(user, groupead) values ('Jacques', 'Utilisateurs');
INSERT INTO TexteGroupAd (User, GroupeAD) SELECT User, GroupeAD FROM log;
select * from TexteGroupAd where user match 'pierre';
Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE VIRTUAL TABLE TexteGroupAd using fts3(User, GroupeAD, Pages, Copies, Paper)")
_SQLite_Exec($hDb, "INSERT INTO TexteGroupAd (User, GroupeAD, Pages, Copies, Paper) SELECT User, GroupeAD, Pages, Copies, Paper FROM log")
Code : Tout sélectionner
SELECT User, GroupeAD, total(pages * copies) FROM log WHERE paper ='A4' and GroupeAD like '%GG-XXX%' GROUP BY user order by user;
Code : Tout sélectionner
ELECT User, GroupeAD, total(pages * copies) FROM log WHERE paper ='A4' and GroupeAD like '%GG-Chbob%' GROUP BY user order by user;

Code : Tout sélectionner
$res = _SQLite_GetTable2d($hDb, "select user, GroupeAD as [GroupeAD], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4' and GroupeAD LIKE "& W("%"&$ADGroup)& ") as [Pages A4 imprimées] from log L where GroupeAD LIKE "& W("%"&$ADGroup)& " group by user ;", $rows, $nrows, $ncols)Code : Tout sélectionner
$res = _SQLite_GetTable2d($hDb, "select user, GroupeAD as [GroupeAD], (select total(pages * copies) from log G where L.user = G.user and g.paper = 'A4' and GroupeAD LIKE "& X("%"&$ADGroup)& ") as [Pages A4 imprimées] from log L where GroupeAD LIKE "& X("%"&$ADGroup)& " group by user ;", $rows, $nrows, $ncols)Code : Tout sélectionner
Func W($s)
Return ("'" & StringReplace($s, "'", "",0 ,1) & "%'")
EndFunc ;==>W
Erreur fatale !dans la table Log , j'ai la colonne GroupeAD contenant tous les groupes dont l'utilisateur fait parti , séparé par "|" ex : gg-XX|gg-xy

donc au final 4 tables : PrintLog, UserGroups, Users, GroupsBingo, on remplace les users dans cette table par un userId et, du coup, on crée une table des users avec Id et user en clair.
Ce qui serait encore mieux serait que tu trouves par toi-même la table qui manque à ce paysage...


Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE TABLE if not exists Groups (" & _
" GroupeId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," & _
" NameGG CHAR," & _
" CONSTRAINT pk_UniqGG UNIQUE(NameGG) ON CONFLICT REPLACE);" & _
" CREATE INDEX if not exists idx_NameGG ON Groups (NameGG);")
_SQLite_Exec($hDb, "CREATE TABLE if not exists Users (" & _
" UserId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," & _
" User CHAR," & _
" CONSTRAINT pk_Uniquser UNIQUE(User) ON CONFLICT REPLACE);" & _
" CREATE INDEX if not exists idx_User ON Users (User);")
_SQLite_Exec($hDb, "CREATE TABLE if not exists UserGroups (" & _
" UserId CHAR," & _
" GroupeId CHAR);")Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE TABLE if not exists PrintLog (" & _
" Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT," & _
" Date CHAR," & _
" User CHAR," & _
" Pages INTEGER," & _
" Copies INTEGER," & _
" Printer CHAR," & _
" Document CHAR," & _
" Client CHAR," & _
" Paper CHAR," & _
" Language CHAR," & _
" Height INTEGER," & _
" Width INTEGER," & _
" Duplex BOOLEAN," & _
" Grayscale BOOLEAN," & _
" SizeKb INTEGER," & _
" UserId INTEGER," & _
" CONSTRAINT ksUniq UNIQUE(Date, User, Printer, Document) ON CONFLICT REPLACE);" & _
"CREATE INDEX if not exists ixDate ON PrintLog (Date);" & _
"CREATE INDEX if not exists ixUser ON PrintLog (User);" & _
"CREATE INDEX if not exists ixPrinter ON PrintLog (Printer);")Code : Tout sélectionner
Global $aLines, $res
_FileReadToArray($sFilePathBDD, $aLines)
_SQLite_SetTimeout($hDb, 60000) ; on laisse jusqu'à 60 s de timeout, juste au cas où la base serait exploitée/exploitable par un autre process
_SQLite_Exec($hDb, "begin immediate;") ; on lance une transaction avant l'insertion en boucle, pour la performance
For $line In $aLines
$res = StringRegExp($line, '([^,]*),([^,]*),?', 1)
If Not @error Then
_SQLite_Exec($hDb, "insert into Groups ( NameGG) " & _
"values (" & X($res[1]) & ");")
EndIf
Next
;~ Global $aLines, $res
_FileReadToArray($fileMois, $aLines)
_SQLite_SetTimeout($hDb, 60000) ; on laisse jusqu'à 60 s de timeout, juste au cas où la base serait exploitée/exploitable par un autre process
_SQLite_Exec($hDb, "begin immediate;") ; on lance une transaction avant l'insertion en boucle, pour la performance
For $line In $aLines
$res = StringRegExp($line, '([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),"([^,]*)",([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)kb,?', 1)
If Not @error Then
$res[11] = Number($res[1] = 'DUPLEX')
$res[12] = Number($res[12] = 'GRAYSCALE')
_SQLite_Exec($hDb, "insert into Printlog ( date, user, pages, copies, printer, " & _
"document, client, paper, language, height, " & _
" width, duplex, grayscale, sizeKb) " & _
"values (" & X($res[0]) & XX($res[1]) & ZZ($res[2]) & ZZ($res[3]) & XX($res[4]) & _
XX($res[5]) & XX($res[6]) & XX($res[7]) & XX($res[8]) & ZZ($res[9]) & _
ZZ($res[10]) & ZZ($res[11]) & ZZ($res[12]) & ZZ($res[13]) & ");")
EndIf
Next
_FileReadToArray($sFilePathBDD, $aLines)
_SQLite_SetTimeout($hDb, 60000) ; on laisse jusqu'à 60 s de timeout, juste au cas où la base serait exploitée/exploitable par un autre process
_SQLite_Exec($hDb, "begin immediate;") ; on lance une transaction avant l'insertion en boucle, pour la performance
For $line In $aLines
$res = StringRegExp($line, '([^,]*),([^,]*),?', 1)
If Not @error Then
_SQLite_Exec($hDb, "insert into UserGroups ( UserId, GroupeId) " & _
"values (" & X($res[0]) & XX($res[1]) & ");")
EndIf
Next
Code : Tout sélectionner
_SQLite_Exec($hDb, "INSERT INTO PrintLog (UserId) SELECT UserId FROM Users Where User = UserId;")
Exact. Deux plombs là-dedans : ... where user = userid est une ânerie et de toutes façons, pas besoin de "remplir" cette colonne indépendamment des autres !mais je bloque et pas sur que ce soit la bonne méthode.

Code : Tout sélectionner
_SQLite_Exec($hDb, "CREATE TABLE Groups (" & _
" GroupeId INTEGER NOT NULL PRIMARY KEY ON CONFLICT IGNORE AUTOINCREMENT," & _
" GroupName CHAR NOT NULL ON CONFLICT IGNORE COLLATE NOCASE," & _
CREATE UNIQUE INDEX [ixGroupName] ON [Groups] ([GroupName] COLLATE NOCASE);arrhhhh il y a des tables de partout, elles se croisent ds tous les sens.N"hésite pas à venir hurler ta rage s'il y a quelque chose qui cloche sévère dans ce que j'ai pondu (à l'arrache, je dois dire). Bonne chance et dis-nous si tu t'en sors !