cs_jyvaut75
Messages postés9Date d'inscriptionmardi 26 juin 2007StatutMembreDernière intervention15 février 2008
-
15 févr. 2008 à 17:26
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDerniè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.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 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)
cs_jyvaut75
Messages postés9Date d'inscriptionmardi 26 juin 2007StatutMembreDernière intervention15 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.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 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.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 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