Microsoft Access 掲示板

ダイアログのフォームにあるテキストボックスに値を格納したい / 19

25 コメント
views
4 フォロー
19

非連結にしたい理由は、このフォームを最大15人が同時操作する可能性があり、

そうであるなら、非連結も一つの手段だとは思います。

確認ですが、「最大15人が同時操作」ですが、下記はありえますか。
同じテーブルに対して、複数ユーザーが同時に新規レコード入力
同じテーブルの同じレコードに対して、複数ユーザーによる閲覧、更新、削除の各操作が同時に発生する

上記が発生することがあるなら、非連結で行く場合、これらの制御はかなり難易度が高いですよ。
連結でも、危険性は高いです。
SQLサーバーとかの本格的なデータベースの導入を検討する段階かもしれません。こうなるとさらなるスキル、コストが必要にはなりますが。

===
現状の疑問点は、
非連結「F_依頼入力」で、自動採番のコードがあるということは、これは新規レコードを入力する場合の処理ですよね。
また、「F_依頼履歴一覧」フォームのダブルクリックでそのレコードデータを、「F_依頼入力」に表示させて、そこで更新作業をすることですよね。
この異なる2つの処理(新規追加処理、更新処理)の切り替えはどのようにしているのでしょうか。


とりあえず、「F_依頼履歴一覧」でダブルクリックしたレコードデータを「F_依頼入力」に表示させるコードは下記になります。

'F_依頼入力 の開くときイベント
Private Sub Form_Open(Cancel As Integer)
    Dim fld As DAO.Field
    With Forms!F_依頼履歴一覧.RecordSet
        For Each fld In .Fields
            Me(fld.Name).Value = fld.Value
        Next
   End With
End Sub

「F_依頼入力」上のテキストボックスの名前は、「F_依頼履歴一覧」のレコードソースのフィールド名と同じになっていると仮定した場合のコードです。

非連結だと、入力した後、レコード保存するコードも必要になります。「F_依頼履歴一覧」からダイアログモードで開いているなら、「F_依頼履歴一覧」のレコードセットを直接更新するのが手っ取り早いですね。

'更新ボタンのクリックイベント
Private Sub 更新_Click()
    Dim fld As DAO.Field
    With Forms!F_依頼履歴一覧.RecordSet
        .Edit
        For Each fld In .Fields
            fld.Value = Me(fld.Name).Value
        Next
        .Update
   End With
End Sub

非連結なので、入力値チェック、リンクテーブルがある場合の整合性のチェック、複数ユーザー同時入力に対する排他制御、すべて自前で処理を構築する必要があります。

通報 ...