2015-04-10 2 views
1

Я пишу VBScript, который подключается к базе данных Sybase, считывает некоторые данные из таблицы и сохраняет ее в переменных, затем подключается к серверу MS SQL и вставляет данные в таблицы с переменными данными, которые были сохранены ранее.Ошибка VBScript, связанная с Sybase Database - Поставщик не найден

Я нашел пару существующих скриптов, чтобы получить меня. here и here.

Я понимаю их просто отлично. Единственная проблема - сама строка подключения к базе данных. Вот строка подключения, которая в настоящее время используется. (я использовал правильные значения в реальном сценарии, но изменил некоторые здесь в целях безопасности)

Provider=Sybase.ASEOLEDBProvider.2;Driver={SYBSE ASE ODBC Driver};Data Source=MyDataSource;Port=1234;Database=MyDatabase;uid=MyUser;pwd=MyPassword 

Но это вызывает ошибку: Поставщик не может быть найден. Он может быть неправильно установлен.

Вот некоторая информация о системе, что вам может понадобиться, чтобы определить причину проблемы:

  • Сценарий будет работать на 64-битной Windows 7 машины
  • Я успешно подключен к этой базе данных Sybase с использованием MS Access
  • Я установил Sybase ASE ODBC Driver (32-разрядная версия) версия 03.50.0010
  • Я подтвердил, что он установлен и работает, перейдя в C: \ Windows \ SysWOW64 \ odbcad32.exe и расположенные водители там
  • база данных представляет собой систему DSN (не DSN пользователя)
  • Sybase Open Client версии 10.0.4

Проблема, кажется, с Provider= части строки подключения , Здесь стоит отметить, что как только я заберу часть Provider=, я получаю эту ошибку: Указанный DSN содержит несоответствие архитектуры между Драйвером и Приложением. Поэтому это приводит меня к мысли, что здесь 32-битное и 64-битное несоответствие. Я исследовал это, и выясняется, как исправить это - добавить Provider= в строку подключения, чтобы как-то указать, какой из них использовать. Вот список поставщиков, которые я пробовал в строке соединения:

  • Sybase ASE OLE DB Provider
  • Sybase.ASEOLEDBProvider
  • ASEOLEDB
  • ASEOLEDB.1
  • Sybase.ASEOLEDBProvider. 2
  • Sybase
  • Преимущество OLE DB Provider

Все они выдают ту же ошибку. Что мне здесь не хватает?


EDIT: В соответствии с вашими предложениями я сделал некоторые изменения в сценарий и смог протиснуться мимо начальной ошибки, но теперь я получаю совершенно другую ошибку.Вот сценарий, как это теперь

Dim connStr, objConn 

DataSource = "ICCM_PREVIEW" 
ServerIP = "1.2.3.4" 
Port = "1234" 
DBuser = "myUser" 
DBpwd = "myPassword" 
DBName = "myDatabase" 
Driver = "SYBASE ASE ODBC Driver" 

connStr = "" 
connStr = connStr &"Driver="& Driver &";" 
connStr = connStr &"Data Source="& DataSource &";" 
connStr = connStr &"Srvr="& ServerIP &","& Port &";" 
connStr = connStr &"Database="& DBName &";" 
connStr = connStr &"uid="& DBuser &";" 
connStr = connStr &"pwd="& DBpwd &";" 

Wscript.Echo connStr 

'Define object type 
Set objConn = CreateObject("ADODB.Connection") 

'Open Connection 
objConn.open connStr 

Вот сообщение об ошибке я получаю сейчас, но я понятия не имею, как пройти мимо этого один:

Microsoft OLE DB Provider for ODBC Drivers: [SYBASE][ODBC Sybase driver][Sybase]ct_connect(): user api layer: internal Client Library error: HAFAILOVER:Trying to connect to server 
+1

Когда вы подключились к базе данных Sybase из Access, какой драйвер вы использовали? Кроме того, похоже, что вы используете драйвер ODBC и указываете поставщика OLE DB. Вы пытались получить драйвер OLE DB? – TDavis

ответ

2

вы установили 32-разрядный драйвер ODBC для sybase, но вы намерены запустить его на 64-битной машине. Вам также необходимо установить 64-битный драйвер, или вам нужно запустить vbscript в 32-битном режиме.

Вы можете прочитать, как запустить VBScript в 32-битном режиме здесь: How do I run a VBScript in 32-bit mode on a 64-bit machine?

Редактирование добавить: Если попробовать запустить VBScript в 32-битном режиме, убедитесь, что оставить, что provider= откусил из строки подключения ,

Также добавление: относится к этому provider= бит. Вы используете драйвер ODBC, но поставщик, которого вы пытаетесь добавить в строку подключения, является поставщиком OLEDB. Я уверен, что вы не можете смешивать и сопоставлять между OLEDB и ODBC в той же строке соединения, что и разные технологии. Еще одно предложение - установить 64-битный OLEDB-драйвер для sybase и использовать строку соединения OLEDB с использованием этого драйвера.

В конце концов, существует несколько вариантов, но важно согласовать архитектуры между вашим драйвером и вашим клиентом. Также важно сопоставить программное обеспечение драйвера с клиентом (ODBC/OLEDB).

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