web-dev-qa-db-fra.com

Comment ajouter des paramètres à une requête de données externe dans Excel qui ne peuvent pas être affichés graphiquement?

J'utilise souvent Get External Data pour créer des rapports simples - exécuter des requêtes sur des bases de données et s’afficher parfaitement dans Excel. Les fonctionnalités exceptionnelles d'Excel telles que le filtrage et les tableaux croisés dynamiques, ainsi que l'interface familière pour les utilisateurs, le rendent très utile pour cela. Cependant, Microsoft Query présente une limite: vous ne pouvez pas ajouter de paramètres aux requêtes qui ne peuvent pas être affichées graphiquement, ce qui limite considérablement le SQL que vous pouvez écrire.

Existe-t-il une solution à l'erreur "les paramètres ne sont pas autorisés dans les requêtes qui ne peuvent pas être affichées graphiquement"?

36
Rory

Si vous avez Excel 2007, vous pouvez écrire en VBA pour modifier les connexions (c’est-à-dire les requêtes de données externes) dans un classeur et mettre à jour la propriété CommandText. Si vous ajoutez simplement ? où vous voulez un paramètre, la prochaine fois que vous actualiserez les données, il vous demandera les valeurs pour les connexions! la magie. Lorsque vous examinez les propriétés de la connexion, le bouton Paramètres sera désormais actif et utilisable normalement.

Par exemple. J'écrivais une macro, la parcourais dans le débogueur et lui faisais définir le CommandText de manière appropriée. Une fois que vous avez terminé, vous pouvez supprimer la macro. Il s'agit simplement d'un moyen de mettre à jour la requête.

Sub UpdateQuery
    Dim cn As WorkbookConnection
    Dim odbcCn As ODBCConnection, oledbCn As OLEDBConnection
    For Each cn In ThisWorkbook.Connections
        If cn.Type = xlConnectionTypeODBC Then
            Set odbcCn = cn.ODBCConnection

            ' If you do have multiple connections you would want to modify  
            ' the line below each time you run through the loop.
            odbcCn.CommandText = "select blah from someTable where blah like ?"

        ElseIf cn.Type = xlConnectionTypeOLEDB Then
            Set oledbCn = cn.OLEDBConnection
            oledbCn.CommandText = "select blah from someTable where blah like ?" 
        End If
    Next
End Sub
5
Rory

L'interface d'Excel pour les requêtes SQL Server ne vous laissera pas de paramètres personnalisés. Une solution consiste à créer une requête générique Microsoft Query, à ajouter des paramètres, puis à coller votre requête paramétrée dans les propriétés de la connexion. Voici les étapes détaillées pour Excel 2010:

  1. Ouvrez Excel
  2. Aller à Données onglet
  3. À partir du bouton à partir d'autres sources, choisissez à partir de Microsoft Query
  4. La fenêtre "Choisir la source de données" apparaîtra. Choisissez une source de données et cliquez (~ ~ ~] ok [~ # ~].
  5. La requête Qizard
    1. Choisissez la colonne: la fenêtre apparaîtra. L'objectif est de créer une requête générique. Je recommande de choisir une colonne dans une petite table.
    2. Filtrer les données: Il suffit de cliquer Next
    3. Ordre de tri: Il suffit de cliquer Next
    4. Terminer: Cliquez simplement Terminer.
  6. La fenêtre "Importer des données" apparaîtra:
    1. Cliquez sur le bouton Propriétés ....
      1. Choisissez l'onglet Définition
      2. Dans la section "Texte de la commande:" ajoutez une clause WHERE incluant les paramètres Excel. Il est important d'ajouter tous les paramètres que vous souhaitez maintenant. Par exemple, si je veux deux paramètres, je pourrais ajouter ceci:
        WHERE 1 =? Et 2 =?
      3. Cliquez sur OK pour revenir à la fenêtre "Importer des données".
    2. Choisissez Rapport de tableau croisé dynamique
    3. Cliquez OK
  7. Vous serez invité à entrer la valeur du paramètre pour chaque paramètre.
  8. Une fois que vous avez entré les paramètres, vous serez à votre tableau croisé dynamique
  9. Accédez à l'onglet Données et cliquez sur les connexions Propriétés bouton
    1. Cliquez sur l'onglet Définition
    2. Dans la section "Texte de la commande:", Collez dans la requête SQL réelle que vous voulez avec le même nombre de paramètres que vous avez défini précédemment.
    3. Cliquez sur le bouton Paramètres ...
      1. entrez les valeurs d'invite pour chaque paramètre
      2. Cliquez OK
    4. Cliquez OK pour fermer la fenêtre des propriétés.
  10. Félicitations, vous avez maintenant des paramètres.
50
behonji

Solution de contournement facile (aucun VBA requis)

  1. Clic droit sur la table, développez le menu "Table", sélectionnez "Propriétés de données externes"
  2. Cliquez sur le bouton "Propriétés de la connexion" (indiqué dans l'info-bulle uniquement)
  3. Aller à l'onglet "Définition"

À partir de là, modifiez directement le code SQL en ajoutant "?" partout où vous voulez un paramètre. Fonctionne de la même manière qu'avant, sauf que vous n'êtes pas harcelé.

24
Aaron DeMille