回答編集履歴

5

説明の改善

2020/11/11 01:18

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -62,7 +62,7 @@
62
62
 
63
63
 
64
64
 
65
- 一応、「ID」フィールドはオートナンバー型のフィールドしてとしてスルーするようにしてありますが、実際のテーブルに合わせてください。
65
+ 一応、「ID」フィールドはオートナンバー型のフィールドと仮定してスルーするようにしてありますが、実際のテーブルに合わせてください。
66
66
 
67
67
 
68
68
 

4

説明の改善

2020/11/11 01:18

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -58,7 +58,7 @@
58
58
 
59
59
  テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
60
60
 
61
- (テーブルからウィザードで作成してる自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
61
+ (テーブルからウィザードで作成自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
62
62
 
63
63
 
64
64
 

3

修正

2020/11/10 12:11

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -20,9 +20,39 @@
20
20
 
21
21
 
22
22
 
23
- **追記**
23
+ > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
24
24
 
25
+
26
+
27
+ 数値型のフィールドに ""(空文字列)を入力しようとしているのが原因です。
28
+
29
+ 下記のコードでテキストボックスに""を代入せずに、Nullを代入しましょう。
30
+
31
+
32
+
33
+ ```vba
34
+
35
+ For Each cl In Me.Controls
36
+
37
+ With cl
38
+
39
+ If .ControlType = acTextBox Then
40
+
41
+ '.Value = "" 下記に修正
42
+
43
+ .Value = Null
44
+
45
+ End If
46
+
47
+ End With
48
+
49
+ Next cl
50
+
51
+ ```
52
+
53
+ ---
54
+
25
- フィールド数が多い場合のコードの簡潔化
55
+ ##### 追記 フィールド数が多い場合のコードの簡潔化
26
56
 
27
57
 
28
58
 
@@ -64,15 +94,7 @@
64
94
 
65
95
  Next
66
96
 
67
- If NotNull = False Then
97
+ If NotNull = False Then GoTo Exit_Sub
68
-
69
- Rst.Close
70
-
71
- Set Rst = Nothing
72
-
73
- Exit Sub
74
-
75
- End If
76
98
 
77
99
 
78
100
 
@@ -92,46 +114,16 @@
92
114
 
93
115
  Rst.Update
94
116
 
95
- Rst.Close
117
+ MsgBox "登録が完了しました"
96
118
 
97
119
 
98
120
 
121
+ Exit_Sub:
122
+
123
+ Rst.Close
124
+
99
- MsgBox "登録が完了しました"
125
+ Set Rst = Nothing
100
126
 
101
127
  End Sub
102
128
 
103
129
  ```
104
-
105
-
106
-
107
-
108
-
109
- > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
110
-
111
-
112
-
113
- 数値型のフィールドに ""(空文字列)を入力しようとしているのが原因です。
114
-
115
- 下記のコードでテキストボックスに""を代入せずに、Nullを代入しましょう。
116
-
117
-
118
-
119
- ```vba
120
-
121
- For Each cl In Me.Controls
122
-
123
- With cl
124
-
125
- If .ControlType = acTextBox Then
126
-
127
- '.Value = "" 下記に修正
128
-
129
- .Value = Null
130
-
131
- End If
132
-
133
- End With
134
-
135
- Next cl
136
-
137
- ```

2

説明追記

2020/11/10 09:17

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -15,6 +15,90 @@
15
15
 
16
16
 
17
17
  '以下略
18
+
19
+ ```
20
+
21
+
22
+
23
+ **追記**
24
+
25
+ フィールド数が多い場合のコードの簡潔化
26
+
27
+
28
+
29
+ テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
30
+
31
+ (テーブルからウィザードで作成してる自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
32
+
33
+
34
+
35
+ 一応、「ID」フィールドはオートナンバー型のフィールドしてとしてスルーするようにしてありますが、実際のテーブルに合わせてください。
36
+
37
+
38
+
39
+ ```vba
40
+
41
+ Private Sub brn_regi_Click()
42
+
43
+ Dim Rst As DAO.Recordset
44
+
45
+ Set Rst = CurrentDb.OpenRecordset("T_Data", dbOpenTable)
46
+
47
+
48
+
49
+ Dim fld As Variant, NotNull As Boolean
50
+
51
+ For Each fld In Rst.Fields
52
+
53
+ If fld.Name <> "ID" Then
54
+
55
+ If Nz(Me(fld.Name).Value) <> "" Then
56
+
57
+ NotNull = True
58
+
59
+ Exit For
60
+
61
+ End If
62
+
63
+ End If
64
+
65
+ Next
66
+
67
+ If NotNull = False Then
68
+
69
+ Rst.Close
70
+
71
+ Set Rst = Nothing
72
+
73
+ Exit Sub
74
+
75
+ End If
76
+
77
+
78
+
79
+ Rst.AddNew
80
+
81
+ For Each fld In Rst.Fields
82
+
83
+ If fld.Name <> "ID" Then
84
+
85
+ fld.Value = Me(fld.Name).Value
86
+
87
+ Me(fld.Name).Value = Null
88
+
89
+ End If
90
+
91
+ Next
92
+
93
+ Rst.Update
94
+
95
+ Rst.Close
96
+
97
+
98
+
99
+ MsgBox "登録が完了しました"
100
+
101
+ End Sub
18
102
 
19
103
  ```
20
104
 

1

質問に情報追加されたので説明修正

2020/11/10 09:03

投稿

hatena19
hatena19

スコア33757

test CHANGED
@@ -20,14 +20,34 @@
20
20
 
21
21
 
22
22
 
23
+
24
+
23
25
  > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
24
26
 
25
27
 
26
28
 
27
- フィールドのデータ型はなんです
29
+ 数値型のフィールドに ""(空文字列)を入力しようとしているが原因です。
28
30
 
29
- た、値要求、空文字列の許可 の設定はどなってますか
31
+ 下記のコードでテキストボックスに""を代入せずに、Nullを代入ししょう。
30
32
 
31
- また、どのようなエラーがでますか。
32
33
 
34
+
35
+ ```vba
36
+
37
+ For Each cl In Me.Controls
38
+
39
+ With cl
40
+
41
+ If .ControlType = acTextBox Then
42
+
43
+ '.Value = "" 下記に修正
44
+
33
- それによって対応が異なります。
45
+ .Value = Null
46
+
47
+ End If
48
+
49
+ End With
50
+
51
+ Next cl
52
+
53
+ ```