次のようなグループ クエリを実行する必要があります。
GROUP ON System.ItemName OVER ( SELECT TOP 20 System.ItemName FROM SystemIndex )
しかし、C++ ADO Recordset を使用して実行すると、Open で例外が発生します (SELECT TOP 20 System.ItemName FROM SystemIndex
クエリを検索すると、問題なく実行されます)。それで...そのようなグループ検索を実行する方法は?
ADO コード:
_ConnectionPtr connection = NULL;
hr = connection.CreateInstance(__uuidof(Connection));
_RecordsetPtr recordset = NULL;
hr = recordset.CreateInstance(__uuidof(Recordset));
hr = recordset->Open("GROUP ON System.Kind AGGREGATE COUNT() as 'Total' OVER ( SELECT TOP 20 System.ItemName, System.ItemUrl FROM SystemIndex )",
connection.GetInterfacePtr(), adOpenForwardOnly, adLockReadOnly, adCmdText);
長い間試した後、OLE DB を直接実行することにしましたが、検索データを取得するのは難しいようです
OLE DB コード:
CDataSource cDataSource; hr = cDataSource.OpenFromInitializationString(接続文字列);
if (SUCCEEDED(hr))
{
CSession cSession;
if (SUCCEEDED(hr))
{
CCommand<CDynamicAccessor, CRowset> cCommand;
hr = cCommand.Open(cSession, L"GROUP ON System.ItemName OVER ( SELECT TOP 20 System.ItemName, System.Itemurl FROM SystemIndex )");
if (SUCCEEDED(hr))
{
for (hr = cCommand.MoveFirst(); S_OK == hr; hr = cCommand.MoveNext())
{
DBORDINAL columns= cCommand.GetColumnCount();
for (DBORDINAL i = 1; i <= columns; i++)
{
PCWSTR pszName = cCommand.GetColumnName(i);
//HOW TO GET DATA TO A sdt::string ?
}
}
cCommand.Close();
}
}
}