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 :

Création de requêtes avec un nom de table variable


Sujet :

Requêtes et SQL.

  1. #1
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut Création de requêtes avec un nom de table variable
    Bonjour,
    Je voudrais savoir si on peut créer des requêtes en utilisant des noms de variable pour désigner les tables.
    J'explique un peu ce que je souhaite faire.
    J'ai tout un tas de fichiers excel (un type de fichiers par année, deux feuilles par fichier, et plusieurs types de fichiers) que je souhaite lier dans une base de données (je crée autant de tables que de types de fichiers et je veux créer des requêtes ajout pour mettre à jour ma table lorsque je le souhaite, je la vide et je remets toutes les données des fichiers). Je sais le faire en créant toutes les requêtes, mais j'aimerais automatiser la création des requêtes, car je dois travailler sur les 5 dernières années et bien évidemment chaque année, de nouveaux fichiers seront liés et je ne souhaite pas devoir créer ou modifier mes macros chaque année.
    Je me suis donc dit que si je pouvais créer les requêtes à l'aide d'un nom de variable, ce serait plus simple pour avoir mes 5 bonnes années sans avoir à retoucher quoi que ce soit.

    Et par la même occasion, peut-on créer les tables liées de la même façon ?

    J'espère que je suis assez claire
    Merci pour votre aide

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Pour ta question sur la création de table liée voir ici : https://www.microsoftaccessexpert.co...LinkTable.aspx

    On ne peut pas utiliser de variable ou une fonction pour désigner une table dans une requête mais on peut changer le SQL de la requête par code.

    Faire cela c'est assez simple et je vais supposer que tes requêtes existent déjà mais on peut aussi créer des requêtes par VBA.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public sub ChangerSQL(prmNomRequete as string, prmNomTable as string)
       dim db as dao.database:set db=currentdb
       dim q as dao.querydef:set q=db.querydefs(prmNomRequete)
       q.sql="Select [" & prmNomTable & "].* from ["& prmNomTable & "]" 'Ici le nouveau SQL
       set q=nothing 'Libère explicitement la mémoire utilisée
       db.close:set db=nothing 'Libère explicitement la ressource et la mémoire utilisée
    end sub
    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    merci marot_r pour ta réponse.

    si j'ai bien compris, je peux créer ma première requête, et ensuite lorsque je veux l'exécuter via ma macro, je le fais à l'aide d'une boucle qui va changer mon sql selon mes besoins ?


    J'ai créé mon code, mais lorsque j'appelle la fonction, j'ai un message d'erreur de syntaxe, "attendu ="

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     For annee = Year(Date) - 4 To Year(Date)
          For i = 1 To 2
            NomTable = "TV" & annee & "0" & i
            ChangerSQL("RATV", NomTable)
            DoCmd.OpenQuery "RATV", acViewNormal, acAdd
          Next i
        Next annee
    et mon code pour changer le sql de la requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub ChangerSQL(prmNomRequete As String, prmNomTable As String)
       Dim db As dao.Database: Set db = CurrentDb
       Dim q As dao.QueryDef: Set q = db.QueryDefs(prmNomRequete)
       q.SQL = "INSERT INTO TV ( [Date], Famille, libelle, lot, uv, dlc, bon, colis, poids, code, Nom, Douchage, sscc )SELECT [" & prmNomTable & "].Date, [" & prmNomTable & "].Famille, [" & prmNomTable & "].libelle, [" & prmNomTable & "].lot, [" & prmNomTable & "].uv, [" & prmNomTable & "].dlc, [" & prmNomTable & "].bon, [" & prmNomTable & "].colis, [" & prmNomTable & "].poids, [" & prmNomTable & "].code, [" & prmNomTable & "].Nom, [" & prmNomTable & "].Douchage, [" & prmNomTable & "].sscc FROM [" & prmNomTable & " ]"
     
      ' q.SQL = "Select [" & prmNomTable & "].* from [" & prmNomTable & "]" 'Ici le nouveau SQL
       Set q = Nothing 'Libère explicitement la mémoire utilisée
       db.Close: Set db = Nothing 'Libère explicitement la ressource et la mémoire utilisée
    End Sub

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    258
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 258
    Points : 87
    Points
    87
    Par défaut
    j'ai résolu le problème, j'avais omis le "call"

    mon autre souci maintenant est pour la création des tables liées, mes données sont dans des classeurs excel, je pense que c'est pour cette raison que la fonctionne ne va pas 'type d argument ByRef incompatible'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a = createAttached(NomTable, Fichier, BaseTable)
    Fichier contenant le chemin complet et le nom de mon fichier excel

    j'ai également trouvé la commande TransferSpreadsheet mais je ne parviens pas à préciser le nom des feuilles que je veux importer

  5. #5
    Expert éminent
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Points : 7 001
    Points
    7 001
    Billets dans le blog
    2
    Par défaut
    l.flipper,

    A mon humble avis le(s) type(s) de données attendu(s) dans ta procédure ne correspondent pas à celles émises.

    jimbolion
    N'oubliez pas le Tag si la réponse donnée vous a été utile et pour une réponse pertinente.
    Retrouvez-moi sur le chat en salon base de données

Discussions similaires

  1. [AC-2003] Requête avec un nom de champ variable
    Par kervin dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/07/2013, 13h09
  2. Requête Select sur nom de tables variables
    Par jujunior dans le forum Oracle
    Réponses: 9
    Dernier message: 13/09/2010, 19h25
  3. [AC-2007] Ouvrir la création de requête avec une table sélectionnée
    Par zoom61 dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/03/2010, 14h30
  4. Création de requêtes avec 2 tables non liées
    Par Jusomi31 dans le forum Access
    Réponses: 15
    Dernier message: 28/08/2008, 16h12
  5. [SQL Server 2000] requête avec le nom de la table dynamique
    Par insane_80 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/12/2006, 17h57

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