まず、クリスタルが我慢できない!さて、それは私の胸から離れています...
これで、クライアント用に維持している古いVB6アプリができました。このアプリは、Crystal Automationライブラリを使用して、一連のCrystalReports8.5レポートのレコード選択式をプログラムで変更します。
ほぼ同一の2つのレポートがあります。最近、別のテーブルから別のフィールドを追加するためにそれらを変更する必要がありました。ただし、テーブルをレポートに追加したとき、ビジュアルデザイナでは追加されましたが、SQLステートメントのFROM句には追加されませんでした。そこで、SQLステートメントを手動で編集して、追加の結合を追加しました。KO、うまくいきます。レポートをCrystalプレビューモードで実行すると、期待どおりに機能します。
ここで、ユーザーはVBアプリ内から変更をテストしました。レポートの1つは、正常に機能し、ダンディです。ただし、他のレポートでは、選択式を期待どおりに設定できていません。
コードは、関数を使用して選択式を設定しますPESetSelectionFormula
。変数を段階的に調べて、新しい選択式として関数に渡される文字列が正しいことを確認しました。の呼び出しはPESetSelectionFormula
正常に機能しているようで、値1を返しています。これは、どこにでもある限り、成功を示しています。(コードから正常に機能している他のレポートも1を返します。)
ただし、レポートは次のエラーで失敗します。Error Code: 534 - Error detected by database DLL.
デバッグ目的のコードは、レポートで現在使用されているSQL文字列をダンプします。レポートから出力されるSQLは次のとおりです。
SELECT ... FROM ...
WHERE
ORDER BY ...
ご覧のとおり、WHERE句は空白です。これが、データベースDLLがこのステートメントを上手く利用している理由だと思います。PESetSelectionFormula
の呼び出しに有効な文字列が渡されて成功を返しているのに、自動化ライブラリがWHERE句を設定していない理由がわかりません。レポートのSQLを手動で編集して、追加していないテーブルを追加したことが原因だと思いましたが、他のほぼ同じレポートでも同じことを行い、1つは正常に機能しています。
PESetSelectionFormula
なぜ成功を報告するのに実際には何もしないのか、誰かが何か考えを持っていますか?
PS私はすでにメニューから[データベース]>[データベースの確認]を実行しようとしましたが、レポートはすべて最新であり、まったく役に立ちませんでした。