2014-09-29 60 views
0

我想用Ruby on Rails訪問我們的AS400數據庫,使用「dbi」gem和「dbd-odbc」gem。帶有Ruby on Rails的AS400

我發現這個代碼來建立。當我通過服務器地址... 看來,原始代碼使用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。如果dbi和did-odbc寶石有驅動程序,我是否認爲DSN是不需要的? – Beengie 2014-10-06 15:05:49

+0

DSN基本上只是應用名稱的連接字符串中的所有東西。你將不得不確保服務器安裝了驅動程序。 – clutton 2014-10-06 15:11:03

+0

是否改變了連接字符串的工作? – clutton 2014-10-08 15:33:31

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')