バグを IBM に報告する以外に、おそらく直接できることは何もありません。
最終的に、ESQL/C には CQ idsdb00247065 というバグがあり、エラー -1820 が発生します。LVARCHAR 変数のサイズが元のサイズに設定されていない限り、カーソルを再度開いたときに LVARCHAR 変数の SQL 記述子を再利用することはできません。サイズを変更してしまったのは ESQL/C 自体なので、イライラします。
アプリケーションが使用できる回避策があります。つまり、各 LVARCHAR の元のサイズを格納し、最初の FETCH の前 (実際には OPEN の後) に SQL 記述子でそのサイズを復元します。しかし、それには ISQL へのソースが必要です。Informix SQL ( isql
) や DB-Access ( dbaccess
) などのクライアント プログラムが複雑な型 (ROW 型など) を処理する方法は、値を LVARCHAR に変換します。
この修正には、(a) Informix ClientSDK (CSDK) の修正済みバージョンと、(b) 修正済み CSDK で構築された ISQL のバージョンが必要です。
短期的には、SQL スクリプトを処理するために ISQL の代わりに DB-Access を使用する必要があります。DB-Access は 20 年前に ISQL から分離されましたが、それ以来、独立して開発されてきました。
この診断に欠陥があるとすれば、それは構造ではなく SQL 記述子に適用されるということsqlda
です (詳細を理解する必要はありません。動的 SQL を処理するメカニズムは 2 つしかなく、バグ レポートは 1 つに厳密に適用されます)。 、しかし、SQL記述子ではなくisql
使用する可能性が高いため、他のものに適応できる場合があります)。sqlda
ただし、2 つの問題が密接に関連している可能性は非常に高いです。