おそらくフィルタリングされたインデックスを意味します。しかし、あなたはそのようなことをする必要はありません。従業員番号(私はそれが整数であると思われます)と日付を結合したインデックスを単純に持つことができます。その後、単純なforとwhileのスコープの句や範囲を使用することができます(実際にあなたが何をするか説明していません)。そして、あなたがすることに応じてSQLがより簡単な方法かもしれません。 すなわち:(列名は悪い考えであるとして日付を使用して、それは別の問題です)
INDEX ON padl(empId, 10, '1') + dtoc(Date,1) TAG MyOrder
ようなインデックスは、あなたがこのような日付範囲内の指定された従業員のすべてのレコードをスキャンすることができ持つ:
local lnEmployee, lcStart, lcEnd
lnEmployee = 1 && whatever the employee number is
lcStart = padl(m.lnEmployee, 10, '1')+dtoc(ThisForm.DateFrom,1)
lcEnd = padl(m.lnEmployee, 10, '1')+dtoc(ThisForm.DateTo,1)
scan for padl(empId, 10, '1') + dtoc(Date,1) >= m.lcStart and ;
padl(empId, 10, '1') + dtoc(Date,1) <= m.lcEnd
* whatever
endscan
これは、同じことをするだろう:
local lnEmployee, lcStart, lcEnd
lnEmployee = 1 && whatever the employee number is
lcStart = padl(m.lnEmployee, 10, '1')+dtoc(ThisForm.DateFrom,1)
lcEnd = padl(m.lnEmployee, 10, '1')+dtoc(ThisForm.DateTo,1)
set order to tag myOrder
set range to m.lcStart, m.lcEnd
scan
* whatever
endscan
PS:実はEMPIDと日付で索引を、のために...あまりにも行うだろうシンプルなスキャン。すなわち:
scan for empId = m.lnEmpoyee and ;
Date >= ThisForm.DateFrom and ;
Date <= ThisForm.DateTo
*...
endscan
スナップありがとうございました。それらは、より良いソリューションありがとうございました! – user2435026