1

まず、クリスタルが我慢できない!さて、それは私の胸から離れています...

これで、クライアント用に維持している古い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私はすでにメニューから[データベース]>[データベースの確認]を実行しようとしましたが、レポートはすべて最新であり、まったく役に立ちませんでした。

4

3 に答える 3

0

さて、これは私がCrystalReportsを軽蔑する理由の典型です。

上司が休暇から戻ってきて、それを見て、...何もしなかったので、今はうまくいきます。彼は私に自分がしたことを正確に示し、レポートを変更したり何もしなかった。私が行ったのと同じデバッグ手順でしたが、今では魔法のように機能します。

私は、このように自動的に停止して動作を開始するソフトウェアが本当に嫌いです。アイデアをありがとう。

于 2010-04-07T16:59:56.273 に答える
0

PESetSelectionFormulaを使用したことはありませんが、他の方法で受け入れ可能なデータのインポートで問題が発生しました。

  1. 最終的なSQLクエリは、一般的でない関数、つまりnz()を使用していますか?クリスタルは常にVB機能を認識するとは限りません。

  2. インポートされたデータに競合を引き起こしているnull値がありますか?

  3. データを収集した後、それを一時テーブルに入れて、その一時テーブルからデータを取得するようにCrystalに指示できますか?#1または#2に問題がある場合は、これが適切な回避策になる可能性があります。

于 2010-04-05T19:20:16.697 に答える
0

CRの一部のバージョンでは、PESetSelectionFormulaは既存のレコード選択式に新しい値を追加しますが、他のバージョンでは、PESetSelectionFormulaは既存のレコード選択式を新しい値に置き換えます。

この切り替えがいつ発生したかは思い出せませんが、どの動作が発生しているかを簡単に判断できるはずです。

于 2010-04-06T16:13:08.930 に答える