- ベストアンサー
アクセス2002 新番号割当とテーブルのデータ追加
教えてください。 フォーム内にあるボタンに以下のイベントプロシージャーが入っています。 このボタンで行いたいことは、 1.フォーム内に「入力したデータ」に新しい「番号」(PS-0000001から始まり、1ずつ増える)をつけ、 2.abcdeのテーブルに、「入力したデータ」と「番号」を書き込む ========イベント======= Dim DB As Database Dim ts As DAO.Recordset Set DB = CurrentDb() Set ts = DB.OpenRecordset("T_abcde", dbOpenDynaset) If ts.EOF Then txtFileNo = "PS-0000001" Else ts.MoveLast txtFileNo = "PS-" & Format(ts!No + 1, "0000000") End If ts.Close DB.Close ===イベントここまで=== フォームにデータを入れて2回まではうまくできるのですが、3回目以降は番号は更新されずabcdeへのデータもどんどん上書きされてしまいます。 意味通じましたでしょうか? よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
はじめまして。 ts.MoveLastのところを、 ts.Addnewにして、 txtFileNo = "PS-" & Format(ts!No + 1, "0000000") の後に、ts.Update を追加してみてください。 自信はありませんが^^;
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
Private Sub コマンド0_Click() Dim db As DAO.Database Dim ts As DAO.Recordset Set db = CurrentDb() Set ts = db.OpenRecordset("名簿1", dbOpenDynaset) ts.MoveFirst n = ts!番号 MsgBox n p01: ts.MoveNext If ts.EOF Then m = Mid(n, 4, 7) MsgBox m ts.AddNew ts!番号 = "PS-" & Format(Val(m) + 1, "0000000") MsgBox ts!番号 ts.Update GoTo p02 Else n = ts!番号 MsgBox n GoTo p01 End If '----- p02: ts.Close db.Close End Sub ----------- 試行錯誤したのでMsgBoxが入っていますが省いてください。 AddNew,Updateが要るのではないですか。それに番号をテキスト型にしたので、+1するにはVal()が必要でしょう。2002でテスト済み。 AddNewのあとはts.Editは不要のようです。
お礼
いろいろテストしていただいたようで、ありがとうございました。 番号は加算されるのですが、リストにどうしても追加されず、もう少し頑張ってみます。
補足
ごめんなさい。別プログラムにミスがありました。 これで完璧です。ありがとうございました!
お礼
早速の回答ありがとうございます。 番号は加算されるのですが、ときどき2加算されたり、またabcdeへのデータも画面を開いたとき最初に入力したものだけでした。 参考にして、修正してみたいと思います。
補足
ごめんなさい。別にプログラムミス発見。リストに表示できていました。ありがとうございました!