小编use*_*685的帖子

在VBA中使用KDB +/qodbc.dll进行ADO

我有一个基于Excel的应用程序依赖于几个不同的数据库,我使用ADO(Microsoft ActiveX Data Objects 6.1库)连接到这些数据库.数据库驻留在区域服务器上,并且建立初始连接存在开销,因此我将连接缓存在Scripting.Dictionary对象中以供重用.

Private moConnCacheDict As Scripting.Dictionary
Run Code Online (Sandbox Code Playgroud)

当我使用kdb + qodbc.dll数据库驱动程序时,我得到意外的行为.我可以按预期连接和重用多个数据源(Oracle,Sybase,Access)和一个KDB数据库实例.但是,如果我创建第二个KDB数据库连接并对新数据集执行查询,则尽管查询是合法的,但不会返回任何数据.

Recordset.BOF = TRUE and Recordset.EOF = TRUE 
Run Code Online (Sandbox Code Playgroud)

它似乎执行正常,字段可见.与前一个区域服务器的连接似乎仍然存在,我可以成功检索驻留在原始服务器上的数据,尽管如果我看到,

Recordset.ActiveCommand.ActiveConnection.Properties.Item("Extended Properties")
Run Code Online (Sandbox Code Playgroud)

,是新的连接字符串.

KDB +连接字符串使用以下语法:

DRIVER=kdb+;DBQ=XXXXX;UID=XXXXX;PWD=XXXXX;
Run Code Online (Sandbox Code Playgroud)

我已经将核心VBA函数作为示例包含在内:

Private Function ExecuteQuery(sDBName As String, ByRef oRst As ADODB.Recordset, Optional bDeleteConnection As Boolean) As Boolean
Dim oDBConn As ADODB.Connection
Dim sSql As String

'delete connection
If bDeleteConnection Then Call DropConnection(sDBName)

'get cached or new connection
Call GetConnection(sDBName, oDBConn)

Select Case sDBName
Case "MAIN_US"
    sSql = mSQL_MAIN
Case "MD_ASIA"
    sSql = mSQL_MDASIA
End Select …
Run Code Online (Sandbox Code Playgroud)

excel vba ado excel-vba kdb

5
推荐指数
1
解决办法
965
查看次数

在 Pandas DataFrameGroupBy 对象上使用 `rank`

我在由三列 [id, country, volume] 组成的数据框中有一些简单的数据,其中索引是“id”。

我可以执行简单的操作,例如:

df_vol.groupby('country').sum()
Run Code Online (Sandbox Code Playgroud)

它按预期工作。当我尝试使用 rank() 时,它没有按预期工作,结果是一个空的数据框。

df_vol.groupby('country').rank()
Run Code Online (Sandbox Code Playgroud)

结果不一致,在某些情况下它有效。以下也按预期工作:

df_vol.rank()
Run Code Online (Sandbox Code Playgroud)

我想返回类似的东西:

vols = []
for _, df in f_vol.groupby('country'):
    vols.append(df['volume'].rank())
pd.concat(vols)
Run Code Online (Sandbox Code Playgroud)

任何想法为什么非常感谢!

python pandas

2
推荐指数
1
解决办法
2205
查看次数

标签 统计

ado ×1

excel ×1

excel-vba ×1

kdb ×1

pandas ×1

python ×1

vba ×1