1
Private Sub Form_Current()
Dim bytoffcut As Byte
Dim strCriteria
strCriteria = "[WOID] = " & Forms![frmAddStockBooking]![MouldWO]

bytoffcut = Nz(DMax("OffcutNo", "dbo_tblOffcuts", strCriteria), 0) + 1
MsgBox bytoffcut
Me.txtOffcut.Value = bytoffcut

Me.WOID.Value = Forms![frmAddStockBooking]![MouldWO]
Me.txtdate.Value = Now()

End Sub

これが機能しない理由を誰かに教えてもらえますか? 変数は、新しいレコードを作成すると bytoffcut が 1 ずつ増加する期待どおりに動作しています。しかし、テーブルをチェックすると、txtOffcut にバインドされたフィールドは、インクリメントされた値ではなく 1 を読み取ります。

編集: このコードは、フォームの On current プロパティで使用されています。フォームのボタンを使用して新しいレコードを作成すると、Dmax を使用してテーブル内の最高のオフカット No 値が検索され、それに 1 つ追加されます。

これは、offcut no txtbox がインクリメントするにつれて、フォームで機能するように見えます。しかし、オフカットが増加するレコードを持つ代わりにテーブルを見ると、代わりにすべてのレコードが1を読み取りました

4

3 に答える 3

2

特に、に使用可能なインデックスがない大きなリンクテーブルのDMax()場合は、式を1回だけ評価することをお勧めします。dbo_tblOffcuts[WOID]

DMax()式がNullを返すことができる場合は、を使用Nz()してNullをゼロに変換します。次に、1つ追加します。

Dim bytoffcut As Byte
Dim strCriteria
strCriteria = "[WOID] = " & Forms![frmAddStockBooking]![MouldWO]
'Debug.Print strCriteria '
bytoffcut = Nz(DMax("OffcutNo", "dbo_tblOffcuts", _
    strCriteria), 0) + 1
MsgBox bytoffcut
Me.txtOffcut.value = bytoffcut

これにより、他のユーザーが編集しているときに必要なものが得られない場合がありますdbo_tblOffcuts

于 2012-08-01T18:02:49.177 に答える
2

テーブルの WOID フィールドがテキストや日付ではなく数値型であると仮定して、このように DMax で where 句を送信してみてください。

"[WOID] = " & Forms![frmAddStockBooking]![MouldWO]
于 2012-08-01T15:44:41.860 に答える
0

書き込み先のテーブルの主キーを作成することで、複数のレコードが更新される問題を解決できました。

Access はレコードを一意に識別できなかったため、条件に一致するすべてのレコードを編集するか、同類の何かを編集することになると思います。私自身、よくわかりません。

于 2012-08-07T12:41:31.010 に答える