为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: V8.1.0.147(Build 2019.03.27)
【操作系统】:Win10
【CPU】:Intel i7-8750H
【问题描述】*:32位客户端通过ODBC驱动连接64位达梦8数据库使用DISTINCT关键字查询并使用静态游标程序在MoveNext时异常,示例代码如下:
#import"msado20.tlb" rename_namespace(“ADODB”) rename(“EOF”, “adoEOF”)
int _tmain(int argc, _TCHAR* argv[])
{
ADODB::_ConnectionPtr spCon = NULL;
ADODB::_RecordsetPtr spRst = NULL;
_variant_t vtVal;
CoInitialize(NULL);
HRESULT hr = spCon.CreateInstance(__uuidof(ADODB::Connection));
spCon->Open(_T("DRIVER=DM8 ODBC DRIVER;Server=localhost;TCP_PORT=5236;UID=YXSXK;PWD=YXSXKYXSXK"), _T(""), _T(""), ADODB::adConnectUnspecified);
spCon->raw_Execute(_T("CREATE TABLE TEST (NAME NVARCHAR(128),CLASS NVARCHAR(64))"),NULL,ADODB::adExecuteNoRecords,NULL);
spCon->Execute(_T("INSERT INTO TEST(NAME,CLASS) VALUES('NAME1','CLASS1')"),NULL,ADODB::adExecuteNoRecords);
spCon->Execute(_T("INSERT INTO TEST(NAME,CLASS) VALUES('NAME2','CLASS2')"),NULL,ADODB::adExecuteNoRecords);
hr = spRst.CreateInstance(__uuidof(ADODB::Recordset));
spRst->Open(_bstr_t(_T("SELECT DISTINCT CLASS FROM TEST")), _variant_t(spCon,true), ADODB::adOpenStatic, ADODB::adLockOptimistic, ADODB::adCmdText);
while(VARIANT_FALSE == spRst->adoEOF)
{
vtVal = spRst->GetCollect(_T("CLASS"));
spRst->MoveNext();//程序运行到这里就异常了
}
CoUninitialize();
return 0;
}
你试一下不加disctinct是否报错