Системный DSN против пользовательского DSN

14326
waldrumpus

Каждый новый компьютер в моей компании проходит один и тот же процесс установки программного обеспечения; одной программе, в частности, необходим доступ к базе данных MS SQL Server через ODBC. Затем программа используется несколькими пользователями домена на одном компьютере в разное время.

На компьютерах с Windows XP я просто устанавливаю соединение ODBC как системный DSN . Независимо от того, какой пользователь вошел в систему, соединение будет работать для него, и моя работа была выполнена.

В последнее время мы получаем все больше и больше компьютеров с Windows 7, и этот метод, похоже, больше не работает. Программа не распознает соединения, которые я установил в System DSN, но распознает соединения в User DSN . Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда пользователь впервые входит в систему на компьютере, мне звонят, и мне нужно установить его или ее собственный DSN.

По какой причине это работает на XP, а не на 7? Я делал это неправильно с самого начала?

Обновление: возможно, причина не в Windows 7, а в том, что новые компьютеры работают под управлением 64-разрядной ОС. Я говорю это потому, что когда я запустил тестовое приложение ( исходный код здесь ) в 64-битной Windows 7, доступ к пользовательскому DSN работал нормально, но доступ к системному DSN выдал следующее сообщение об ошибке:

IM014: указанный DSN содержит несоответствие архитектуры между драйвером и приложением

Документация Microsoft указывает, что это происходит при обращении к 32-разрядному драйверу на 64-разрядном компьютере или наоборот. Это вполне может быть проблемой, потому что когда я переключил тестовое приложение на 64-битное, можно было получить доступ к System DSN.

Теперь возникает вопрос: почему это происходит для System DSN, а не для User DSN - для них установлены разные драйверы? Это означало бы, что я больше не смогу использовать System DSN, потому что не имею никакого влияния на программное обеспечение, которое нам нужно использовать.

7

2 ответа на вопрос

7
harrymc

В статье Microsoft об управлении источниками данных говорится следующее:

Для управления источником данных, который подключается к 32-разрядному драйверу на 64-разрядной платформе, используйте c:\windows\sysWOW64\odbcad32.exe. Для управления источником данных, который подключается к 64-разрядному драйверу, используйте c:\windows\system32\odbcad32.exe. В инструментах администрирования в 64-разрядной операционной системе Windows 8 имеются значки для диалогового окна «Администратор источника данных ODBC для 32-разрядных и 64-разрядных систем».

Если вы используете 64-разрядный файл odbcad32.exe для настройки или удаления DSN, который подключается к 32-разрядному драйверу, например, «Драйвер к Microsoft Access» (* .mdb), вы получите следующее сообщение об ошибке:

Указанный DSN содержит несоответствие архитектуры между драйвером и приложением

Чтобы устранить эту ошибку, используйте 32-разрядный файл odbcad32.exe для настройки или удаления уведомления о доставке.

Ваше приложение очевидно 32-битное. Вы использовали правильный файл odbcad32.exe для определения DSN?

Нет, не имею; Я понятия не имел, было две версии. Я сдулся - это работает. Спасибо! waldrumpus 11 лет назад 0
Извините, я не раздавал награду раньше; Я думал, что это произойдет автоматически с пометкой вашего сообщения в качестве принятого ответа. waldrumpus 11 лет назад 0
Я не думаю, что это необходимо больше на Windows 7 64 бит. Запуск любой версии вызывает ту же консоль с теми же определенными DSN. Просто используя диалог запуска и введя «odbcad32.exe» и определив DSN, я смог получить доступ к указанному DSN через мои языки сценариев. AndrewPK 11 лет назад 0
@AndrewPK: постер работал под управлением Windows 7 64-bit. harrymc 11 лет назад 0
0
Egal

Права пользователя: убедитесь, что у пользователя есть возможность доступа к System-DNS или User-DNS. Ситуация здесь состояла в том, что Lotus-Notes запускался как сервис под SYSTEM-User. Не было подключения к ODBC. Мы изменили Пользователя для Сервиса, и это решило проблему.