ApplyFilter (ILLDataProvider)

Syntax:

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

Aufgabe:

Wird ausschließlich auf Knotenebene verwendet. Im Drilldown-Fall übergibt List & Label hier eine Feldliste sowie deren Inhalte. Damit kann z. B. ein zugrundeliegendes SQL-Statement im Datenobjekt mittels WHERE eingeschränkt werden.

Parameter:

arvFields: VARIANT Feld mit den Feldnamen

arvValues: VARIANT Feld gleicher Größe mit den Feldinhalten

Rückgabewert:

E_NOTIMPL für Wurzelobjekte, sonst S_OK oder E_FAIL im Fehlerfall

Hinweise:

Auch leere Filteranfragen sind mit S_OK zu beantworten.

Beispiel:

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;