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 :

VBA > Parametrer une requete > table


Sujet :

Requêtes et SQL.

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Par défaut VBA > Parametrer une requete > table
    Bonjour,

    J'utilise plusieurs requetes parametrees, et toutes sont pareilles... a part qu'elles vont piocher dans differentes tables. Je pensais donc faire une requete qui englobe toutes les autres avec un FROM [table] et mettre .Parameters("table")="table_voulue" pour ne pas avoir a creer plein de requetes semblables... mais il n'a pas l'air de vouloir mettre un parametre dans le FROM! Est-ce que c'est normal ou c'est moi qui ai fais une erreur? Est-ce qu'on ne peut pas contourner le probleme?

    Exemple de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Set qdf = CurrentDb.QueryDefs!Q_Scrap_Month_Weld
          With qdf
                  .Parameters("month") = monthwanted
                  .Parameters("year") = YearWantedMonth.Value
          End With
     
          Set rst = qdf.OpenRecordset()
    Et ce bout de code appelle Q_Scrap_Month_Weld:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Q_Scrap_Weld.WeekStartingDate, Q_Scrap_Weld.Key_ManufactureOrder_Weld, ScrapA1, ScrapA2, ScrapA3, 
    FROM Q_Scrap_Weld 
    WHERE (((Format([Q_Scrap_Weld.WeekStartingDate],"mm"))=[month]) AND ((Format([Q_Scrap_Weld.WeekStartingDate],"yyyy"))=[year])) OR (((Format([Q_Scrap_Weld.WeekStartingDate],"yyyy"))=[year]) AND ((Format(DateAdd("d",6,[Q_Scrap_Weld.WeekStartingDate]),"mm"))=[month]));
    Mais apres je fais la meme chose avec Q_Scrap_Month_Molding, Q_Scrap_HotStamping... et il y a juste le champ from qui change par rapport a Q_Scrap_Mont_HotStamping

  2. #2
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Les paramètres doivent représenter des valeurs et non des tables. Désolé

  3. #3
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Par contre, ce que tu peux faire c'est quelque chose comme ça :

    Dans la requête :

    SELECT ... FROM [Param_latable]
    Puis dans ton code :

    Set qdf = CurrentDb.QueryDefs!Q_Scrap_Month_Weld
    With qdf
    .SQL=Replace(.SQL,"[Param_table]","TableClient")
    .Parameters("month") = monthwanted
    .Parameters("year") = YearWantedMonth.Value
    End With

    Set rst = qdf.OpenRecordset()

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour,

    La même idée, un peu plus complète
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL = "SELECT TBLX.WeekStartingDate, TBLX.Key_ManufactureOrder_Weld, …
    FROM TBLX 
    WHERE (((Format([TBLX.WeekStartingDate],"mm"))=[month]) AND …;
    qdf.SQL = Replace(SQL,"TBLX","Q_Scrap_Month_Weld")
    ...
    Bon courage,

    pgz

  5. #5
    Membre expérimenté
    Inscrit en
    Juin 2006
    Messages
    273
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 273
    Par défaut
    Merci! J'ai pris la solution de Tofalu puisque ma requete est trop longue pour etre mise dans le code VBA et ca marche... mais comme il change le sql de la requete, apres avoir execute une fois la requete il a remplace QueryTable par Q_ManufactureOrder_HotStamping (et donc je ne peux pas l'utiliser une autre fois). J'ai donc essaye de rechanger le SQL une fois que j'ai referme mon recordset:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    qdf.sql = Replace(sql, "Q_ManufactureOrder_HotStamping", "querytable")
    Sauf que la ca m'a remplace la longue requete par un INSERT INTO que j'utilisais dans mon code je ne sais pas du tout ce que ca vient faire la!!
    Bon j'ai ajoute finalement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set qdf = CurrentDb.QueryDefs!Q_Chart_Month_Percent
          With qdf
                  .sql = Replace(.sql, "Q_ManufactureOrder_HotStamping", "Querytable")
          End With
    Et maintenant ca marche mais pouvez-vous m'expliquer pourquoi il a change Q_Chart_Month_Percent en mettant n'importe quoi dedans la 1ere fois?

    Et puis une derniere question: j'ai peur que par exemple s'il y a une erreur dans l'execution du code un jour (a cause de mauvaises donnees par exemple) ca s'arrete en plein milieu et ca ne remette donc pas dans la requete "QueryTAble" donc la requete sera inutilisable... comment eviter ca?

    Edit: je viens de decouvrir l'utilite de la gestion d'erreur je rajoute juste le code dans Err_nom_Click: et c'est bon?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] VBA Probleme avec une requete parametré
    Par volsan dans le forum VBA Access
    Réponses: 3
    Dernier message: 11/10/2014, 06h17
  2. Réponses: 7
    Dernier message: 21/09/2006, 14h06
  3. convertir une requete en table
    Par aarlock dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/07/2006, 11h34
  4. [VBA] [ACCESS] Accès à une requete Access via VBA
    Par Yanmeunier dans le forum Access
    Réponses: 3
    Dernier message: 16/03/2006, 11h48
  5. Comment formuler une requête alter table ?
    Par cjo dans le forum Paradox
    Réponses: 2
    Dernier message: 29/12/2005, 03h11

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