teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

説明の改善

2020/11/11 01:18

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -30,7 +30,7 @@
30
30
  テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
31
31
  (テーブルからウィザードで作成すると自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
32
32
 
33
- 一応、「ID」フィールドはオートナンバー型のフィールドしてとしてスルーするようにしてありますが、実際のテーブルに合わせてください。
33
+ 一応、「ID」フィールドはオートナンバー型のフィールドと仮定してスルーするようにしてありますが、実際のテーブルに合わせてください。
34
34
 
35
35
  ```vba
36
36
  Private Sub brn_regi_Click()

4

説明の改善

2020/11/11 01:18

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -28,7 +28,7 @@
28
28
  ##### 追記 フィールド数が多い場合のコードの簡潔化
29
29
 
30
30
  テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
31
- (テーブルからウィザードで作成してる自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
31
+ (テーブルからウィザードで作成自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
32
32
 
33
33
  一応、「ID」フィールドはオートナンバー型のフィールドしてとしてスルーするようにしてありますが、実際のテーブルに合わせてください。
34
34
 

3

修正

2020/11/10 12:11

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -9,9 +9,24 @@
9
9
  '以下略
10
10
  ```
11
11
 
12
- **追記**
13
- フィールド数場合のコドの簡潔化
12
+ > ◎テキストボックスの入力項目で、全ての項目埋まってなくてもエラが出ず登録される
14
13
 
14
+ 数値型のフィールドに ""(空文字列)を入力しようとしているのが原因です。
15
+ 下記のコードでテキストボックスに""を代入せずに、Nullを代入しましょう。
16
+
17
+ ```vba
18
+ For Each cl In Me.Controls
19
+ With cl
20
+ If .ControlType = acTextBox Then
21
+ '.Value = "" 下記に修正
22
+ .Value = Null
23
+ End If
24
+ End With
25
+ Next cl
26
+ ```
27
+ ---
28
+ ##### 追記 フィールド数が多い場合のコードの簡潔化
29
+
15
30
  テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
16
31
  (テーブルからウィザードで作成してる自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
17
32
 
@@ -31,11 +46,7 @@
31
46
  End If
32
47
  End If
33
48
  Next
34
- If NotNull = False Then
49
+ If NotNull = False Then GoTo Exit_Sub
35
- Rst.Close
36
- Set Rst = Nothing
37
- Exit Sub
38
- End If
39
50
 
40
51
  Rst.AddNew
41
52
  For Each fld In Rst.Fields
@@ -45,25 +56,10 @@
45
56
  End If
46
57
  Next
47
58
  Rst.Update
59
+ MsgBox "登録が完了しました"
60
+
61
+ Exit_Sub:
48
62
  Rst.Close
49
-
50
- MsgBox "登録が完了しました"
63
+ Set Rst = Nothing
51
64
  End Sub
52
- ```
53
-
54
-
55
- > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
56
-
57
- 数値型のフィールドに ""(空文字列)を入力しようとしているのが原因です。
58
- 下記のコードでテキストボックスに""を代入せずに、Nullを代入しましょう。
59
-
60
- ```vba
61
- For Each cl In Me.Controls
62
- With cl
63
- If .ControlType = acTextBox Then
64
- '.Value = "" 下記に修正
65
- .Value = Null
66
- End If
67
- End With
68
- Next cl
69
65
  ```

2

説明追記

2020/11/10 09:17

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -9,7 +9,49 @@
9
9
  '以下略
10
10
  ```
11
11
 
12
+ **追記**
13
+ フィールド数が多い場合のコードの簡潔化
12
14
 
15
+ テーブルのフィールド名とフォーム上のテキストボックス名は同じにしておく。
16
+ (テーブルからウィザードで作成してる自動で同じ名前にしてくれるので楽、その後、コントロールソースとレコードソースを削除)
17
+
18
+ 一応、「ID」フィールドはオートナンバー型のフィールドしてとしてスルーするようにしてありますが、実際のテーブルに合わせてください。
19
+
20
+ ```vba
21
+ Private Sub brn_regi_Click()
22
+ Dim Rst As DAO.Recordset
23
+ Set Rst = CurrentDb.OpenRecordset("T_Data", dbOpenTable)
24
+
25
+ Dim fld As Variant, NotNull As Boolean
26
+ For Each fld In Rst.Fields
27
+ If fld.Name <> "ID" Then
28
+ If Nz(Me(fld.Name).Value) <> "" Then
29
+ NotNull = True
30
+ Exit For
31
+ End If
32
+ End If
33
+ Next
34
+ If NotNull = False Then
35
+ Rst.Close
36
+ Set Rst = Nothing
37
+ Exit Sub
38
+ End If
39
+
40
+ Rst.AddNew
41
+ For Each fld In Rst.Fields
42
+ If fld.Name <> "ID" Then
43
+ fld.Value = Me(fld.Name).Value
44
+ Me(fld.Name).Value = Null
45
+ End If
46
+ Next
47
+ Rst.Update
48
+ Rst.Close
49
+
50
+ MsgBox "登録が完了しました"
51
+ End Sub
52
+ ```
53
+
54
+
13
55
  > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
14
56
 
15
57
  数値型のフィールドに ""(空文字列)を入力しようとしているのが原因です。

1

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

2020/11/10 09:03

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -9,9 +9,19 @@
9
9
  '以下略
10
10
  ```
11
11
 
12
+
12
13
  > ◎テキストボックスの入力項目で、全ての項目が埋まっていなくてもエラーが出ず登録される
13
14
 
14
- フィールドのデータ型はなんです
15
+ 数値型のフィールドに ""(空文字列)を入力しようとしているが原因です。
16
+ 下記のコードでテキストボックスに""を代入せずに、Nullを代入しましょう。
17
+
18
+ ```vba
15
- また、値要求、空文字列の許可 の設定はどうなってますか。
19
+ For Each cl In Me.Controls
20
+ With cl
16
- また、どのようなエラーがでますか。
21
+ If .ControlType = acTextBox Then
22
+ '.Value = "" 下記に修正
17
- それによって対応が異なります。
23
+ .Value = Null
24
+ End If
25
+ End With
26
+ Next cl
27
+ ```