2017-12-06 5 views
0

私はバインドされたuserformにフィールドがたくさんあります。私はサブミットボタンを使用して、ユーザーが共有フォームでエントリを作成できるようにします。しかし、ユーザーがサブミットボタンをクリックするたびに、それは全体フォームをクエリーします。しかし、約4〜5フィールドは送信ボタンでクリアすべきではなく、値を保持し、残りのフィールドは送信ボタンのクリックごとにクリアされるべきです。msアクセスでuserformを部分的にクリアする方法

これはアクセスと方法で行うことができますか?以下はレコードを送信し再クエリーするための単純なコードです。

Private Sub SaveBtn_Click() 
RunCommand acCmdSaveRecord 
Me.Requery 
Me.DataForm.Requery 
End Sub 
+0

"共有フォーム"とは何を意味し、どのフォームが静的フィールドに含まれていますか? –

+0

私はアクセスファイルが共有フォルダにあることを意味し、複数のユーザーがファイルを使用します。私は上記の設定を達成したいフォーム "ManDC"は、静的フィールドは何を意味するのかよく分かりません。 –

答えて

1

Accessで「結合した形」を持っている場合は、これはAccessフォームがで指定され、中に保存され、フォームの「レコードソース」プロパティされた基礎となるデータソースに縛られることを意味。

  1. runCommand関数acCmdSaveRecord - フォームの現在のレコードを保存します:あなたは上記の「SaveBtn_Click()」メソッドで、このコードは、次のことを行います。
  2. Me.Requery - フォーム全体を再クエリーします。
  3. Me.DataForm.Requery - メインフォームの "DataForm"という名前のサブフォームを再クエリーします。

したがって、「レコードソース」と他のフォームプロパティ設定の設定に応じて、フォーム全体を「再クエリー」すると、クエリー操作によって、データソース内の新しいレコードにカーソルが移動することがあります(...それ以降のバージョンのAccessでのドラッグ&ドロップフォームデザイナツールのデフォルト設定)、 "Requery"を呼び出すと、フォームが "クリア"されていると思われます。

メモ1:「Requery」は実際にレコードを保存するため、「Requery」も呼び出す場合は明示的に「RunCommand acCmdSaveRecord」を呼び出す必要はありません。 。

注2:レコードソース(およびその他の)フォームプロパティの設定方法によっては、現在選択されているレコードを保存して更新するだけの場合もありますが、フォームが動作しているようには聞こえませんあなたが上で言ったことに基づいて)、私はそれがあなたのフォームの場合ではないと仮定しています。

注3:メインフォームに「Requery」を呼び出すと、サブフォームも再クエリーされるので、コード行もここで重複する可能性があります。 "Me.DataForm.Requery"を呼び出す理由は、サブフォームのみを再クエリし、メインフォーム全体を再クエリしない場合です。

注4:メインフォーム上の "DataForm"サブフォームは、親(メイン)フォームとは別の独自の "レコードソース"プロパティ用の別個のデータソースを持ちますので、重要ですそのフィールド値を保存するかどうかに応じて、その事実を認識します。

だから、それは言った、私はお勧めかもしれないオプションのカップルは、あなたのフォームが動作するようにしたい正確にどのように応じて、あります

  1. あなたはフィールド値の一部を保持し、それらを使用したい場合クエリーボタンを押したときにNEW RECORDが表示された場合は、常に変数に保存しておき、変数を再クエリーした後で再度コントロールを設定することができます。保存する各値に対して個別の変数を作成し、それぞれの変数にTextBoxコントロールの値をコピーし、フォーム上のクエリーを呼び出して、クエリー後にそれらの値をTextBoxコントロールにコピーし直します。あなただけ "を作成しようとしている場合、 Private Sub SaveBtn_Click() Dim vValue1 as Variant vValue1 = txtMyTextBox Me.Requery txtMyTextBox = vValue1 End Sub

  2. または:このコードは、次のようなものになるだろう(あなたのTextBoxコントロールの正確な名前に応じて、私は架空の名前この例では「txtMyTextBox」を使用しました) TextBoxコントロールには「DefaultValue」プロパティがあります。このプロパティは、デフォルト値として使用する値に設定できます。これらは、デザインモードまたはレイアウトモードでフォームを開き、TextBoxコントロールを選択すると、アクセスウィンドウの右側のプロパティシートから設定できます。 (まだ開いていない場合は、F4キーを押してプロパティシートを開きます)。このすべてが理にかなって、私は願って、とにかく Private Sub SaveBtn_Click() Dim iRecord as Integer iRecord = Me.CurrentRecord Me.Requery DoCmd.GoToRecord , , acGoTo, iRecord End Sub

:あなたは本当に再クエリして、あなたが以前にあった同じレコードに戻りたい場合は

  • しかし、あなたは以下のコードを試みることができますそれが役に立ちます。この回答についてさらにご不明な点がありましたらお知らせください。

  • +1

    これはあまりにもこの説明された答え、はい私は技術を今知っていますありがとう、ありがとう変数の値。私が 'Me.DataForm.Requery'を使用した共鳴は' Me.Requery'で何らかの理由でサブフォームをリフレッシュしていません。私は3番目のオプションを使用するかのようにメソッド1を使用しようとします。すべての値を取得し、いくつかのフィールドの値を取得するだけです。手伝ってくれてありがとう –

    関連する問題