ApplyFilter (ILLDataProvider)

Syntax:

HRESULT ApplyFilter(const VARIANT* arvFields, const VARIANT* arvValues);

Task:

Only used at node level. In the drilldown case, List & Label transfers a field list and its contents. For example, you can use WHERE to restrict an underlying SQL statement in the data object.

Parameter:

arvFields: VARIANT field with the field names

arvValues: VARIANT field of equal size with the field contents

Return value:

E_NOTIMPL for root objects, otherwise S_OK or E_FAIL in case of error

Hints:

Empty filter requests can also be answered with S_OK.

Example:

SAFEARRAY* pArray = arvFields->parray;

SAFEARRAY* pValArray = arvValues->parray;

for (ULONG i = 0; i < pArray->rgsabound[0].cElements; ++i)

{

   CSafeVARIANT vHelper, vValHelper;

   long     lResIndex[2] = { i, 1 };

   ::SafeArrayGetElement(pArray, lResIndex, &vHelper);

   ::SafeArrayGetElement(pValArray, lResIndex, &vValHelper);

   _sqlparms._ddwhere += xsprintf(L"%ls%ls = %ls",

         _sqlparms._ddwhere.empty() ? L"WHERE " : L"AND ",

         (LPCTSTR)MakeDBColumnString(this, vHelper));

         (LPCTSTR)MakeDBValueString(this, vHelper, vValHelper));

}

return S_OK;