1

データを DB テーブルにロードする Progress OpenEdge アプリケーションの機能をテストしています。私がテストしているテーブルのフィールドの多くは、アプリケーションによって 256 文字に制限されているため、いくつかのエッジ ケース テストを行って、256 文字より小さい、等しい、またはより大きいエントリをロードしようとしています。データのロード後、DB にクエリを実行し、結果を検証します。テスト プログラム TestComplete を通じて、ODBC ドライバー用の OLE DB プロバイダーを使用しています。これは私が使用しているクエリです:

SELECT SUBSTRING(lname, 1, 30)
FROM pub.referral
WHERE lname LIKE 'valid%'

テストを実行する前は、ODBC ドライバーはこのクエリに問題はありませんでした。しかし、実行した後、このテーブルには 256 文字のフィールドがあり、ODBC ドライバーはその長さのデータに問題を抱えています。を使用してそれを回避しようと考えましたSUBSTRINGが、このクエリを使用しようとすると、まだ検証エラーが発生します。

The specified query is invalid. Database engine reports: [DataDirect][ODBC Progress OpenEdge Wire Protocol driver]Error in row

参考になります!これは、ODBC が好む長さよりも長いデータがテーブルにある場合によく見られるエラーです。奇妙なことに、このWHERE句を削除すると、SUBSTRING.

これは、フィールドに ODBC ドライバーが想定するよりも多くの文字があるためですか、それとも句に関連する何かWHERE(構文が正しくないなど) のためですか? どうすれば回避できますか? dbtool を使用して設定を変更せずにこれを実行したいと考えています。テストを正確に行うには、DB に特定の設定を行うことが重要です。

4

1 に答える 1

1

私が疑っているのは、エンジンが一致しないレコードを読み取って、それらが WHERE 条件に一致するかどうかを確認していることです。一致しないレコードに SQL-WIDTH / MAX-WIDTH 設定よりも長いフィールドがある場合、表示されている結果が得られる可能性があります。

WHERE 句を使用せずに検索を行うということは、すべてのレコードが結果セットの一部であり、出力される前に SUBSTRING() コマンドによって処理されることを意味します。

これをテストする方法は、等価一致で WHERE を実行することです。エンジンは、WHERE 仕様に一致するレコードのみを読み取り、SUBSTRING() を実行し、期待どおりに動作する必要があります。

これを「回避」するという点では、データを短くするか、これらのフィールドの SQL-WIDTH または MAX-WIDTH 設定を大きくします。

このトピックに関する KB は次のとおりです: http://knowledgebase.progress.com/articles/Article/P162121

「大きすぎる」列の処理に関する KB は次のとおりです 。 en_US&type=Article__kav&fs=検索&pn=1

于 2014-07-03T03:24:42.480 に答える