FieldKind := fkInternalCalc のフィールドのフィルター処理について

解決


久美子  2022-03-31 11:15:34  No: 150138  IP: [192.*.*.*]

頻繁に、10万件を超えるCSVを読み込むシステムをすでに運用しています。
業務内容と運用環境の都合から、SQLではなく、TClientDataSetを用いた使い捨て処理をしています。
文字処理を含む複雑な計算項目のフィールドがあり、DLLを用いて OnCalcFields で処理しています。
このフィールドはフィルターとして利用したいために、FieldKind := fkInternalCalcに設定しています。
ところが、
読込み時間を短縮するために、OnCalcFieldsをnilに設定し、全行をAppend--Postで読み込み、直後でOnCalcFieldsをセットとすると、DBGridでは問題なく表示されるのに、この項目を用いたフィルターは、値がないものとして処理をされてしまいます。
OnCalcFieldsをセットしてAppend--Postすると問題なくフィルターが有効に機能しますので、Post処理時のOnCalcFieldsが働いているかどうかが分かれ目と思われます。
これは、TClientDataSetの仕様として、しょうがないのでしょうか。
OnCalcFieldsをセットしての読込みでは、処理時間が5倍ほどかかりますので、できれば読み込んだ直後の処理で済ませられればと考えています。
試しに、
OnCalcFields  nil
データ読込み
OnCalcFields セット
データセット をClose  Open
と試してみましたが、ダメでした。

編集    削除
久美子  2022-05-18 14:20:34  No: 150207  IP: [192.*.*.*]

解決はしてませんが、致命的なエラーではないので、時間が経過したこともあり解決チェックをすることにします。
閲覧して悩んでくれた皆さん、ありがとうございました。

編集    削除