2

odbcを使用してnode.jsのmonetDBに接続しようとしています。ただし、次のエラーが発生し続けます。

The driver reported the following diagnostics whilst running SQLDriverConnect

IM002:1:0:[unixODBC][Driver Manager]Data source name not found, and no default driver      specified
DEBUG: []

ソースコードは次のとおりです。

var sys  = require("util");
var odbc = require("/home/vash/node_modules/odbc/odbc.js");

var db = new odbc.Database();
db.open("Driver={ODBC for MonetDB};Setup=/usr/lib/libMonetODBCs.so;UsageCount= 1;SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo", function(err)
{
    db.query("select * from demo", function(err, rows, moreResultSets)
    {
        sys.debug(sys.inspect(rows));
        db.close(function(){});
    });
});

コマンド「isql-vmonetdb」を使用すると、次のodbc.iniおよびodbcinst.iniの内容でODBCを使用してmonetDBに接続できます。

[monetdb]
Description             = "ODBC for MonetDB"
Driver          = /usr/lib/libMonetODBC.so
Setup           = /usr/lib/libMonetODBCs.so
UsageCount              = 1
SERVER = vash-G75VW
USER = monetdb
PASSWORD = monetdb
PORT = 5000 
DATABASE = demo

isqlを使用して接続しているので、問題はコード行にあると推測しています。

"Driver={ODBC for MonetDB};Setup=/usr/lib/libMonetODBCs.so;UsageCount= 1;SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo"

何が問題なのか、上記の接続文字列を正しく設定していますか?

4

1 に答える 1

4

最初に、odbc.ini と odbcinst.ini の設定を混同しています (ただし、部分的には回避しています)。odbcinist.ini ファイルには、[] で各ドライバーの名前が付けられたドライバーのリストが含まれており、その後にドライバーの属性が続きます。したがって、odbcinst.ini ファイルの内容が上記のようになっている場合、さまざまな属性を持つ「monetdb」という名前のドライバーを指定したことになります。ドライバーに絶対に必要な唯一の属性はドライバー属性であり、ドライバーの共有オブジェクトを指す必要があります。追加の属性 usagecount、description、および setup はオプションです。説明は一部の ODBC API から返される可能性があり、セットアップ ライブラリは、必要な場合 (unix ではめったにありません) にロードするセットアップ ライブラリをドライバー マネージャーに通知します (たとえば、ドライバーがパスワードの入力を求めるプロンプトを表示したい場合や、不十分なパスワードを指定した場合など)。接続する属性)。したがって、odbcinst.ini ファイルは次のようになります (注: 分かりやすくするために、ドライバー キーの名前を意図的に変更しました)。

[monetdb_driver]
Description             = "ODBC Driver for MonetDB"
Driver          = /usr/lib/libMonetODBC.so
Setup           = /usr/lib/libMonetODBCs.so
UsageCount              = 1

/etc/odbc.ini ファイルには SYSTEM DSN が含まれており、odbcinst.ini ファイルと同様に作成されますが、[] 内の各エントリは DSN 名です。DSN が絶対に必要とする唯一の属性は、この DSN に使用する ODBC ドライバーを指定する Driver 属性です。名前が付けられたドライバーは、odbcinst.ini ファイルのキーである必要があるため、odbc.ini ファイルは次のようになります (ドライバーの名前を再度変更したことに注意してください)。

[monetdb]
Description             = "DSN for MonetDB"
Driver          = monetdb_driver
SERVER = vash-G75VW
USER = monetdb
PASSWORD = monetdb
PORT = 5000 
DATABASE = demo

USER DSN を持つことができ、通常は ~/.odbc.ini に入ることに注意してください (以下の odbcinst -j の出力を参照)。

unixODBC の odbcinst コマンドも、ini ファイルの場所を確認するために実行できるので便利です。

$odbcinst -j
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/martin/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2

これが完了すると、isql コマンド (以前と同様) が機能するはずです。次のようになります。

isql -v monetdb your_username your_password

次に、SQLDriverConnect を呼び出します。

db.open("Driver={monetdb_driver};SERVER=vash-G75VW;USER=monetdb;PASSWORD=monetdb;PORT=5000;DATABASE=demo",

私は monetdb を使用していないので、"Driver" 以外の属性については確信が持てませんが、ODBC は通常、ユーザー名とパスワードに属性 UID と PWD を使用します。monetdb にはポートとデータベースの属性があると思います。

UNIX での ODBC について、および接続プロセスが誰によって機能するかについては、Linux/UNIX ODBCおよびODBC - The Connection Processどちらも私が書いています。

DSN を使用しない接続文字列 (上記の SQLDriverConnect への呼び出し) を使用してのみ接続する場合は、odbc.ini ファイルの内容を削除できます。

于 2012-07-13T08:20:18.833 に答える