有以下代码,将满足条件的书签数组作为记录集的过滤条件,本应过滤后有多条记录,但结果且只处理了原先记录集中的第一条记录,何故? int nCount=0;
_variant_t* pVarBook; // 如果记录数大于0,输出数据
if( pRecordSet && pRecordSet->GetRecordCount() > 0)
{
pVarBook = new _variant_t[ pRecordSet->GetRecordCount() ]; // 移动到表头
pRecordSet->MoveFirst(); // 读取每一条数据
while( !pRecordSet->IsEOF() )
{
// 记录满足条件的书签
if(满足条件)
{
// 记录当前书签
pVarBook[nCount] = pRecordSet->GetBook(); // 记录书签个数
nCount++;
} pRecordSet->MoveNext();
}// end while // 设置过滤条件
// --------------------------------------------------------------------
_variant_t varFilter;
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1]; rgsabound[0].cElements = nCount;
rgsabound[0].lLbound = 0; psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound); for( long i=0 ;i<nCount; i++ )
SafeArrayPutElement( psa, &i, &pVarBook[i] ); varFilter.vt = VT_ARRAY | VT_VARIANT;
varFilter.parray = psa;
bool bl = pRecordSet->PutFilter( varFilter );
// --------------------------------------------------------------------
}// end if
_variant_t* pVarBook; // 如果记录数大于0,输出数据
if( pRecordSet && pRecordSet->GetRecordCount() > 0)
{
pVarBook = new _variant_t[ pRecordSet->GetRecordCount() ]; // 移动到表头
pRecordSet->MoveFirst(); // 读取每一条数据
while( !pRecordSet->IsEOF() )
{
// 记录满足条件的书签
if(满足条件)
{
// 记录当前书签
pVarBook[nCount] = pRecordSet->GetBook(); // 记录书签个数
nCount++;
} pRecordSet->MoveNext();
}// end while // 设置过滤条件
// --------------------------------------------------------------------
_variant_t varFilter;
SAFEARRAY* psa;
SAFEARRAYBOUND rgsabound[1]; rgsabound[0].cElements = nCount;
rgsabound[0].lLbound = 0; psa = SafeArrayCreate( VT_VARIANT, 1, rgsabound); for( long i=0 ;i<nCount; i++ )
SafeArrayPutElement( psa, &i, &pVarBook[i] ); varFilter.vt = VT_ARRAY | VT_VARIANT;
varFilter.parray = psa;
bool bl = pRecordSet->PutFilter( varFilter );
// --------------------------------------------------------------------
}// end if
pVarBook = new _variant_t[ pRecordSet->GetRecordCount() ];
if(满足条件)
{
// 记录当前书签
pVarBook[nCount] = pRecordSet->GetBook();// 记录书签个数
nCount++;
}
创建的数组个数和使用的个数不一致。