- 締切済み
自動採番
自動採番を、access vbaでしたいのですが、その方法がわかりません。 誰か、ご教授できるかた、お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
【id管理表】 id_name char(32) 主キー final_value long Private Sub Form_BeforeInsert(Cancel As Integer) Me.ID = NewID("perform_id") Cancel = CBool(Me.ID = -1) If Cancel Then StopMsg "ID番号が取得できませんでした。" & _ "システム管理者に報告して下さい。(Form_BeforeInsert)" End If End Sub [id管理表]には、初期値が用意されていなければなりません。そうでないと、NewID関数は、-1を戻します。 初期値さえ設定して「おけば、NewID関数で、テーブル[Perform]の主キー列[ID]の値はシーケンシャルに発生させることが可。 私は、このような採番テーブル【id管理表】と値を取得し更新する関数NewID()を利用しています。 つまり、例でも判るようにテーブル[Perform]とは別に専用の採番テーブルを用意しているということです。 Public Function NewID(ByVal strIDName As String) As Long On Error GoTo Err_NewID Dim N As Long Dim strSQL As String Dim cnn As ADODB.Connection Dim rst As ADODB.Recordset Set cnn = CurrentProject.Connection Set rst = New ADODB.Recordset strSQL = "SELECT final_value FROM id管理表 WHERE id_name='" & strIDName & "'" cnn.Errors.Clear cnn.BeginTrans With rst .Open strSQL, _ cnn, _ adOpenDynamic, _ adLockOptimistic If Not .BOF Then N = .Fields(0) + 1 .Fields(0) = N .Update End If End With cnn.CommitTrans Exit_NewID: On Error Resume Next rst.Close cnn.Close Set rst = Nothing Set cnn = Nothing NewID = N Exit Function Err_NewID: N = -1 If cnn.Errors.Count > 0 Then ErrMessage cnn.Errors(0), strSQL cnn.RollbackTrans Else MsgBox "プログラムエラーが発生しました。システム管理者に報告して下さい。(NewID)", _ vbExclamation, " 関数エラーメッセージ" End If Resume Exit_NewID End Function Public Sub ErrMessage(ByVal CnnErrors As adodb.Error, ByVal strSQL As String) MsgBox "ADOエラーが発生しましたので処理をキャンセルします。" & Chr$(13) & Chr$(13) & _ "・Err.Description=" & CnnErrors.Description & Chr$(13) & _ "・Err.Number=" & CnnErrors.Number & Chr$(13) & _ "・SQL State=" & CnnErrors.SQLState & Chr$(13) & _ "・SQL Text=" & strSQL, _ vbExclamation, " ADO関数エラーメッセージ" End Sub
- CHIPDALE77
- ベストアンサー率21% (47/223)
これだけじゃ答えようがないかな… どこから自動採番かを書かないと。 たとえばフォームのテキストボックスの値だとか DBの最大値+1だとか 日付からだとか。