システムwiki

docmd.showallrecordsを使用してフォームにアクセスする

Richard 受付中 最終更新日:2020-08-19 19:15

すべてのエントリを一覧表示するフォームを開くアプリを作成しました.選択したレコード(または新規)で別のフォームを開くオープンテキストボックスがあります.情報を更新した後、保存コマンドボタンでフォームを閉じます.私の問題は...に戻る方法
更新(追加)されたレコード?開発中、最初のフォームに更新を反映する唯一の方法として "DoCmd.ShowAllRecords"を見つけましたが、データベースの先頭(上部)に再配置されます.更新する他のいくつかのオプション
最初のフォームで、更新されたレコードに残りますか?

返信リスト(回答:5)

1 #
Scottge
こんにちはリチャード、私は独立した顧問です、そして助けようとします.
私はここで少し不明です.そのため、すべてのレコードをリストし、フォームBを使用すると、選択したレコードを更新したり、新しいものを追加したりできます.保存ボタンはどのフォームに閉じますか? AまたはBまたはその両方?
レコードを検索したい場合は、検索コンボボックスを作成できます.ComboBoxウィザードは1つ(3番目のオプション)を作成します.最後に入力されたレコードを取得したい場合は、最も高いID値を探すことができます(使用していると仮定すると仮定します.
AutoNumber PK)
応答1# ->にスキップ
2 #
Richard

保存ボタンはフォームBを閉じます.

フォームBが閉じている場合、保存ボタン(フォームB)は[イベントプロシージャ]を使用します...

プライベートサブコマンドSave_Click()
DoCmd.Save
DoCmd.Close
'DoCmd.RepaintObject acForm、 "Contributions"
DoCmd.ShowAllRecords
End Sub

フォームBが閉じた後、DoCmd.ShowAllRecordsを使用して、フォームAがデータの先頭に配置されます.

自分がなりたい場所に戻るには、ページを下にスクロールする必要があります.

DoCmd.RepaintObjectを試しましたが、新しいレコードが表示されませんでした.

変更/更新前の位置に戻れるようにしたい.

リチャード

3 #
KenSher
このためのコードを書く必要があります.まず、編集または追加されたレコードの主キーを2番目の形式で変数に割り当てる必要があります.次に、最初のフォームを、主キーが変数に格納されているレコードであるレコードと同期させることにより、
最初のフォームのレコードポインタを問題のレコードに移動します.
そのため、コードは2番目のフォームのAfterUpdateイベントプロシージャに移動し、次の行に沿って移動します.
Dim lngID As Long
>Dim frm As Form
lngID=Me.NameOfPrimaryKey
Set frm=Forms( "NameOfFirstForm")
'最初のフォームを再クエリしてレコードセットをリロードし、
'挿入した新しいレコードを含めます
frm.Requery
'最初のフォームのレコードポインターを新しいまたは
'編集済みレコードに移動します.まず、そのRecordsetCloneでレコードを検索し、次にフォームのブックマークを
'RecordsetCloneのブックマークと同期します
With frm.RecordsetClone
.FindFirst "NameOfPrimaryKey ="&lngID
If Not.NoMatch Then
frm.Bookmark=.Bookmark
End If
End With
上記のI 'フォームがバインドされているtableの主キーが長整数データ型の列であると想定しました.おそらく自動採番です.
応答3# ->にスキップ
4 #
Richard

ありがとうございます!

これでうまくいきました.本当にありがとうございます.

Accessについては多くのことを学ぶことができますが、このコミュニティヘルプは素晴らしいものです.

リチャード

5 #
Scottge
OK、まずあなたのコードはあなたが思っていることをしていません.DoCmd.Saveはデータを保存しません.保存するのは、指定されたオブジェクトに対して行われた設計変更です(オブジェクトが指定されていない場合、アクティブオブジェクトで機能します).したがって、必要なのは次のとおりです.
DoCmd.Close、acSaveNO
フォームBを閉じると、フォームAはフォーカスを失ったときと同じレコード位置にあるはずです.しかし、DoCmd.GotoRecordを使用してフォーカスを再配置することもできます.問題は、相対レコード番号を知る必要があることです.