2

サブフォームにデータシートがあるメイン フォームを使用する Access 2003 データベースがあります。メイン フォームでは、サブフォームのレコード ソースを更新するメニューから選択できます。サブフォームは、フォームのレコードソース内のフィールドの数とタイプに基づいて、編集に使用できるフィールドの数とタイプも更新します。これは基本的に動的データシート ジェネレーターです。これは、Access 2003 で問題なく機能し、何年も前から機能しています。Access 2007 (フルまたはランタイム) で同じデータベースを開くと、ほとんどのメニュー選択が機能します。ただし、特定の 1 つのテーブルを参照するメニュー オプションを選択すると、サブフォームには列ヘッダーが表示されますが、データ行やエラーは表示されません。クエリがゼロ行を返すかのようです。Access 2007 に違いがあるのはなぜですか? 彼らは新しい予約語を追加しましたか?

私が試したこと:

  • テーブル内のすべてのフィールドを更新して、NULL 値がないようにします (変更なし)。
  • 新しい予約語がある場合に備えて、すべてのフィールドとテーブル名の名前を変更しました (変更なし)
  • フロントエンドとバックエンドを圧縮して修復(変更なし)
  • フィールドを1つずつ含めたり除外したりして、何かが変更されたかどうかを確認しました(変更なし)
  • フォームのレコードソースを新しいクエリに入れます。(期待される行数を返しました)
  • フォームがデータ入力モードに設定されていないことを確認しました。(そうではありません)
  • コードにフィルタが適用されていないことを確認しました。(どれもありませんでした)
  • クエリが Access 2007 で更新可能であることを確認しました。 (そうです)
  • ソース テーブルからデータのチャンクを選択的に削除しました。(変化なし)

私は困惑しています。

4

1 に答える 1

5

私は最終的に問題を解決することができました。上で述べたように、私のデータシートはサブフォームです。親フォームは、サブフォームの作成方法を決定するオプションを設定します。データシートの作成中、サブフォームのソース オブジェクトは空白のフォームに置き換えられ、前のデータシートが非表示になり、新しいデータシートへの移行がスムーズになります。Access 2000/2003 で美しく動作します。

Access 2007 で空白のフォームを新しいデータシートに置き換えると、Access がサブフォーム データの主キーをバインドされていない親フォームの LinkMasterFields および LinkChildFields プロパティに自動的に割り当てることがわかりました。これらのプロパティは以前は空白で、コードで設定したことはありません。おそらく、これは Access 2007 がバグではなく役立つように試みたものですが、組み込みのヘルプ ファイルを含む、私が見つけたテクニカル リファレンスには、動作の違いは記載されていません。親フォームはバインドされていないため、すべてのサブフォーム レコードを除外する効果があります。フォーム置換ステップで LinkMasterFields="" および LinkMChildFields="" を明示的に設定すると、すべてが以前と同じように機能します。万歳!

繰り返しになりますが、サブフォームの sourceobject を設定するときは、linkmastfields および linkchildfields プロパティを明示的に設定して、Access が自動的に実行しないようにしてください。これにより、私が経験したフラストレーションの時間を誰かが救ってくれることを願っています.

于 2010-08-27T20:14:09.830 に答える