2016-07-11 7 views
0

私はPOとPO_LIと呼ばれる2つのテーブルを持っています。 POには主キーであるPO#という列があり、PO_LIのPO#列と1対多の関係にあります(1はPOにあります)。 PO_LIでは、他の列はLine#、Description、LineAmountです。プライマリキーの値が変更された後に、自動再起動された列の再起動の値は1からですか?

新しいPO#ごとに番号を1に戻すにはどうすればよいですか?
オートナンバーを使用している間にこれを行うことはできますか?
これはms-access GUIで実行できますか、またはVBAコードが必要ですか?

+0

http://stackoverflow.com/questions/20738596/how-to-reset-an-access-tables-autonumber-field-it-didnt-start-from-1 – marlan

答えて

1

[オートナンバー型]フィールドを手動で編集したり、開始値を変更することはできません。あなたの最善の策はおそらくVBAを使って最大行番号を取得し、それを増分することです。新しいPOを使用している場合は1から始まります。POフィールドのAfterUpdateイベントにこのVBAを入れます。

あなたはこのような何かを行うことができます:

Dim db as Database 
Dim rec as Recordset 
Dim rec2 as Recordset 
Dim MyVal as Integer 

Set db = CurrentDB 
Set rec = db.OpenRecordset("Select LineNum from MyTable where PO = '" & Me.txtPO & "' group by PO") 

'If there are no records returned, start at 1. Otherwise, increment. 
If rec.EOF = true then 
    MyVal = 1 
else 
    Set rec = db.OpenRecordset("Select Max(LineNum) from MyTable where PO = '" & Me.txtPO & "'") 
    MyVal = rec(0) + 1 
endif 

MyValは、今あなたがLINENUMに書き込みます番号です。もちろん、フォームやテーブルに実際に存在するものになるように変数などを変更する必要がありますが、そのアイディアを得るべきです。

+0

私も同じ行に沿って考えていましたが、データエントリに古いPOと異なるPOがあるかどうかを確認するにはどうすればよいですか?私はPO#列からすべての値を取得し、それらの値のそれぞれを新しいものと比較するためにSQL文を使用する必要がありますか?それが最も効率的な解決策ではないようです。現時点では、あまりデータがないので問題はありませんが、将来問題が発生する可能性があります。 – Michael

+0

更新された回答をご覧ください。 –

+0

または 'Nz(DMax(" LineNum "、" MyTable "、" PO = '"&Me.txtPO&"' ")、0)+ 1'のように1行で入力します。 Nz()を使うと、if-then-elseの必要はありません。何もないMaxはNULLです。 – Andre

関連する問題