2

MS Access でストップウォッチを作成する方法があるかどうかは誰にもわかりませんか? 誰かが特定のフォームの「新しい」レコードをクリックした時点でストップウォッチを「開始」し、フォームに入力された情報を保存した時点でストップウォッチを「終了」させる方法を探していますか? 理想的には、テーブルの各レコードに対して、フォームの作成にかかった時間を表示する列を追加したいと考えています。

提案/アイデアはありますか?

4

2 に答える 2

2

これを試してくださいonClickを「new」に設定し、単純なifステートメントを挿入して、保存アクションで停止できるようにすることができます

于 2012-04-09T15:02:25.417 に答える
2

新しいボタンをクリックすると、フォームのOn Currentイベントが発生します。NewRecordフォームのプロパティを調べることで、現在のレコードが新しいレコードか既存のレコードかを区別できます。

という名前の Long Integer フィールドseconds_for_insertをテーブルに追加しました。次に、レコード ソースがそのテーブルに基づくクエリであるフォームを作成しました。フォームには、レコード ソースフィールドtxtSeconds_for_insertにバインドされたテキスト ボックス名が含まれています。seconds_for_insertここに私のフォームのコードがあります:

Option Compare Database
Option Explicit
Dim blnNewRecord As Boolean
Dim dteStartTime As Date

Private Sub Form_BeforeInsert(Cancel As Integer)
    Me.txtSeconds_for_insert = DateDiff("s", dteStartTime, Now())
End Sub

Private Sub Form_Current()
    blnNewRecord = Me.NewRecord
    If blnNewRecord Then
        dteStartTime = Now()
    End If
End Sub

ソース テーブルにオートナンバー型フィールドが含まれている場合、バインドされたコントロールのいずれかに何かを入力するとすぐに、Access によって新しいレコードが保存されます。その「新しい」レコードに追加する残りのデータは、挿入操作ではなく更新で保存されます。したがって、そのような状況では、Form_BeforeUpdate代わりに を使用しForm_BeforeInsertます。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If blnNewRecord Then
        Me.txtSeconds_for_insert = DateDiff("s", dteStartTime, Now())
    End If
End Sub

これtxtSeconds_for_insertが機能するために、テキスト ボックスを有効にしたり、表示したりする必要はありません。ユーザーの注意をそらさないようにするため、またはその情報を追跡していることをユーザーに知られたくない場合は、Visible = No に設定することをお勧めします。

于 2012-04-09T18:29:17.287 に答える