问个KDB+中从ODBC加载数据的问题

Discussion in 'kdb+' started by pyrope, Oct 18, 2010.

  1. 小弟现在数据都放在数据库上,想在KDB+里通过ODBC从数据库加载数据,我基本上是照着下面这个链接来做的:
    https://code.kx.com/trac/wiki/Cookbook/ODBC/qclient
    但是到这一步:
    q)h:.odbc.open `northwind / open northwind database
    我这里会出现如下的提示:
    k){$[#*f:fkeys[x]'t;f;fkey[k[i;0];u i:&1=#:'k:.q.keys'u]'u]xfkey'(u:.Q.id't).[;(
    );:;]'skey[x]'t:tables x:open x;close x;}
    '28000 [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user ''.
    @
    k){if[~r:mad:[open1;$[0<@x;x;1=#p:`\:x;x;`dsn~a:*|p;";"/:1_0:$[@!f:`$":",$x;f;`/:d,
    x];o[a],-4_$x];{e::x;0}];'e];*|h,:r}
    从字面上来看是说没有用来登陆的login. 但是我又不知道如何设置login的username和password. 想向各位请教一下~

    另外,我的机器是windows 2008 R2 (64位),用的是kdb+的试用版,一开始设置了64位的odbc, 虽然会出错,但是记得弹出了一个用来输入用户名密码的窗口。但是我设好了32位的odbc后,怎么也不出来那个窗口了。。。
     
  2. dsn:`sqlxxx`sa`pass;
    h:.odbc.open dsn;
    e.odbc.eval h;
    e "select * from XXX"
     
  3. 多谢!~
     
  4. 又碰到了个新问题,跟在这里问吧:

    我现在在SQL Server里有个这样的表:
    Instruments:

    InstrumentID int
    Symbol nvarchar(MAX)
    InstrumentType nvarchar(MAX)
    CurrencyCode nvarchar(MAX)
    ExchangeID int

    当中的一条数据是这样的
    (1, “1”, “STK", "HKD", 1)

    我现在通过odbc在kdb+里面拿数据,我的query是这样的:
    odbc.eval[db;"select * from Instruments"][0]
    但我拿到的结果却是:
    InstrumentID | 1
    Symbol | ""
    InstrumentType| ""
    CurrencyCode | ""
    ExchangeID | 1

    也就是三个字符串的数据拿到的都是空。。这是为什么?

    另外如果我在select指定了列,那结果是这样的:
    q).odbc.eval[db;"select InstrumentID, CurrencyCode from Instruments"][0]
    InstrumentID| 1
    CurrencyCode| "HK\000"

    字符串的最后一位显示为\000(其它字符串的column也有类似的现象), 很奇怪。。有没有人知道这是怎么回事?我的OS是windows server 2008R2, sql server db的collation是SQL_Latin1_General_CP1_CI_AS...
     
  5. nvarchar和bigint之类的非标准类型字段kdb+的odbc驱动支持的不够,要cast成varchar.
     
  6. 好的,谢谢,我去试一下~