SQL 2008r2 ODBC проблема

У меня есть SQL-сервер MS 2008R2, работающий на сервере Windows 2008R2, оба виртуальных сервера под Hyper V. Есть 5 основных баз данных, которые все связаны с программой ERP.

Все мои пользователи запускают Terminal Server (TS) Windows 2008R2 снова виртуально, у нас есть настроенные соединения ODBC на TS (в системном DSN), чтобы позволить пользователям импортировать данные из базы данных SQL в MS Excel 2010.

В связи со спросом на сервере TS мы добавляем второй TS, который мы сейчас тестируем, и теперь, если пользователь открывает новую таблицу Excel на новом TS, устанавливает соединение ODBC и импортирует данные, он может сохранить его и снова открыть на Новый ТС без проблем.

Теперь, если пользователь открывает существующую электронную таблицу Excel на новом TS, который был создан на старом TS со ссылками ODBC, электронная таблица не загружается (электронная таблица открывается, но ничего не загружается).

Если пользователь переходит к старому TS и пытается открыть новую электронную таблицу, созданную на новом TS со ссылками ODBC, эта таблица также не откроется.

Мы обнаружили, что если мы удаляем WSID из строки подключения ODBC (это правильный термин?), Вы можете открыть любую связанную с ODBC электронную таблицу на любом TS, но проблема возникает, когда вы сохраняете и закрываете электронную таблицу, потому что WSID повторно добавлен к строке подключения ODBC.

Я считаю, что WSID является необязательным компонентом строки подключения, но не могу найти нигде, чтобы удалить его, это лучший способ решить нашу проблему? Оба набора настроек ODBC идентичны как на старом, так и на новом TS

Извините, если я звучу расплывчато или использовал неправильную терминологию, но это все для меня ново.

1 ответ

Я столкнулся с проблемой создания электронной таблицы Excel, которая ссылается на базу данных SQL, и у пользователя нет надлежащего соединения ODBC или его нет на клиентском компьютере. Поэтому я создал метод, который автоматически создает соединение ODBC в реестре компьютера / сервера при открытии файла Excel.

ПРИМЕЧАНИЕ. Это создаст 32-битное соединение ODBC, необходимое для подключения к базе данных Microsoft Office 2010 и ниже. В более новых версиях Microsoft Office используются 64-разрядные драйверы ODBC, и этот метод не будет работать.

Первым методом, который я создал, было размещение информации о соединении в виде статических данных.

Private Sub Workbook_Open()

    'This VBA script will automaticall create the ODBC connection for Excel
    'when the user opens the Excel file.  If the ODBC already exists, the
    'valuse will simply be over written with the values you specify below
    'without prompting the user.
    '
    'Please note: The connection password is not permited here and not allowed.
    '             you will need to save it in the Workbook connections if you
    '             do not want to prompt the user everytime for the password.

    odbcName = "SQL-ODBC"
    odbcDesc = "Pentagon2000 Database Connection"
    odbcSrvr = "10.33.0.2"
    odbcUser = "Reports"
      odbcDB = "GDB_01_100"

    Dim WshShell As Object
    Set WshShell = CreateObject("WScript.Shell")

   'Write value in the Registry
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\", 1, "REG_DWORD"
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Database", odbcDB
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Description", odbcDesc
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Driver", "C:\Windows\system32\SQLSRV32.dll"
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\LastUser", odbcUser
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Server", odbcSrvr
       WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\" & odbcName, "SQL Server"
End Sub

Позже я изменил этот метод, потому что хотел иметь единственное место, где все мои отчеты Excel могли бы считывать соединения с базой данных, что значительно упрощает управление с точки зрения ИТ. Это читает файл XML и загружает значения для создания ODBC.

Private Sub Workbook_Open()
    'This VBA script will automaticall create the ODBC connection for Excel
    'when the user opens the Excel file.  If the ODBC already exists, the
    'valuse will simply be over written with the values you specify below
    'without prompting the user.
    '
    'Please note: The connection password is not permited here and not allowed.
    '             you will need to save it in the Workbook connections if you
    '             do not want to prompt the user everytime for the password.


        Dim nodeList As IXMLDOMNodeList
        Set oXMLDoc = New MSXML2.DOMDocument

        'Locates the setup directory and loads the Configuration.xml
        'This assumes the Excel report is located in the Reports directory
        oXMLDoc.Load (Left(ThisWorkbook.Path, InStrRev(ThisWorkbook.Path, "\") - 1) + "\Apps\Setup\Configuration.xml")

        Set nodeList = oXMLDoc.SelectNodes("/data")

        odbcName = "BSC_Reports"
        odbcDesc = "Pentagon2000 Database Connection for BSC Custom Reports"
        odbcSrvr = nodeList(0).SelectNodes("server").Item(0).Text
        odbcUser = nodeList(0).SelectNodes("user").Item(0).Text
          odbcDB = nodeList(0).SelectNodes("pentdb").Item(0).Text

        Dim WshShell As Object
        Set WshShell = CreateObject("WScript.Shell")

       'Write value in the Registry
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\", 1, "REG_DWORD"
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Database", odbcDB
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Description", odbcDesc
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Driver", "C:\Windows\system32\SQLSRV32.dll"
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\LastUser", odbcUser
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\" & odbcName & "\Server", odbcSrvr
           WshShell.RegWrite "HKCU\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources\" & odbcName, "SQL Server"
End Sub

Вот файл "Configuration.XML", из которого я прочитал.

<?xml version="1.0" encoding="utf-8" ?>
<data>
  <server>WBenhart-M6600\SQL_2008</server>
  <user>Reports</user>
  <pentdb>GDB_01_100</pentdb>
</data>

Любой метод должен работать на ваших терминальных серверах, и вам не нужно будет создавать ODBC вручную.

Я надеюсь, это поможет вам.

Уэйн Бенхарт

Другие вопросы по тегам