Access2000で株主管理DBを作成中です。
【テーブル名】T_株券管理
【フォーム名】F_株主入力
【フィールド名】株主ID(テキスト型)(主キー)
フォームに入力する際にオートナンバーを使用せずに、
レコードが切り替わると「株主ID」が「00001」「00002」「00003」・・・・というように1づつ発番されるようにしたく、AccessVBAの本を読んだり、ネットでDmax等調べているのですが、必要な情報が探せずに困っています。お手数ですが教えて頂けますでしょうか。よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
<id管理表>
id_name______final_value
employee_____0
perform_id___12
仕入先_id____10
こういう、いわゆる<採番テーブル>を用意するのも一つの方法です。
最大値を取得して+1するよりも、ネットワークの負担は軽いからです。
Private Sub 仕入先名_BeforeUpdate(Cancel AS Integer)
Dim strShiiresaki AS String
Dim strWhere AS String
strShiiresaki = Nz(Me.仕入先名, "")
strWhere = "仕入先名='" & strShiiresaki & "' AND id<>" & Me.ID
Cancel = CBool(DBLookup("id", "仕入先", strWhere, 0) <> 0)
If Cancel Then
Message "[仕入先名]が重複しています。" & chr$(13) & chr$(13) & _
"・{Esc}{Esc} で入力を取り消すことができます。"
ElseIf isNewRecord And Me.ID = 0 Then
Me.ID = NewID("仕入先_id")
SetFieldEnabled Me, True
End IF
End Sub
これは、仕入先マスターの[ID]を実際に取得しているコードです。
ここでは、NewID() を使用しています。
NewID()は、最終の番号に+1して<id管理表>を更新すると共にその値を戻しています。
取得するための SQL 文を埋め込んでいますが、準システム関数みたいなものだから構いません。
rst、cnn の破棄コードは不可欠ではありませんので抜いてもいいです。
一応、エラートラップも仕組んでいますが、これが働く場面はないでしょう。
いわば、おまじないみたいなものです。
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- クーポン・割引券 株主割引券(JAL) 3 2022/11/13 16:04
- その他(データベース) accessでのフォームの連携について 2 2022/06/14 00:45
- ヤフオク! ヤフーアカウントについての質問です。 「不正利用が疑われる操作もしくは行為が検知されたため、利用規約 5 2022/08/29 20:22
- Access(アクセス) Accessで予定表を作成しようとしてます。 テーブル フィールド名 連番 オートナンバー型 年月日 2 2023/07/23 11:40
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのmaxで求めた値を変数に代...
-
struts selectbox optionsColle...
-
Doctrineのjoinについて
-
プルダウン内容に応じてラジオ...
-
JavaScriptでtabindexの変更っ...
-
Selenium4でボタンをクリックで...
-
階層別の組織図の自動作成について
-
マスターページ使用時のJavascript
-
EUC-JPに対応しているjQueryを...
-
画面(ウィンドウ)/画像の拡...
-
Ajax サーバーに負荷かかります...
-
JavascriptからPHPへのAjax通信...
-
Ajaxの結果のページングの方法
-
一定時間ごとに表示内容を切り...
-
jQueryを使いformでsubmitした...
-
jqueryについて、$("+dd",this)...
-
CSVファイルの文字列の表示につ...
-
Googleストリートビューの写真...
-
リンク元のファイル名を表示し...
-
jQuery.illuminateの使い方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javascriptを使ってQRコード読...
-
JavaScriptでtabindexの変更っ...
-
SQLのmaxで求めた値を変数に代...
-
パソコンで動くjavascriptがス...
-
IndexedDB を使ってファイルア...
-
Selenium Basicの件
-
ドラッグ & ドロップでのド...
-
<input>のvalue値をプルダウン...
-
HTMLタグのidにaaaという名をつ...
-
jquery.csv2table.jsに検索窓
-
プルダウン内容に応じてラジオ...
-
チェックボックスとラジオボタ...
-
javascriptの計算結果をvalue=""に
-
Javascript+PHPでのデータの受...
-
ボタンクリックした際、id末尾...
-
複数対応できるチェックボック...
-
VBAでIEのHTMLタグの要素を操作...
-
Doctrineのjoinについて
-
jQueryのclass属性削除ができま...
-
メールを送信するボタンでOutlo...
おすすめ情報