2015-09-03 4 views
1

Я написал «VBA», который лаборатория использовала в течение 2 лет, в основном использовала базу данных доступа в качестве запроса. В последнее время используется база данных SQL и для использования в запросе создается ODBC. Проблема заключается в том, что запрос не может быть просмотрен excel, за исключением моего компьютера. У меня есть SQL Management Studio 2008 на моем, но я не могу заставить запрос работать на других компьютерах. Я пробовал разные драйверы, но не могу решить эту проблему.SQL-запрос не работает должным образом в excel 2010

+0

Пожалуйста, добавьте примеры кода и сообщения об ошибках или более подробное описание непредвиденного поведения. –

+0

Я не в офисе и вывешу точную ошибку завтра, но в принципе не могу найти драйвер odbc. Я попытался использовать распространяемый драйвер доступа ms и sqlmanagement.msc в папке system32, но это не помогает. Спасибо :). – Chris

+0

Итак, вы обращались к Access из Excel, и теперь вы переходите от Excel к SQL Server? Похоже, это может быть проблема с разрешением. –

ответ

2

Это не «драйвер ODBC», который не может быть найден; это созданный вами файл DSN (с учетными данными), который является локальным для вашего компьютера. Вам нужно записать все в строку соединения, которая будет переноситься в модуле VBA.

Sub sql_connect() 
    Dim svr As String, db As String, usr As String, pwd As String 
    Dim sCNX As String, sSQL As String 
    Dim cnx As Object, rs As Object 


    Set cnx = CreateObject("ADODB.Connection") 
    Set rs = CreateObject("ADODB.Recordset") 

    svr = "THE_SERVER" 
    db = "myDatabase" 
    usr = "me_user" 
    pwd = "me_users_pwd" 
    sCNX = "Provider=SQLNCLI11;Server=" & svr & ";Database=" & db & ";UID=" & usr & ";PWD=" & pwd & ";" 
    'Debug.Print sCNX 'used for syntax checking 
    cnx.Open sCNX 

    sSQL = "SELECT TOP 50 * FROM [myDatabase].dbo.[myTABLE]" 
    rs.Open sSQL, cnx 

    Do While Not rs.EOF 
     Debug.Print rs(0) & " - " & rs(1) 
     rs.movenext 
    Loop 

    rs.Close: Set rs = Nothing 
    cnx.Close: Set cnx = Nothing 

End Sub 

Есть способы скрыть учетные данные, которые вы предоставляете; запуск вашего проекта VBA с помощью пароля будет началом. Создание пользователя MSSQL с ограниченным доступом только для чтения также является хорошим шагом.

Я не уверен, является ли это очевидным, но это пользователь и пароль как учетные данные пользователя SQL, а не пользователь домена с использованием надежного соединения.

+0

Спасибо всем за помощь и за то, что вы познакомили меня с подключением DSN-less, отлично работает :). – Chris

Смежные вопросы