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 :

Modifier propriété <source base> d'une requête par VBA ou SQL?


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Modifier propriété <source base> d'une requête par VBA ou SQL?
    Hello,

    ma query en SQL me donne le code suivant:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT Prm_Importation.Path, Prm_Importation.[Critere importation], Prm_Importation.[Table Destination], Prm_Importation.Confirmation
    FROM Prm_Importation IN 'G:\Documents\BRP - Professionnel\Consolidation_Master_2009.mdb';

    comme ma DB est appelée à changer de place sur le serveur, je voulais savoir si il était possible de rendre ce champ variable ou <modifiable> via un code en VBA?

    à l'aide d'un formulaire, le user de ma DB est supposé entrer le lien sur le serveur et le nom de la DB qui se trouve dans le champ <source base> des propriétés de la query SQL.

    j'ai donc ensuite créé un code VBA qui me donne un string avec le lien+nom de ma DB mais je ne trouve pas la parade ensuite pour changer le IN de ma query en SQL.

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public strPathDB as string 'mes <public> doivent-ils être autre chose que des <as string>?
    Public strFileDB as string
    Public strsSql as string
    
    Sub GeneralImportGlobal() 'Information récupérée sur mon formulaire form_FrmImportGlobal
    strPathDB = Rs![Path] 'Path de la DB en remote
    strFileDB = Rs![File] 'Nom de la DB en remote
    strsSql = strPathDB & strFileDB 'string SQL qui doit remplacer ma clause 'IN' dans ma query en SQL
    End Sub
    
    Sub ModifysSql()
    Docmd. ????
    End Sub

    NB: les Rs! sont déclarés dans une autre variable et fonctionnent.

    je cherche vraiment à changer les propriétés de ma query, c'est à dire le champ <source base> des propriétés. Par le SQL cela me parait plus facile, mais peut-être qu'en VBA on trouve une fonction qui permette de changer les propriétés d'une query.

    merci pour votre aide !

  2. #2
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Bonsoir et bienvenu sur le forum.

    Ta requête est un requête enregistrée?


    En supposant que ta requête s'appelle MyQuery (j'espère que tu as trouvé mieux comme nom )

    Essaies qq chose du genre...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Dim oQry as Querydef
    set oQry = Currentdb.Querydefs("MyQuery")
     
    oQry.SQL = "SELECT Prm_Importation.Path, Prm_Importation.[Critere importation], " & _
    "Prm_Importation.[Table Destination], Prm_Importation.Confirmation " & _
    " FROM Prm_Importation IN '" & strsSql &"'"
     
    oQry.close
    set oQry = nothing
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  3. #3
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Mais pourquoi donc tant de haine !!!


    Non, sérieusement, j'espère que tu as une vraie raison d'avoir autant de variable en public dans ton code

    Sinon, voici un exemple de ce que pourrait donner une fonction qui remplacerait ta chaîne du IN dans une requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Function ModifySQL(NomRequete As String, NewIn As String) As String
    'Objet : Fonction remplaçant le IN 'db' d'une requête par un nouveau
    'Arguments : NomRequete => nom de la requête dont il faut modifier le SQL
    '            NewIn => Texte de remplacement pour la base cible
     
        Dim sTempSQL    As String
        Dim lStart      As Long
        Dim lEnd        As Long
        Dim qRequete    As QueryDef
        'Création de l'objet requête
        Set qRequete = CurrentDb.QueryDefs(NomRequete)
        'Récupération du SQL de la requête
        sTempSQL = qRequete.SQL
        'Récupération des positions dans la chaîne
        lStart = InStr(1, sTempSQL, "IN '", vbTextCompare) + 3
        lEnd = InStr(lStart + 1, sTempSQL, "'", vbTextCompare)
        'Remplacement de la chaine SQL s'il y a un lStart
        If lStart <> 0 Then
            sTempSQL = Left(sTempSQL, lStart) & NewIn & Mid(sTempSQL, lEnd)
            qRequete.SQL = sTempSQL
        End If
        'Renvoyer le nouveau SQL pour contrôle
        ModifySQL = sTempSQL
    End Function

  4. #4
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Salut Maxence
    Citation Envoyé par Maxence HUBICHE Voir le message
    Sinon, voici un exemple de ce que pourrait donner une fonction qui remplacerait ta chaîne du IN dans une requête
    ...
    Oui bon d'accord... moi j'ai proposé plutôt la version bricolage qui a l'avantage d'être simple à comprendre mais qui a plusieurs limites: pas réutilisable pour une autre requête, la requête ne peut plus être modifiée, sauf à revoir également le code...
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  5. #5
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Bâh... on a posté en même temps mon ami !
    Tu dois avoir quelques secondes d'avance sur moi seulement
    Donc, le "pourquoi tant de haine" concernait la pleïade de variables publiques du code du premier poste

  6. #6
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Citation Envoyé par Maxence HUBICHE Voir le message
    Bâh... on a posté en même temps mon ami !
    Tu dois avoir quelques secondes d'avance sur moi seulement
    Donc, le "pourquoi tant de haine" concernait la pleïade de variables publiques du code du premier poste
    J'avais compris mais je donnais un repère à 1010titi pour l'aider à choisir entre les deux approches .
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    merci pour tous ces conseils, je vais tester cela et vous redit si le pb est réglé.
    dans tous les cas, ouhaw, c'est impressionant comme la plupart des gens du forum sont en mesure de pondre un code en quelques minutes!!

    sinon, n'étant pas un expert avertit du VBA, j'utilise les publics car je répéte souvent mes strings dans mes modules, cela me permet d'éviter d'avoir à les retaper souvent dans mes codes VBA,y'a t'il une autre définition permettant d'éviter les dim, mais avec les mêmes avantages que public?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    salut Mout1234,

    encore merci pour tes conseils et pour le code VBA
    je l'ai transcrit dans ma DB, toutefois, j'ai dû le modifier un peu, car Access me renvoyait l'erreur suivante:
    Erreur de compilation: Argument non facultatif

    alors, je l'ai fait ainsi car il passait par plusieur sub avant:

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Function ModifySQL()
    'Objet : Fonction remplaçant le IN 'db' d'une requête par un nouveau
    'Arguments : NomRequete => nom de la requête dont il faut modifier le SQL
    '            NewIN => Texte de remplacement pour la base cible
     
            Dim NomRequete  As String
            Dim NewIN       As String
            Dim sTempSQL    As String
            Dim lStart      As Long
            Dim lEnd        As Long
            Dim qRequete    As QueryDef
     
        NewIN = StrPathsSql & StrFilesSql
        NomRequete = StrQueryName
     
        'Création de l'objet requête
        Set qRequete = CurrentDb.QueryDefs(NomRequete)
     
        'Récupération du SQL de la requête
        sTempSQL = qRequete.SQL
     
        'Récupération des positions dans la chaîne
        lStart = InStr(1, sTempSQL, "IN '", vbTextCompare) + 3
        lEnd = InStr(lStart + 1, sTempSQL, "'", vbTextCompare)
     
        'Remplacement de la chaine SQL s'il y a un lStart
        If lStart <> 0 Then
     
            sTempSQL = Left(sTempSQL, lStart) & NewIN & Mid(sTempSQL, lEnd)
            qRequete.SQL = sTempSQL
     
        End If
     
        'Renvoyer le nouveau SQL pour contrôle
     
        ModifySQL = sTempSQL
     
    End Function

    et tout fonctionne !
    merci infiniment.

  9. #9
    Membre expert
    Avatar de mout1234
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 210
    Points : 3 228
    Points
    3 228
    Par défaut
    Salut,

    Heu ... remercie surtout Maxence, vu que tu as opté pour sa solution
    ............................................................................................

    Dans l'intérêt de tous, ne posez pas de questions techniques par messages privés.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    ouhap, mistake de ma part
    merci Maxence pour ton aide et ton code.

    dans tous les cas, merci à vous deux d'avoir pris le temps de me répondre et de m'avoir enlevé cette épine du pied

    ma DB fonctionne à merveille et je peux ainsi récupérer des infos de différents endroits sans avoir à retoucher l'origine des requêtes et de mes tables.

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

Discussions similaires

  1. Réponses: 20
    Dernier message: 17/12/2015, 11h54
  2. [AC-2010] Modifier un paramètre de type "text" d'une requête par VBA
    Par metalleuse dans le forum VBA Access
    Réponses: 8
    Dernier message: 22/06/2015, 09h47
  3. Pilotage d'une requête par VBA
    Par arnaud03 dans le forum VBA Access
    Réponses: 9
    Dernier message: 17/06/2014, 00h28
  4. Réponses: 3
    Dernier message: 23/11/2006, 00h29
  5. Modifier une requête par des données différente
    Par leloup84 dans le forum Requêtes
    Réponses: 9
    Dernier message: 06/03/2006, 14h23

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