3

タイトル通り、不思議な現象に遭遇。2 つのサブフォームを含むフォームがあります。両方のサブフォームに、関連するサブフォームの再クエリをトリガーするボタンがあります。フォームをロードした後、すぐにこのボタンをクリックすると (フォームを再クエリします)、OnCurrent イベントの現在のレコードの主キーの値を変数に保存しようとすると、「3021: 現在のレコードがありません」というエラーが表示されます。奇妙なことに、デバッガーでは、関連する値は次のようになります。

  Form.CurrentRecord=1
  Form.RecordSet.Absoluteposition=-1
  Form.RecordSet.RecordCount=14
  Form.RecordSet.EOF=False
  Form.RecordSet.BOF=False

また、フォームが読み込まれると、読み込みイベントでも正しく機能し、最初のレコードに含まれる主キーである主キー値を保存できることに注意してください。

Form_Load と私の間のどこかで、その再クエリ ボタンをクリックすると、フォームのステータスが同期しなくなります。私はつい最近 Access 2003 から 2007 に切り替えましたが、覚えている限り、このエラーは以前には発生していませんでした (ただし、ロード後にこのボタンをクリックしなかっただけかもしれません)。

今のところ回避策がありますが、これがどのように発生するかを本当に理解したいと思います。

4

3 に答える 3

1

これが ADO​​ の場合は、使用されている OLE DB プロバイダーを確認します (推測)。

Debug.Print Form.RecordSet.ActiveConnection.Provider

たまたま 3.51 バージョンの場合は、以下を参照してください。

情報: ADO の JET データベースでの AbsolutePosition プロパティ

...ACE プロバイダーを使用している場合、おそらく回帰バグでしょうか?!

于 2009-05-26T10:49:08.930 に答える
0

「デザイン ビュー」に移動しようとすると、まったく同じ問題が発生します。すぐにクリックする必要はありません。1 時間待ってからクリックするだけです。このエラーがあります。

サブフォームがまだ空の場合にのみエラーが発生することに注意してください(つまり、最初にウィンドウを開いたときに実際にレコードが含まれていません)。したがって、私はいつもそれが正常だと思っていました。

カーソルが現在特定の位置を指していない場合、AbsolutePosition は -1 に設定されます。また、この値はゼロベースです(他の誰かが述べたように:最初の行はAbsolutePosition 0です)。ただし、サブフォームの特定の行にフォーカスがある場合でも、この位置は -1 になることがあります。これは無駄だということです。

現在のカーソル位置を知る必要がある場合に使用するのは CurrentRecord です。これは 1 から始まる数値です。リストが空の場合、CurrentRecord は 0 または -1 に設定され、行が利用できないという事実を表すと想像できます。

さまざまな列の複雑な合計を計算するために使用される関数でこれらすべてを使用しました。ここにページhttp://linux.m2osw.com/msaccess-sum-focus-recordset-problemがあります

于 2011-06-19T04:03:07.167 に答える