DB Express と TClientDataSet を使用して DB グリッドに結合の結果を表示する Delphi XE2 で作成された DLL があります。他のアプリケーションで使用するためにエクスポートされたフォームを起動/表示する簡単な機能があります。FormActivate でクエリが実行され、グリッドにデータが入力されます。
別の Delphi XE2 アプリケーションからフォームを表示する関数を呼び出すと、すべて正常に実行されます。問題は見つかりませんでした。
しかし、別の Delphi 7 アプリケーションから同じ関数を呼び出すと、TClientDataSet が結合からフィールドを見つけられないというエラーが表示されます。
たとえば、データは次のように返されます。
[dbxds == TSQLDataSet
cds == TClientDataSet]
dbxds.commandtext='select s.sfield1, s.sfield2, t.tfield1, t.tfield2 from s left join t on s.sfield1 = t.tfield1';
cds.Open;
cds.fieldByName(sfield2).visible:=false;//to hide from a dbgrid
cds.fieldByName(tfield2).visible:=false;//to hide from a dbgrid
XE2 から呼び出した場合は問題ありません。Delphi 7 から呼び出すと、最後の行(データベース グリッドからそのフィールドを非表示にするために使用)で次のエラーが発生します。
cds: Field 'tfield2' not found
最初の行は問題ありませんが、「t」フィールドが最初に取得されるようにクエリの順序を切り替えると (「from t left join s」)、代わりに「s」フィールドでエラーが発生します。
非互換性の原因について何か考えはありますか?
ありがとう!