エラーが常にプログラマーのせいであるというJeffAtwoodの記事はよく知っていますが、Delphiの.pasファイルにバグを本当に本当に見つけたと思います。
具体的には、Delphi 2007を使用していますが、エラーはDBCommon.pasファイルの955行目にあります。このファイルは、私のマシンでは次の場所にあります。
C:\ program files \ codegear \ rad studio \ 5.0 \ source \ Win32 \ db \ DBCommon.pas
そしてコードはこれです:
...
FieldIndex := StrToInt(Token);
if DataSet.FieldCount >= FieldIndex then
LastField := DataSet.Fields[FieldIndex-1].FieldName else
...
「Token」の値がゼロの場合、DataSet.Fieldsのインデックス-1にアクセスしようとすると、リストインデックスの範囲外エラーが発生します。
このエラーは、その高さになる前に処理されるため、ユーザーには発生しませんが、これが発生するたびにデバッガーが中断するのは非常に苛立たしいことです。
「この例外タイプを無視する」こともできますが、インデックスの範囲外エラーは十分に一般的であるため、普遍的に無視したくありません。
FieldIndexがゼロになる状況は、次のように、ORDERBYに関数が含まれているSELECTステートメントがある場合です。
ORDER BY
CASE WHEN FIELD1 = FIELD3 THEN 1 ELSE 2 END
,CASE WHEN FIELD2 = FIELD4 THEN 1 ELSE 2 END
DBCommon.pasのバグを修正できますが、Delphiはそれ自体を再コンパイルせず、変更は有効になりません。.DCUファイルの名前を変更すると、「DBCommon.dcu」が見つからないと文句を言うだけです。
だから(最後に)私の質問は:DBCommon.pasを自分の修正で再コンパイルできますか?もしそうなら、どのように?