2010-04-14 7 views
4

Quelle est la meilleure façon d'écrire du code VBA pour se connecter à SQL Server 2005 à partir d'Excel?VBA Excel To SqlServer

Les utilisateurs du fichier Excel peuvent exécuter XP, Vista, Win7 et je veux empêcher l'installation du pilote autant que possible. Je comprends que XP utilise MDAC alors que Vista/Win7 utilise DAC. Cela signifie-t-il qu'une référence à MDAC 2.8 ne fonctionnera pas sur une machine Vista et inversement?

Est-ce que mon code VBA fonctionnera sur les deux si je n'ajoute pas de référence et utilise une liaison tardive, par ex. CreateObject ("ADODB.Connection")?

+0

Si vous faites référence à « ms objets de données activex 2.8 » alors MDAC 2.8 doit avoir été déployé sur cette machine xp. Sur Vista, le MDAC 6 rétrocompatible est livré préinstallé, donc ça devrait aller (il ne permettra même pas l'installation de 2.8). Comme vous le dites, la liaison tardive avec CreateObject ("ADODB.Connection") sera agnostique. –

Répondre

3

Je l'ai fait en utilisant MS ADO 2.0 (la plus ancienne version trouvée sur mon poste de travail, ajouté comme référence). Il travaille sur tous les PC que je l'ai essayé, il suffit d'activer les macros (qui n'a pas de bonnes nouvelles du tout)

Dim dbConnection As ADODB.Connection 
Dim connStr As String 

'Recordset variables 
Dim rsData As ADODB.Recordset 
Dim sql As String 
connStr = "Provider=SQLOLEDB;" & _ 
      "Data Source=MyServer\MyInstance;" & _ 
      "Initial Catalog=MyDatabase;" & _ 
      "Integrated Security=SSPI;" & _ 
      "Application Name=MyExcelFile" 

Set dbConnection = New ADODB.Connection 
dbConnection.ConnectionString = connStr 
dbConnection.Open 

Set rsData = New ADODB.Recordset 
rsData.Open "SELECT field FROM table", dbConnection 
Dim field as String 
Do While Not rsData.EOF 
    'this is where each row will be processed 
    field = rsData.Fields(0).Value 
    'do what's needed with field 
    rsData.MoveNext 
Loop