2013-10-02 46 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用戶名和密碼 –