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;