2009-10-16 7 views
0

Nous utilisons MS Query pour récupérer des données de diverses bases de données pour créer des métriques de gestion (ex: dans Excel, aller à Données ... Importer des données externes ... Nouvelle requête base de données) . La requête SQL et les paramètres (principalement la chaîne conn) sont automatiquement stockés par Excel dans la feuille de calcul.Serveur déplacé, maintenant les requêtes MS Excel 2003 ne fonctionneront pas

Toutefois, nous avons récemment déplacé une de nos bases de données vers un nouveau serveur. Par conséquent, Excel nous invite pour une nouvelle connexion ODBC lors de la tentative d'actualisation des données, mais il n'acceptera pas les nouvelles valeurs. Nous pouvons créer de nouvelles requêtes correctement, donc la connexion ODBC est configurée correctement, mais nous ne pouvons pas modifier les requêtes.

Existe-t-il un moyen de modifier l'adresse IP par programme ou autrement dans ces paramètres? J'ai essayé de changer le fichier xls dans un éditeur hexadécimal (les adresses IP sont visibles là-bas), mais il dit alors que le classeur est corrompu.

Répondre

3

Si vous devez modifier la chaîne de connexion de vos requêtes, cette macro la modifiera pour toutes les requêtes du classeur actif (vous n'avez pas besoin de stocker le code dans le classeur à modifier).

J'ai inclus deux exemples de chaînes de connexion - l'une fournit le dsn, l'autre fournit le serveur/la base de données. Si votre DSN est correct lors de la création de nouvelles requêtes, essayez d'abord le DSN. Ajustez la version de SQL Server si vous l'utilisez.

De même, l'un a la sécurité standard (uid, pwd) et l'autre utilise la sécurité basée sur Windows (connexion sécurisée). Mélangez et assortissez comme approprié.

Sub ChangeAddress() 

Dim qt As QueryTable 
Dim wks As Worksheet 

Const strNEW_CONN_DSN As String = "ODBC;DSN=MyDSN;Description=MyDescription;UID=myid;PWD=mypwd;" 

Const strNEW_CONN_SQL as String = "Driver={SQL Server Native Client 10.0};Server=myServerAddress;Database=myDB;Trusted_Connection=yes;" 

For Each wks In ActiveWorkbook.Worksheets 
    For Each qt In wks.QueryTables 
     qt.Connection = strNEW_CONN_DSN 
    Next qt 
Next wks 
End Sub 
+0

Cela a fonctionné, merci beaucoup! – Andrew

+0

La question a spécifié Excel 2003, mais pour quiconque utilise Excel 2007, ce code ne fonctionnera pas. En 2007, vous devez modifier ActiveWorkbook.Connections.ODBCConnection.Connection – dendarii

Questions connexes