Access requête en mémoire

cs_jyvaut75 Messages postés 9 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 15 février 2008 - 15 févr. 2008 à 17:26
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 17 févr. 2008 à 12:39
Bonjour,

Pour Access 2003.

Afin d'obtenir les informations recherchées, j'ai été obligé de créer une requete formée de sous-requêtes.
Mon recordset final après paramètrage ressemble à ceci:
set rst=db.openrecordset("SELECT DISTINCTROW Qry_SalarieActiviteSSRequete.codenom, Qry_SalarieServiceCreneauSSRequete.service, Qry_T.Code, Qry_T.CEvenement, Qry_T.LibelleEvenement, Qry_SalarieActiviteSSRequete.Titre, Qry_SalarieActiviteSSRequete.Nom, Qry_SalarieActiviteSSRequete.CodeH, [2008_Ref].NoQuinzaine, [2008_Ref].quinzaine, [2008_Ref].Semaine, [2008_Ref].cycle, Qry_SalarieActiviteSSRequete.DDeb, Qry_SalarieActiviteSSRequete.DFin, [2008].jour
FROM Qry_SalarieServiceCreneauSSRequete INNER JOIN (Qry_SalarieActiviteSSRequete INNER JOIN (Qry_T INNER JOIN (2008 INNER JOIN 2008_Ref ON [2008].jour = [2008_Ref].jour) ON Qry_T.Code = [2008].event) ON Qry_SalarieActiviteSSRequete.codenom = [2008].codenom) ON Qry_SalarieServiceCreneauSSRequete.N° = Qry_SalarieActiviteSSRequete.codenom
WHERE ((([2008].jour)>=#1/21/2008# And ([2008].jour)<=#2/3/2008# And ([2008].jour) Between [Qry_SalarieActiviteSSRequete].[ddeb] And [Qry_SalarieActiviteSSRequete].[dfin] And ([2008].jour) Between [Qry_SalarieServiceCreneauSSRequete].[Ddebut] And [Qry_SalarieServiceCreneauSSRequete].[dfin]))
ORDER BY Qry_SalarieActiviteSSRequete.Nom, [2008].jour;"

Les sous-requêtes doivent elle-même être paramétrées. Et si je ne passe pas par des sous-requêtes, ma ligne SQL est trop longue.

Jusqu'à présent, j'utilise donc pour chacune un querydef après avoir supprimé la requête pour la recréer avec les bonnes valeurs sur le disque dur. Opération longue comme vous vous en doutez.

J'ai lu dans le Platinium Access 97, la possibilité pour Access de faire des Querydef temporaires (donc uniquement en mémoire). D'après l'exemple, celui-ci n'ont pas de nom. Ce qui ne m'arrange pas. Car j'en voudrais plusieurs.

Bref, l'amateur aimerait l'avis d'un pro.

Merci d'avance pour l'aide.

JYV

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 févr. 2008 à 19:21
Salut
Pas le courage de reprendre ta requète pour lui donner un aspect lisible, avec les _ en fin de ligne, exemple :
   set rst = db.openrecordset("SELECT DISTINCTROW " & _
                                      Qry_SalarieActiviteSSRequete.codenom, " & _
                                      Qry_SalarieServiceCreneauSSRequete.service, " & _
                                      ...
Pourquoi le nom de certains champs ou tables ne sont-ils pas toutes entre crochets ?
Attention aux noms comportant des symboles qui pourraient être identifiés différemment par le moteur, comme le _ ou les caractères accentués ou spéciaux comme le ° de n°

Par contre, l'utilisation abusive des simples parenthèses ( et ) peut nuire à la clarté.
Exemple : ([2008].jour) n'a pas besoin de parenthèses

Bizarre la syntaxe juste après la clause WHERE :
   ((([2008].jour)>=#1/21/2008# And ([2008].jour)<=#2/3/2008#
alors que là aussi, tu devrais utiliser un Between

Pour insérer un paramètre, il suffit de sortir du monde SQL en fermant les " puis concaténer (symbole &) la variable VB, puis réouvrir la syntaxe SQL avec un ", etc
   DateDebut = "1/21/2008"
   DateFin = "2/3/2008"
   "... [2008].jour >= #" & DateDebut & "# And [2008].jour <= #" & DateFin & "# ..."

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_jyvaut75 Messages postés 9 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 15 février 2008
15 févr. 2008 à 19:55
Bonjour,

Merci pour la réponse, mais elle ne correspond pas à mon problème. Celui-ci n'est pas la réécriture de la requête, mais s'il est possible de créer des requêtes et des sous-requêtes qui restent en mémoire. Donc sans avoir à les inscrire sur le disque dur.

JYV
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
16 févr. 2008 à 13:56
Salut,
as_tu essayer de créer au moins deux ?
Dim Qdftemp1 As QueryDef, Qdftemp2 As QueryDef
Set Qdftemp1 = xDB.CreateQueryDef("")
Set Qdftemp2 = xDB.CreateQueryDef("")
Qdftemp1.SQL = "...."
Qdftemp2.SQL = "...."
Pointes ensuite deux recordSet un vers chacune d' elles,
et regardes ce que ça donne.


Je ne l' ai jamais fait car je n' ai jamais eu recours à cette méthode.





<hr />

... Il y' en a même qui m' ont vu voler.
<hr />
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
17 févr. 2008 à 12:39
salut,

umm... pas spécialement pour céder à la facilité (quoi que), et je ne sais pas si c'est faisable en VBA access (mais y'a pas de raison, access en accès par VB6 l'accepte), mais pourquoi ne pas simplement enregistrer différentes requêtes dans access (je parle bien de les sauver) et de faire une requête (par code) sur tes différentes requêtes ou Procédures Stockées enregistrées avec jointure etc?

çà peut être un peu plus long d'exécution mais çà aura le mérite de fonctionner (normalement ^^) et d'être plus facilement lisible
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Rejoignez-nous