Access requête en mémoire

Signaler
Messages postés
9
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
15 février 2008
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
9
Date d'inscription
mardi 26 juin 2007
Statut
Membre
Dernière intervention
15 février 2008

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
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
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 />
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
36
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