0

組み込みのクエリ機能を備えた古い VB6 アプリを維持しています。この機能は通常はうまく機能しますが、ユーザーが特定のクエリを入力するとクラッシュします。クラッシュは、特定のクエリに対して 100% 再現可能であり、コード内のまったく同じ場所で発生します。

オンラインで

toto = rcs.Fields(i)

、VB6 は OLE-DB からブロック エラーをキャッチします:「複数ステップの OLE DB 操作でエラーが発生しました」(実行エラー -214721778 (80040e21)

「i」は範囲外ではありません。他の列でも同じ問題が発生します。クラッシュ時にブレークすると、rcs.Fields(i + 1).Value は Null、rcs.Fields(i + 2).Value は同じエラーが発生し、rcs.Fields(i + 3).Value は非 Null で有効な値。他のテーブルで選択ステートメントをテストしたところ、クラッシュしないため、返される結果の数とは関係がないようです。一部の列を選択から削除すると (日付型の特定の列のみ)、アプリのクラッシュが防止されるため、エラーは一部の列に関連しているようです。列の総数とは直接関係ありません(多数の列で動作するように見えるため、テストしました)。

接続は次のように開かれます。

conn.ConnectionString = "uid=uidValue;pwd=pwdValue;DRIVER={Microsoft ODBC for Oracle};server=serverValue"
conn.ConnectionTimeout = 30

2 つの ODBC ログをアップロードしました。1 つはクラッシュの直前の内容 ( http://pastebin.com/PH1nQ2VC ) で、もう 1 つは接続が開かれた直後の内容 ( http://pastebin.com/AJqsYviQ ) です。接続が開かれたときにいくつかの疑わしいメッセージがありますが、実際にはエラーと関係があるかどうかを判断するのは困難です.


クエリ:

SELECT
 table_.someDateField -- type DATE
FROM
 table_actual_name table_
WHERE
 table_.someStringField LIKE '%5582%' -- type VARCHAR2 (10)

-- notes
--  someDateField can be NULL
--  someStringField can be NULL too (although that would make no sense and the actual database has 1 line with a NULL)
4

0 に答える 0