1

今回はアクセスの質問です。特定のテーブルにバインドされたフォームがあり、[保存] ボタンをクリックすることで、このフォームに新しいエントリの追加 (編集や削除ではなく) のみを許可したいと考えています。最初の問題は、テキストボックスの編集中にレコードが更新されたことです。私が持っているソリューションにはいくつかの問題があります

Option Compare Database
Option Explicit

Private bSaveRecord As Boolean

Private Sub btCreateRecord_Click()
   bSaveRecord = True
   Me.tblUMgmtUser_UserDetailsID.Value = Me.tblUMgmtUserDetails_UserDetailsID.Value
   Me.tbSetUserHashPW = "12312"
   Me.cbSetInitPW = True
   DoCmd.GoToRecord , , acNext
End Sub

Private Sub btResetRecord_Click()
    ResetRecord
End Sub

Private Sub Form_AfterUpdate()
    bSaveRecord = False
End Sub

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Not bSaveRecord Then
        Cancel = True
        Me.Undo
    End If
 End Sub

Private Sub Form_Load()
    Me.Username.SetFocus
    DoCmd.GoToRecord , , acNewRec
    bSaveRecord = False
End Sub

 Private Sub ResetRecord()
    Dim cControl As Control

    bSaveRecord = False
    For Each cControl In Me.Controls
        If cControl.Name Like "Text*" Then cControl = vbNullString
    Next
    Me.cbResponsible.Value = False
    Me.Undo
End Sub

問題 1: 自動的に生成したいレコードに値を保存するために非表示のテキスト ボックスを追加する必要がある

問題 2: 以前にレコードを追加していなくても、フォームを開くたびに ID 列がカウントアップする

一般的に言えば、私のソリューションは非常に堅牢でエレガントではありません。どんな提案でも大歓迎です

どうもありがとうジョン

4

2 に答える 2

1

データ入力フォームをターゲット テーブルに直接バインドしています。その結果、ユーザーがデータを入力すると、新しいレコードの作成を含め、テーブルが直接編集されます。これが、ID が自動インクリメントする理由です (ユーザーがすぐに新しいレコードを作成しているため)。現在の部分的な回避策は、非表示のテキスト ボックスを使用して値を格納することです。

データ入力フォームの目標は、一般的なシナリオのように聞こえます。これを試して:

  1. まず、ターゲット テーブルをフォームのソースとして設定しないでください。今のところソースを空白のままにして、すべてのフィールドをバインド解除します。それらは分離されているため、ユーザーはデータを入力するだけで既存のレコードを編集したり、新しいレコードを追加したりすることはできません。実際、ユーザーがデータを入力しただけでフォームを閉じても何も起こりません。

  2. さあ、保存ボタンを作ってみましょう。このボタンは、データを検証して目的のデータであることを確認してから、SQL 挿入クエリを作成して実行し、データをターゲット テーブルに追加します。

于 2013-07-11T16:17:03.370 に答える