Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


469 / 2272 ツリー ←次へ | 前へ→

【11542】フォーム未入力時のエラー表示について VBA初心者 10/3/18(木) 11:38 質問[未読]
【11543】Re:フォーム未入力時のエラー表示について Nao 10/3/20(土) 13:13 回答[未読]
【11544】Re:フォーム未入力時のエラー表示について VBA初心者 10/3/23(火) 10:48 回答[未読]
【11546】Re:フォーム未入力時のエラー表示について Nao 10/3/25(木) 11:55 回答[未読]
【11548】Re:フォーム未入力時のエラー表示について VBA初心者 10/3/26(金) 16:54 お礼[未読]

【11542】フォーム未入力時のエラー表示について
質問  VBA初心者  - 10/3/18(木) 11:38 -

引用なし
パスワード
   いつもお世話になります。
 伝言用のフォームを作成して共有しようとしております。フォーム記入時に
「記入者」フィールドに入力しないと「入力が不十分です!!」とメッセージを
表示させて、「記入者」フィールドのコントロールにカーソルを合わせたいのですが
「記入者」フィールドがデータ未記入でも「登録しました!!」とメッセージが
表示され、データも登録されてしまいます。
 ない頭で考えてもわかりませんので、どなたかご教授をお願いします。 


Private Sub コマンド20_Click() 'レコード追加処理

On Error GoTo Err_コマンド20_Click

Dim Cn As ADODB.connection
Dim Rs As ADODB.Recordset
  
  Set Cn = New ADODB.connection
  Set Rs = New ADODB.Recordset


  Cn.Open "provider=Microsoft.Jet.OLEDB.4.0;" _
  & "data Source= \\XXX.XX.X.XX\YYY\TEST\TOUROKU_DENGON.mdb"

  Rs.Open "T_DENGON", Cn, adOpenKeyset, adLockOptimistic


  Rs.AddNew
  Rs!HostID = Me!ID
  Rs!コメント = Me!コメント
  Rs!IPアドレス = Me!IP
  Rs!PC名 = Me!Host
  Rs!記入者 = Me!記入者
  

If IsNull(Me!記入者) Then
  MsgBox "入力が不十分です!!"
  DoCmd.GoToControl "記入者"
  Exit Sub
End If
  
Rs.Update
 
  MsgBox "登録しました!!", vbOKOnly, "メッセージ"


Exit_コマンド20_Click:
  Exit Sub

Err_コマンド20_Click:
  MsgBox "すでに登録されています!!"
  Resume Exit_コマンド20_Click


Rs.Close
Cn.Close


End Sub

【11543】Re:フォーム未入力時のエラー表示について
回答  Nao  - 10/3/20(土) 13:13 -

引用なし
パスワード
   まず、エラーチェック等は処理の中ではなく
処理開始時にチェックするべきです。

On Error 文は作成を終結してエラーが無いことを
確認できるまでコメントかした方がいいです。

>Private Sub コマンド20_Click() 'レコード追加処理
>
>Dim Cn As ADODB.connection
>Dim Rs As ADODB.Recordset

>On Error GoTo Err_コマンド20_Click
>
>If IsNull(Me!記入者) Then
>  MsgBox "入力が不十分です!!"
>  DoCmd.GoToControl "記入者"
>  Exit Sub
>End If

質問の件について・・・
おそらく Null ではなく 長さゼロの文字列が入力されると
判定されないのでは?

>If Nz(Me!記入者,"") = "" Then

このように Nz関数に変更するとどうなりますか?

【11544】Re:フォーム未入力時のエラー表示について
回答  VBA初心者  - 10/3/23(火) 10:48 -

引用なし
パスワード
   有難うございます。

>On Error 文は作成を終結してエラーが無いことを
>確認できるまでコメントかした方がいいです。
 はい。処理を完成するまでコメント化します。

>おそらく Null ではなく 長さゼロの文字列が入力されると
>判定されないのでは?
>
>>If Nz(Me!記入者,"") = "" Then
>
>このように Nz関数に変更するとどうなりますか?
 思い通りに処理が動きました。何故何も入力していない
のにNULLではなく、長さゼロの文字列が入力されてしまうの
でしょうか。
 

以上、ご教授をお願いします。

▼Nao さん:
>まず、エラーチェック等は処理の中ではなく
>処理開始時にチェックするべきです。
>
>On Error 文は作成を終結してエラーが無いことを
>確認できるまでコメントかした方がいいです。
>
>>Private Sub コマンド20_Click() 'レコード追加処理
>>
>>Dim Cn As ADODB.connection
>>Dim Rs As ADODB.Recordset
>
>>On Error GoTo Err_コマンド20_Click
>>
>>If IsNull(Me!記入者) Then
>>  MsgBox "入力が不十分です!!"
>>  DoCmd.GoToControl "記入者"
>>  Exit Sub
>>End If
>
>質問の件について・・・
>おそらく Null ではなく 長さゼロの文字列が入力されると
>判定されないのでは?
>
>>If Nz(Me!記入者,"") = "" Then
>
>このように Nz関数に変更するとどうなりますか?

【11546】Re:フォーム未入力時のエラー表示について
回答  Nao  - 10/3/25(木) 11:55 -

引用なし
パスワード
   > 思い通りに処理が動きました。何故何も入力していない
>のにNULLではなく、長さゼロの文字列が入力されてしまうの
>でしょうか。

データベースを直接見ているわけではないので非常に回答が
難しいですね。

これだけの情報ですと
 既定値をセットしている
 どこかで代入している
このくらいしかお答えのしようがないんですが・・・

1つ言えることは入力フィールドのチェックに関しては
IsNull関数を使用するよりNz関数を使用したほうが危険度が
低いということです。

【11548】Re:フォーム未入力時のエラー表示について
お礼  VBA初心者  - 10/3/26(金) 16:54 -

引用なし
パスワード
   ご回答有難うございます。
 今後はご教授いただいた通り、入力フィールドのチェックに関しては
IsNull関数を使用せずにNz関数を使用致します。

大変たすかりました。

▼Nao さん:
>> 思い通りに処理が動きました。何故何も入力していない
>>のにNULLではなく、長さゼロの文字列が入力されてしまうの
>>でしょうか。
>
>データベースを直接見ているわけではないので非常に回答が
>難しいですね。
>
>これだけの情報ですと
> 既定値をセットしている
> どこかで代入している
>このくらいしかお答えのしようがないんですが・・・
>
>1つ言えることは入力フィールドのチェックに関しては
>IsNull関数を使用するよりNz関数を使用したほうが危険度が
>低いということです。

469 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free