5

Access 2010forWindowsで問題が発生しました。

  1. doCmd.OpenReportを使用してレポートを起動します
  2. レポートに関連付けられたイベントで「キャンセル=True」を設定します
  3. アクセスを閉じる
  4. アクセスは引き続き「ファントム」プロセスとして実行されるため、タスクマネージャーで強制終了する必要があります。このプロセスが強制終了されるまで、Accessは別のデータベースを開くことができません。タスクは最初にいくらかのCPU使用率を示しますが、0%まで静まります。

doCmd.OpenReportを使用してレポートを起動しているときにこれを発見しました。レポートは、Report_Openイベントでフォームを開きます。フォームはユーザーにレポートパラメータの入力を求め、「OK」を押してレポートを表示するか、「キャンセル」を押すことができます。「キャンセル」のクリック時イベントは「キャンセル=True」を設定します。

OpenReport ()がキャンセルに適切に応答していないようです。これはよく使われるテクニックのように思われるので、バグと呼ぶのをためらって、何か間違ったことをしているのではないかと思っています。実は...これを説明すればするほど、バグのように聞こえます。この時点で、誰かが回避策を持っているか、明らかな何かが欠けていることを望んでいます。

これは、問題を説明するために作成した単純化された例です。

Private Sub Form_Open(Cancel As Integer)
On Error GoTo errHandler

DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog

Exit Sub

errHandler:
Select Case Err.Number
Case 2501   ' Cancelled by user, or by NoData event.
    MsgBox "Report cancelled, or no matching data.", vbInformation, "Information"
Case Else
    MsgBox "Error " & Err & ": " & Error$, vbInformation, "Form_Open()"
End Select
Resume Next

End Sub

報告する

Private Sub Report_Open(Cancel As Integer)
    Cancel = True
End Sub
4

2 に答える 2

5

この場合の問題の理由はacDialogです:

 DoCmd.OpenReport "Test Report", acViewPreview, , , acDialog

私はあなたが見つけると思います:

 DoCmd.OpenReport "Test Report", acViewPreview

問題なく動作します。

コメントを編集

レポートをキャンセルする必要はありません。ほとんどの場合、エラーをトラップするよりも回避する方がよいため、フォームを開く前にデータを確認してパラメーターを取得してください。フォームをレポートオープンイベントから独自のステップに移動し、DLookUpまたはクエリを使用して、フォームを起動する前にデータを確認します。

于 2013-01-01T01:02:48.560 に答える
0

私はこの問題をテストする立場にないので、一般的な解決策を提供します。レポート定義からデータ/レコードセット/レコードソースを削除します。

パラメータを決定した後、レコードソースをレポートに適用できます。レポートがキャンセルされると、データ接続がなくてもキャンセルされます。

于 2013-01-03T12:18:46.580 に答える