Bonjour à tous,

Je suis en train de concevoir une application VB6 qui sert à programmer de la musique sur une journée, en fonction de certains critères.
Pour chaque morceau programmé, l'appli fait une requête SQL sur une base access, en fonction de ce qui a été programmé précédemment.
L'accès aux données se fait par ADO.
L'ensemble fonctionne, mais chaque requête est extrêmement longue !
Quelqu'un saurait-il si c'est lié à la nature des requêtes ?

Voici mon code, pour plus de précision :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT Disco.Num, Disco.Numartiste, Disco.titre, Disco.NumCat, Disco.Derdiff, 
Disco.Duree, Artistes.NomArtiste, Genres.NomGenre 
FROM Disco, Artistes, Genres WHERE Disco.NumArtiste = Artistes.IDA 
AND Disco.NumGenre = Genres.IDG AND NumCat = 3 AND Disco.Num NOT IN 
(SELECT ID FROM Prog, Disco WHERE Prog.ID = Disco.Num AND 
Abs(Datediff('n', Prog.Diff, #06:00:00#)) < Disco.EcartTitre) 
AND Disco.NumArtiste NOT IN 
(SELECT Disco.NumArtiste FROM Prog, Disco WHERE Disco.Num = Prog.ID 
AND Disco.NumArtiste <> 105 
AND Abs(Datediff('n', Prog.Diff, #06:00:00#)) < Disco.EcartArtiste) 
AND Disco.NumGenre NOT IN 
(SELECT Disco.NumGenre FROM Prog, Disco, Genres 
WHERE Disco.NumGenre = Genres.IDG AND Disco.Num = Prog.ID 
AND Abs(Dateadd('n', Prog.Diff, #06:00:00#< Genres.Separation) 
AND Disco.Num NOT IN (SELECT ID FROM Prog 
WHERE Format(Prog.Diff, 'dd/mm/yyyy')= #24/06/2007# 
AND Abs(Datediff('n', Format(Prog.Diff, 'hh:nn:ss'), #06:00:00#)) < 180) 
ORDER BY DerDiff ;
Pour traduire en français, je sélectionne à chaque fois dans la discothèque, un morceau :
- de telle ou telle catégorie (ici '3')
- qui n'a pas été diffusé à moins d'un certain écart (en minutes) de l'heure dite (ici '06:00:00')
- dont le Genre est séparé d'un certain écart des morceaux du même genre
- qui n'a pas été diffusé la veille (ici 24/06/2007) à moins d'un certain écart (180) de la même heure
- ordonné par la dernière diffusion en date