2014-09-29 6 views
0

Я пытаюсь получить доступ к нашей базе данных AS400 с помощью Ruby on Rails, используя драгоценный камень «dbi» и драгоценный камень «dbd-odbc».AS400 с Ruby on Rails

Я нашел этот код для создания. Когда я передаю адрес сервера ... Кажется, что в исходном коде используется DSN, но я хотел передать в IP, имя базы данных и библиотеку кода, чтобы предотвратить необходимость любого DSN.

require 'dbi' 
dbh = DBI.connect('DBI:ODBC:SYSTEM=<ip_address>;DBQ=<db_name>;DFTPKGLIB=<library_name>;LANGUAGEID=ENU', 'UID=<user_name>', 'PWD=<password>') 
sth = dbh.prepare('select count(*) from my_table') 
sth.execute 

# Print out each row 
while row=sth.fetch do 
    p row 
end 

sth.finish 
dbh.disconnect 

это дает мне ошибку ...

DBI::InterfaceError: Unable to load driver 'ODBC' 

что будет правильный синтаксис?

ответ

0

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

Похоже строки:

dbh = DBI.connect('DBI:ODBC:SYSTEM=<ip_address>;DBQ=<db_name>;DFTPKGLIB=<library_name>;LANGUAGEID=ENU', 'UID=<user_name>', 'PWD=<password>') 

должно быть что-то вроде этого, чтобы указать драйвер ODBC следует использовать для подключения:

dbh = DBI.connect('DBI:ODBC:Driver=iSeries Access ODBC Driver;SYSTEM=<ip_address>;DBQ=<db_name>;DFTPKGLIB=<library_name>;LANGUAGEID=ENU', 'UID=<user_name>', 'PWD=<password>') 
+0

Я был под впечатлением, что с DBI драгоценного камнем и сделали-ODBC драгоценного камня не было никакой необходимости иметь установлен DSN на сервер. Я в настоящее время в разработке, и я не хочу этого делать, поэтому мне придется полагаться на производственный сервер для установки DSN. Правильно ли я полагаю, что DSN не понадобится, если драйверы dbi и did-odbc имеют драйвер? – Beengie

+0

DSN - это, по сути, всего лишь часть строки подключения с именем. Вы должны были убедиться, что на сервере установлен драйвер. – clutton

+0

Изменила ли строка подключения? – clutton

2

Это работает для меня - тоже, просто поставить проверку подлинности часть внутри первого аргумента функции DBI.connect:

Сначала установите драгоценные камни: dbi, dbd-odbc, ruby-odbc. Я получаю ту же ошибку без рубинового ODBC драгоценного камня

Тогда:

require 'odbc' 

require 'dbi' 

dbh = DBI.connect('DBI:ODBC:SYSTEM=MYAS400;DBQ=TABLE_NAME;DFTPKGLIB=SCHEMA_NAME;DRIVER=Client Access ODBC Driver (32-bit);LANGUAGEID=ENU;USERID=SUPERADMIN;PWD=SUPERSECURE')