ESQLスタイル(Informix API)呼び出しで記述されたサードパーティのInformixドライバーを維持しています。私は、TEXTフィールドの場合、INSERTが正常に機能し、UPDATEが失敗するバグに取り組んでいます。コードをステップスルーすると、sqlda構造をチェックして、バインドするかどうか、およびバインドする方法を確認していることがわかりました。sqli_describe_statementを呼び出した後、sqlda.sqld変数には2が含まれ、正しい数のバインドされたパラメーターが含まれます。この挿入呼び出しでは、パラメーターが正しく設定されているように見えますが、更新の場合、返される数値は0であり、パラメーター情報はありません( "UPDATE TESTTAB SET COLNAME =?WHERE OTHERCOLNAMEの1つのパラメーターの場合は1である必要があります)。 = 1 ")。
sqlda情報を使用して、INSERTに必要なロケーター構造を正しく設定しましたが、情報がないため、更新できません。デバッガーでそれを偽造し、更新のためにロケーターのセットアップコードを実行すると、正常に更新されます。
ステートメントは確かに正しいように見え、UPDATEバインドと同じ変数がINSERTに使用されています。さらに、sqli_prepは更新に問題はありません。describeの場合、sqsla.codeはさまざまな非負の数4と6を返します。これは、説明されているさまざまなタイプのステートメントを文書化されたもの(つまり、エラーコードではない)として表すため、明らかな問題はありません。
この奇妙な振る舞いを引き起こす可能性のある、この前にコードをチェックインする必要がある他の何かがありますか(さまざまなクエリの特殊なケースの処理以外-そこには何もありません)
ここで、ロケーターオブジェクトを作成し、行を見つけて、かかとを3回クリックして「IBMのような場所はない」と言う必要があるなど、TEXTフィールドのUPDATEを行う方法について基本的なことを見逃していますか?
これまでのところ、Google Fuはドキュメントにほとんど登場していませんが、その方法を示すドキュメントやサンプルを知っているなら、それもすばらしいことです。