IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

requete sql trop longue enregistrement en mémoire ou sur disque


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut requete sql trop longue enregistrement en mémoire ou sur disque
    Bonjour,

    Programmeur amateur, j'ai une application Access 2003 dans laquelle j'ai à paramétrer une requete. Il s'avère que lors du paramètrage (remplacement par des variables), la requête devient trop longue.

    Je peux découper cette requête en deux. Le "mariage" des requêtes après paramètrage provoque encore une ligne trop longue.

    Une des "sous-requêtes" n'est pas paramétrable (donc la sauvegarde sur disque est possible). Pour l'autre, je peux paramétrer une ligne de SQL sous forme de string (acceptée en terme de longueur par Access) à l'intérieur d'un formulaire.

    Là où je bloque, c'est que je ne sais pas sauvegarder cette string sous forme de requête sur disque ou en mémoire, de manière à l'intégrer dans une 3ème requête qui sortirait le résultat.

    Si quelqu'un avait une idée...

    Merci d'avance,

    JYV

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Ce serait bien d'avoir la requête, sinon pour t'aider ce ne sera pas possible.

    Et comment tu l'utilises (tu l'éxécutes).

    Starec

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut Mes requêtes
    Donc ci-dessus la 1ère requête paramétrable

    strReq1 = "SELECT [" & strAnnee & "].codenom, [" & strAnnee & "].event, Tbl_salarié.Titre, Tbl_salarié.Nom, Tbl_salarié.CodeH, [" & strAnneeTrait & "].NoQuinzaine, [" & strAnneeTrait & "].quinzaine, [" & strAnneeTrait & "].NoSemaine, [" & strAnneeTrait & "].Semaine, [" & strAnneeTrait & "].cycle, Tbl_services.service, Tbl_SalarieService.CodeService, [" & strAnnee & "].jour, Tbl_SalarieService.Ddebut, Tbl_SalarieService.Dfin " & _
    "FROM Tbl_services INNER JOIN (((" & strAnnee & " INNER JOIN Tbl_salarié ON [" & strAnnee & "].codenom = Tbl_salarié.N°) INNER JOIN " & strAnneeTrait & " ON [" & strAnnee & "].jour = [" & strAnneeTrait & "].jour) INNER JOIN Tbl_SalarieService ON Tbl_salarié.N° = Tbl_SalarieService.CodeSalarie) ON Tbl_services.N° = Tbl_SalarieService.CodeService " & _
    "WHERE (((Tbl_SalarieService.CodeService) = " & intService & ") And (([" & strAnnee & "].jour) >= " & strDateAccess(CDate(Me![Texte0])) & " And ([" & strAnnee & "].jour) <= " & strDateAccess(CDate(Me![Texte24])) & " And ([" & strAnnee & "].jour) >= [Tbl_SalarieService].[Ddebut] And ([" & strAnnee & "].jour) <= [Tbl_SalarieService].[DFin])) Or " & _
    "(((Tbl_SalarieService.CodeService) = " & intService & ") And (([" & strAnnee & "].jour) >= " & strDateAccess(CDate(Me![Texte0])) & " And ([" & strAnnee & "].jour) <= " & strDateAccess(CDate(Me![Texte24])) & " And ([" & strAnnee & "].jour) >= [Tbl_SalarieService].[Ddebut] And ([" & strAnnee & "].jour) <= [Tbl_SalarieService].[DFin])) Or " & _
    "(((Tbl_SalarieService.CodeService) = " & intService & ") And (([" & strAnnee & "].jour) >= " & strDateAccess(CDate(Me![Texte0])) & " And ([" & strAnnee & "].jour) <= " & strDateAccess(CDate(Me![Texte24])) & " And ([" & strAnnee & "].jour) >= [Tbl_SalarieService].[Ddebut]) And ((Tbl_SalarieService.DFin) Is Null)) Or " & _
    "(((Tbl_SalarieService.CodeService) = " & intService & ") And (([" & strAnnee & "].jour) >= " & strDateAccess(CDate(Me![Texte0])) & " And ([" & strAnnee & "].jour) <= " & strDateAccess(CDate(Me![Texte24])) & " And ([" & strAnnee & "].jour) >= [Tbl_SalarieService].[Ddebut]) And ((Tbl_SalarieService.DFin) Is Null)) " & _
    "ORDER BY [" & strAnnee & "].jour, Tbl_salarié.CodeH, Tbl_salarié.Nom;"

    J'ai donc tenté de l'intégrer avec une autre requête (Qry_TEventImprim_AGarder) pour créer un recordset. Comme je le craignais, ça n'a pas marché.

    Set rst = db.OpenRecordset("SELECT DISTINCTROW strReq1.codenom, strReq1.event, strReq1.Titre, strReq1.Nom, strReq1.CodeH, strReq1.NoQuinzaine, strReq1.quinzaine, strReq1.NoSemaine, strReq1.Semaine, strReq1.cycle, strReq1.service, strReq1.CodeService, strReq1.jour, strReq1.Ddebut, strReq1.Dfin, Qry_TEventImprim_AGarder.Code, Qry_TEventImprim_AGarder.CEvenement, Qry_TEventImprim_AGarder.LibelleEvenement " & _
    "FROM Qry_TEventImprim_AGarder RIGHT JOIN strReq1 ON Qry_TEventImprim_AGarder.Code = strReq1.event;")


    A part réduire à la potion congrue mes noms de variables (cela reste possible, mais gare à la lisibilité) ou enregistrer ma 1ère requête paramétrée sur disque pour la traiter dans le recordset, je ne vois pas la solution.

    Merci d'avance,

    JYV

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 650
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 650
    Points : 34 358
    Points
    34 358
    Par défaut
    bonjour, si tu veux stocker une requete dans ta base, tu peux passer par QueryDef. Petit truc sinon, quand tu dis que ca ne marche pas, quelle erreur est "pondue" ? s'il n'y a pas d'erreur mais que le résultat attendu n'est pas le bon, alors le problème n'est pas forcméent lié à la longueur de la requête... Les subtilités dans ta requete du dessus, j'ai du mal à les comprendre, il me semble tu dois pouvoir simplifier un peu plus en utilisant des left ou right join à la place des inner join, à la place de tous les Is null.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    Il n'y a pas d'erreur dans la requête. Elle fonctionne très bien lorsqu'elle n'est pas paramétrée.

    Simplement lorsque je mets les paramètres, elle devient trop longue. Access met l'ensemble de la ligne en rouge et refuse de valider la ligne tant qu'elle n'est pas raccourcie.

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    prefixe tes noms de table

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select [matable qui a un nom trop long].champ1,[matable qui a un nom trop long].champ2,[matable qui a un nom trop long].champ3 from
    [matable qui a un nom trop long];
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a.champ1,a.champ2,a.champ 3 from [matable qui a un nom trop long] as a;

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 27
    Points : 22
    Points
    22
    Par défaut
    OK. Merci pour les réponses.

Discussions similaires

  1. Requete sql trop lourde
    Par sinifer dans le forum Requêtes
    Réponses: 14
    Dernier message: 11/05/2009, 00h21
  2. Réponses: 1
    Dernier message: 17/07/2008, 22h07
  3. [Requête SQL]Trop longue pour une ligne
    Par jbulysse dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/07/2008, 14h27
  4. Comment faire lorsque la requete est trop longue ?
    Par tabtab dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 26/03/2008, 14h55
  5. [VB.net]Requete Insert trop longue?
    Par Hakki dans le forum Accès aux données
    Réponses: 7
    Dernier message: 24/10/2006, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo