Access VBA質問箱 IV

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

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


415 / 9994 ←次へ | 前へ→

【12892】Re:リスト外データをテーブルに追加する
お礼  まき  - 15/10/16(金) 17:07 -

引用なし
パスワード
   早速のご回答ありがとうございます

>ところで、このコードですが、「strNewData2 = vbNullString」という式が成り>立つ限り、
>While...Wend間がループされるというものです。・・・

ここは氏名フィールドに値が入っていない場合と認識していました。なので、値が入っていないのは今登録しようとしているレコードのみなのでそれでいいのかな?と思っていました。
で、入力されないままだとここは入力必須だよと入力を促して、入力されないままなら強制的に終わらせるということでした。


>次に、vbNullStringという定数です・・・
>「strNewData = Null」という条件式が成り立つことはあり得ません。
> なので、「While (strNewData = Null)」から「Wend」までのコードが実行され>ることも
>絶対にありません。
> まず、Nullであるかどうかは、「=」では調べられません。IsNull関数を使いま>す。
> 次に、strNewDataは、長整数型の変数ですから、Nullを格納できません。
> なので、「strNewData = Null」という条件式が成り立つことは絶対にありませ>ん。

自分自身空欄というものにはいつも悩まされています、Nullは長整数型のフィールドには格納できないのですね。

ご指摘の件を見直しまして下記のように書き換えたらうまくいきました。

Private Sub 氏名_NotInList(NewData As String, Response As Integer)
  Dim strNewData As String
  Dim strMessage As String
  Dim strNewData2 As String

  While (strNewData = vbNullString)
    strNewData = InputBox("管理IDを入力してください。")
     If (strNewData = vbNullString) Then
       strMessage = "管理IDは必須です。" & vbCrLf _
            & "新しいデータの登録を中止しますか?"
      GoSub StopOrContinue

     ElseIf DCount("*", "社員名簿", "管理ID=" & strNewData) Then
      strNewData = vbNullString
      strMessage = "同じ管理IDが登録済みです。" & vbCrLf _
            & "新しいデータの登録を中止しますか?"
      GoSub StopOrContinue
     End If
  Wend
  
  While (strNewData2 = vbNullString)
    strNewData2 = InputBox("社員コードを入力してください。")
     If (strNewData2 = vbNullString) Then
        strMessage = "社員コードは必須です。" & vbCrLf _
             & "新しいデータの登録を中止しますか?"
      GoSub StopOrContinue
     ElseIf DCount("*", "社員名簿", "社員コード= '" & strNewData2 & "'") Then
      strNewData2 = vbNullString
      strMessage = "同じ社員コードが登録済みです。" & vbCrLf _
            & "新しいデータの登録を中止しますか?"
      GoSub StopOrContinue
     End If
  Wend
  
  CurrentDb.Execute _
     "INSERT INTO 社員名簿 ( 管理ID, 社員コード, 社員名 )" _
    & " VALUES ('" & strNewData & "', '" & strNewData2 & "', '" & NewData & "');"
  Response = acDataErrAdded

ExitProcedure:
  Exit Sub

StopOrContinue:
   If (vbYes = MsgBox(strMessage, vbYesNo + vbQuestion)) Then
    Response = acDataErrContinue
    Exit Sub
   End If
   Return
End Sub

ただ、動いているというだけでおかしなコードかもしれませんが、取りあえずご報告させていただきます。
289 hits

【12890】リスト外データをテーブルに追加する まき 15/10/15(木) 16:01 質問[未読]
【12891】Re:リスト外データをテーブルに追加する かるびの 15/10/15(木) 21:11 回答[未読]
【12892】Re:リスト外データをテーブルに追加する まき 15/10/16(金) 17:07 お礼[未読]

415 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078190
(SS)C-BOARD v3.8 is Free