我会学到很多关于你的问题和答案的解读。Ubuntu 12.04 LTS 64 + unixODBC 2.3.1 + Informix clientsdk 4.10 + node.js v0.10.20
但现在我失去了
正如你可以看到标题,我与Ubuntu 12.04 LTS发挥64 +的unixODBC 2.3.1 + Informix的clientsdk 4.10 + Node.js的v0.10.20 ....
直到我尝试在node.js环境中使用unixODBC和Informix驱动程序进行连接时,每件事情都是正确的。
我对SQLServer没有问题。所以节点没问题,unixODBC也没问题,SQLServer Driver也是。 Informix驱动程序看起来也是正确的,但是。
我可以$ isql -v MYDSN和查询数据库。
但是当节点App试图连接崩溃。
的DSN是真的容易和isql可以玩:
/usr/local/etc/odbc.ini
[NIFX]
Driver=/opt/IBM/informix/lib/cli/iclit09b.so
Server=explotacion
LogonID=informix
pwd=enterpass
Database=data
和玩宽度isql将查找以及
$ isql NIFX
+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL> SELECT COUNT(*) FROM PACIENTES
+------------------+
| |
+------------------+
| 414396 |
+------------------+
SQLRowCount returns -1
1 rows fetched
SQL>
我的节点testifx.js看起来
var Database = require("odbc").Database,
db = new Database(),
cn="DSN=NIFX"
db.open(cn, function (err) {
if (err) return console.log(err);
db.query('SELECT COUNT(*) FROM PACIENTES', [], function (err, data) {
if (err) console.log(err);
console.log(data);
db.close(function() {
console.log('done');
});
});
});
而结果...
$ node testifx
{ error: '[node-odbc] SQL_ERROR',
message: '[unixODBC][',
state: '0' }
$
任何人都可以帮助我。
什么是错宽度ODBC.INI或者也许把连接字符串中的其他一些parametrers(我托盘都发现赫然出现在谷歌的空间)
感谢真多。
谢谢迈克尔 对不起,很长的日志。
我已经做了你说的话。 首先登录到跟踪文件中的设置适当的环境中ODBCINST.INI
[ODBC]
TraceFile = /home/srlopez/Dev/unixODBC.log
Trace = Yes
其次,运行ISQL -v NIFX,并起到一个命令SELECT COUNT(*)FROM FSIGBLO。 我只是指名DSN。
完成右和迹线是:
[ODBC][7151][1380810414.400667][__handles.c][460]
Exit:[SQL_SUCCESS]
Environment = 0x63c750
[ODBC][7151][1380810414.400743][SQLAllocHandle.c][375]
Entry:
Handle Type = 2
Input Handle = 0x63c750
[ODBC][7151][1380810414.400773][SQLAllocHandle.c][493]
Exit:[SQL_SUCCESS]
Output Handle = 0x63d070
[ODBC][7151][1380810414.400803][SQLConnect.c][3700]
Entry:
Connection = 0x63d070
Server Name = [NIFX][length = 4 (SQL_NTS)]
User Name = [NULL]
Authentication = [NULL]
UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE'
[ODBC][7151][1380810414.803879][SQLConnect.c][4273]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810414.810623][SQLGetFunctions.c][151]
Entry:
Connection = 0x63d070
Id = SQLMoreResults
Supported = 0x6061d8
[ODBC][7151][1380810414.810759][SQLGetFunctions.c][186]
Exit:[SQL_SUCCESS]
Supported = 0x6061d8 -> 1
[ODBC][7151][1380810428.644512][SQLAllocHandle.c][540]
Entry:
Handle Type = 3
Input Handle = 0x63d070
[ODBC][7151][1380810428.644621][SQLAllocHandle.c][1081]
Exit:[SQL_SUCCESS]
Output Handle = 0x6b7aa0
[ODBC][7151][1380810428.644661][SQLPrepare.c][196]
Entry:
Statement = 0x6b7aa0
SQL = [SELECT COUNT(*) FROM FSIGBLO ][length = 29]
[ODBC][7151][1380810428.646046][SQLPrepare.c][371]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.646087][SQLExecute.c][187]
Entry:
Statement = 0x6b7aa0
[ODBC][7151][1380810428.646913][SQLExecute.c][348]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.646949][SQLNumResultCols.c][156]
Entry:
Statement = 0x6b7aa0
Column Count = 0x7fffc7b20e8e
[ODBC][7151][1380810428.646984][SQLNumResultCols.c][248]
Exit:[SQL_SUCCESS]
Count = 0x7fffc7b20e8e -> 1
[ODBC][7151][1380810428.647030][SQLNumResultCols.c][156]
Entry:
Statement = 0x6b7aa0
Column Count = 0x7fffc7b20bae
[ODBC][7151][1380810428.647057][SQLNumResultCols.c][248]
Exit:[SQL_SUCCESS]
Count = 0x7fffc7b20bae -> 1
[ODBC][7151][1380810428.647090][SQLColAttribute.c][293]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Field Identifier = SQL_DESC_DISPLAY_SIZE
Character Attr = (nil)
Buffer Length = 0
String Length = (nil)
Numeric Attribute = 0x7fffc7b20a08
[ODBC][7151][1380810428.647129][SQLColAttribute.c][664]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.647156][SQLColAttribute.c][293]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Field Identifier = SQL_DESC_LABEL
Character Attr = 0x7fffc7b20a10
Buffer Length = 301
String Length = (nil)
Numeric Attribute = (nil)
[ODBC][7151][1380810428.647192][SQLColAttribute.c][664]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.647218][SQLColAttribute.c][293]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Field Identifier = SQL_DESC_LABEL
Character Attr = 0x7fffc7b20cf0
Buffer Length = 301
String Length = (nil)
Numeric Attribute = (nil)
[ODBC][7151][1380810428.647244][SQLColAttribute.c][664]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.647295][SQLNumResultCols.c][156]
Entry:
Statement = 0x6b7aa0
Column Count = 0x7fffc7b20bbe
[ODBC][7151][1380810428.647322][SQLNumResultCols.c][248]
Exit:[SQL_SUCCESS]
Count = 0x7fffc7b20bbe -> 1
[ODBC][7151][1380810428.647347][SQLFetch.c][162]
Entry:
Statement = 0x6b7aa0
[ODBC][7151][1380810428.648100][SQLFetch.c][348]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.648137][SQLColAttribute.c][293]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Field Identifier = SQL_DESC_DISPLAY_SIZE
Character Attr = (nil)
Buffer Length = 0
String Length = (nil)
Numeric Attribute = 0x7fffc7b20a28
[ODBC][7151][1380810428.648164][SQLColAttribute.c][664]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.648189][SQLColAttribute.c][293]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Field Identifier = SQL_DESC_LABEL
Character Attr = 0x7fffc7b20a30
Buffer Length = 301
String Length = (nil)
Numeric Attribute = (nil)
[ODBC][7151][1380810428.648218][SQLColAttribute.c][664]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810428.648254][SQLGetData.c][237]
Entry:
Statement = 0x6b7aa0
Column Number = 1
Target Type = 1 SQL_CHAR
Buffer Length = 301
Target Value = 0x7fffc7b20d00
StrLen Or Ind = 0x7fffc7b20bb0
[ODBC][7151][1380810428.648358][SQLGetData.c][501]
Exit:[SQL_SUCCESS]
Buffer = [2]
Strlen Or Ind = 0x7fffc7b20bb0 -> 1
[ODBC][7151][1380810428.648453][SQLFetch.c][162]
Entry:
Statement = 0x6b7aa0
[ODBC][7151][1380810428.648485][SQLFetch.c][348]
Exit:[SQL_NO_DATA]
[ODBC][7151][1380810428.677380][SQLRowCount.c][173]
Entry:
Statement = 0x6b7aa0
Row Count = 0x7fffc7b20e48
[ODBC][7151][1380810428.677455][SQLRowCount.c][244]
Exit:[SQL_SUCCESS]
Row Count = 0x7fffc7b20e48 -> -1
[ODBC][7151][1380810428.677539][SQLMoreResults.c][162]
Entry:
Statement = 0x6b7aa0
[ODBC][7151][1380810428.678583][SQLMoreResults.c][317]
Exit:[SQL_NO_DATA]
[ODBC][7151][1380810428.678630][SQLFreeStmt.c][144]
Entry:
Statement = 0x6b7aa0
Option = 1
[ODBC][7151][1380810428.678661][SQLFreeHandle.c][381]
Entry:
Handle Type = 3
Input Handle = 0x6b7aa0
[ODBC][7151][1380810428.679476][SQLFreeHandle.c][491]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810430.715614][SQLDisconnect.c][208]
Entry:
Connection = 0x63d070
[ODBC][7151][1380810430.719032][SQLDisconnect.c][364]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810430.719070][SQLFreeHandle.c][284]
Entry:
Handle Type = 2
Input Handle = 0x63d070
[ODBC][7151][1380810430.719093][SQLFreeHandle.c][333]
Exit:[SQL_SUCCESS]
[ODBC][7151][1380810430.719116][SQLFreeHandle.c][219]
Entry:
Handle Type = 1
Input Handle = 0x63c750
然后运行节点test.js,与此连接字符串CN =“NIFX” 转嫁到的odbc.ini两个环境isql中相同的信息和节点。 和痕迹是
[ODBC][7171][1380810558.770556][__handles.c][460]
Exit:[SQL_SUCCESS]
Environment = 0x1438f10
[ODBC][7171][1380810558.770647][SQLSetEnvAttr.c][189]
Entry:
Environment = 0x1438f10
Attribute = SQL_ATTR_ODBC_VERSION
Value = 0x3
StrLen = -5
[ODBC][7171][1380810558.770677][SQLSetEnvAttr.c][363]
Exit:[SQL_SUCCESS]
[ODBC][7171][1380810558.781819][SQLAllocHandle.c][375]
Entry:
Handle Type = 2
Input Handle = 0x1438f10
[ODBC][7171][1380810558.782068][SQLAllocHandle.c][493]
Exit:[SQL_SUCCESS]
Output Handle = 0x7fc6000008c0
[ODBC][7171][1380810558.782802][SQLSetConnectAttrW.c][332]
Entry:
Connection = 0x7fc6000008c0
Attribute = SQL_ATTR_LOGIN_TIMEOUT
Value = 0x7fc607ffee4c
StrLen = 4
[ODBC][7171][1380810558.782922][SQLSetConnectAttrW.c][616]
Exit:[SQL_SUCCESS]
[ODBC][7171][1380810558.782968][SQLDriverConnectW.c][290]
Entry:
Connection = 0x7fc6000008c0
Window Hdl = (nil)
Str In = [DSN=NIFX][length = 9]
Str Out = (nil)
Str Out Max = 0
Str Out Ptr = (nil)
Completion = 0
UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE'
**[ODBC][7171][1380810558.787449][SQLDriverConnectW.c][699]
Exit:[SQL_ERROR]**
[ODBC][7171][1380810558.787689][SQLGetDiagFieldW.c][792]
Entry:
Connection = 0x7fc6000008c0
Rec Number = 1
Diag Ident = 2
Diag Info Ptr = 0x7fffdc53aca8
Buffer Length = -6
String Len Ptr = 0x7fffdc53acae
[ODBC][7171][1380810558.787802][SQLGetDiagFieldW.c][812]
Exit:[SQL_SUCCESS]
[ODBC][7171][1380810558.787839][SQLGetDiagRecW.c][508]
Entry:
Connection = 0x7fc6000008c0
Rec Number = 1
SQLState = 0x7fffdc53aeb0
Native = 0x7fffdc53aca4
Message Text = 0x7fffdc53acb0
Buffer Length = 512
Text Len Ptr = 0x7fffdc53acae
[ODBC][7171][1380810558.787873][SQLGetDiagRecW.c][550]
Exit:[SQL_SUCCESS]
SQLState = H
Native = 0x7fffdc53aca4 -> -11060
Message Text = [[unixODBC][]
[ODBC][7171][1380810558.788053][SQLGetDiagRecW.c][508]
Entry:
Connection = 0x7fc6000008c0
Rec Number = 2
SQLState = 0x7fffdc53aeb0
Native = 0x7fffdc53aca4
Message Text = 0x7fffdc53acb0
Buffer Length = 512
Text Len Ptr = 0x7fffdc53acae
[ODBC][7171][1380810558.788174][SQLGetDiagRecW.c][550]
Exit:[SQL_SUCCESS]
SQLState = 0
Native = 0x7fffdc53aca4 -> -11005
Message Text = [[unixODBC][]
这些都是我的结论。 节点使用unixODBC调用不同的函数。 ISQL呼叫SQLConnect.c和节点呼叫SQLDriverConnectW.c,像这样:
NODE就是函数调用,直到连接
[ODBC][7171][1380810558.770556][__handles.c][460]
[ODBC][7171][1380810558.770647][SQLSetEnvAttr.c][189]
[ODBC][7171][1380810558.770677][SQLSetEnvAttr.c][363]
[ODBC][7171][1380810558.781819][SQLAllocHandle.c][375]
[ODBC][7171][1380810558.782068][SQLAllocHandle.c][493]
[ODBC][7171][1380810558.782802][SQLSetConnectAttrW.c][332]
[ODBC][7171][1380810558.782922][SQLSetConnectAttrW.c][616]
[ODBC][7171][1380810558.782968][SQLDriverConnectW.c][290]
Entry:
Connection = 0x7fc6000008c0
Window Hdl = (nil)
Str In = [DSN=NIFX][length = 9]
Str Out = (nil)
Str Out Max = 0
Str Out Ptr = (nil)
Completion = 0
UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE'
[ODBC][7171][1380810558.787449][SQLDriverConnectW.c][699]
Exit:[SQL_ERROR]
ISQL就是函数调用,直到连接
[ODBC][7151][1380810414.400667][__handles.c][460]
[ODBC][7151][1380810414.400743][SQLAllocHandle.c][375]
[ODBC][7151][1380810414.400773][SQLAllocHandle.c][493]
[ODBC][7151][1380810414.400803][SQLConnect.c][3700]
Entry:
Connection = 0x63d070
Server Name = [NIFX][length = 4 (SQL_NTS)]
User Name = [NULL]
Authentication = [NULL]
UNICODE Using encoding ASCII 'UTF8' and UNICODE 'UTF16LE'
**[ODBC][7151][1380810414.803879][SQLConnect.c][4273]
Exit:[SQL_SUCCESS]**
如何解决这个问题? 再次提前致谢。
Santi
错误发生在哪一行?什么时候执行SELECT或何时打开连接?错误消息不完整,请检查是否无法获取有关错误的更多详细信息。 – ceinmart
在trace中奇怪的是,连接来自'isql'的字符串:'NIFX'是4个字符长,其中来自'node.js':'DSN = NIFX'的连接字符串长度为9个字符。 –