2013-10-02 43 views
1

我会学到很多关于你的问题和答案的解读。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

+0

错误发生在哪一行?什么时候执行SELECT或何时打开连接?错误消息不完整,请检查是否无法获取有关错误的更多详细信息。 – ceinmart

+0

在trace中奇怪的是,连接来自'isql'的字符串:'NIFX'是4个字符长,其中来自'node.js':'DSN = NIFX'的连接字符串长度为9个字符。 –

回答

0

您可以启用ODBC调用跟踪。首先运行isql以获取有效呼叫的日志。然后对node.js做同样的事情。比较他们应该告诉你问题在哪里。

还有就是我如何启用ODBC在Linux上跟踪Informix的问题和答案:Tracing ODBC calls for Informix Client for Linux

编辑:

从日志似乎node.js使用SQLDriverConnectW()与错误结束:-11005。 Informix显示错误将其描述为“连接字符串属性无效。”

您可以使用相同的连接字符串为isql

cn="NIFX" 

如果不超过也许工作,你应该添加用户名/密码:

cn="Dsn=NIFX;Uid=myUsername;Pwd=myPassword;" 

在Python我经常用它在形式上:

dsn/user/password 

您还可以尝试添加连接字符串更多信息just lik e显示在:http://www.connectionstrings.com/informix

+0

谢谢Michal。 我已经完成了你所说的。跟踪被添加到问题中。 – Santi

+0

尝试添加更多属性:在您的连接字符串的leas用户名和密码 –