こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

フォームを利用したデータ登録について。

フォームを利用したデータ登録について。

環境:ACCESS2000

状況:フォーム(登録フォーム)
   フォーム上コントロール
    テキストボックス(品番頭、品番start、品番last、サイズ、商品名)
    コマンドボタン(登録ボタン)

   テーブル(商品マスター)
   フィールド(品番  /  サイズ  /  商品名)

仕様: 登録フォームに必要事項を入れ、テーブルに新規データ追加をする。
   その際、品番頭と品番startとを合体させ、テーブル品番フィールドに登録。
   また連番の場合、品番startから品番lastまでの数字をそれぞれ品番頭と合体させ
   サイズと商品名を登録する。
   ※品番lastが空白の場合、無視し品番startのみ適用する。

コード:

Private Sub 登録ボタン_Click()
 Dim db As DAO.Database
 Dim rs As DAO.Recordset
 Dim i As Long

 Set db = CurrentDb
 Set rs = db.OpenRecordset("商品マスター", dbOpenDynaset)

If Not IsNull(Me!品番last) Then
 For i = Val(Me!品番start) To Val(Me!品番last)
  rs.AddNew
   rs!品番 = Me!品番頭 & CStr(i)
   rs!サイズ = Me!サイズ
   rs!商品名 = Me!商品名
  rs.Update
 Next i

ElseIf IsNull(Me!品番last) Then
  rs.AddNew
   rs!品番 = Me!品番頭 & Val(Me!品番start)
   rs!サイズ = Me!サイズ
   rs!商品名 = Me!商品名
  rs.Update
End If

 rs.Close
  Set rs = Nothing
 db.Close
  Set db = Nothing

MsgBox "登録完了"
End Sub

今回新規データ追加作業をしていたところ、なぜかエラーは起きず
メッセージまででているのですが、テーブルを開けて確認すると
登録されてない事がたびたびあり、原因がわからないため
質問させて頂きました。

コードがおかしい、これが足りない等正確に動かすために
色々教えて頂ければと思います。

投稿日時 - 2010-05-06 17:54:35

QNo.5875896

すぐに回答ほしいです

質問者が選んだベストアンサー

たしか環境はAccess2000でしたね。
私のAccess2000の環境では以下のいずれも正常に
動作します。


If Not IsNull(Me!品番last) Then
If Not IsNull(Me![品番last]) Then
If Me!品番last = "" Then
If Me![品番last] = "" Then

これはどうですか、

If Not IsNull(Me!品番last.Value) Then
If Not IsNull(Me![品番last].Value) Then

一応環境を述べますと、
WinXP Access2000 SP-3
WinXp Pro Access2000 SP-3

その他のAccessのバージョンも同様です。
IsNullは正常に動作する必要のある関数
ですが、ただIsNullに関し以下のような
こともあるらしいのですが。

http://www.accessclub.jp/bbs/0070/beginers26630.html

Val関数については性質をつかんでいればいいです。
Val("Access2000")とVal("2000Access")の場合など。

一応デバッグしたときのコード。まだデバッグ
する項目が抜けていますが。
Valも入れたり入れなかったりはしています。
少々デバッグ方法も手抜きですが。

Private Sub 登録ボタン_Click()
Dim db As Database
Dim rs As Recordset
Dim i As Long
Dim s As String

On Error GoTo ER_HA
If IsNumeric(Me!品番start) Then
MsgBox ("品番startに数値が入っています")
Else
MsgBox ("品番startに数値以外が入力されています")
End If

If IsNumeric(Me!品番last) Then
MsgBox ("品番lastに数値が入っています")
Else
MsgBox ("品番lastに数値以外が入力されています")
End If


Set db = CurrentDb
Set rs = db.OpenRecordset("在庫マスター", dbOpenDynaset)


If Not IsNull(Me!品番last) Then
' If Not IsNull(Me![品番last]) Then
' If Me!品番last = "" Then
' If Me![品番last] = "" Then
' If Not IsNull(Me!品番last.Value) Then
' If Not IsNull(Me![品番last].Value) Then

For i = Me!品番start To 品番last
With rs
rs.AddNew
rs!品番 = Me!品番頭 & CStr(i)
rs!商品名 = Me!商品名
rs!サイズ = Me!サイズ
MsgBox ("品番 =" & Me!品番頭 & CStr(i) & vbCrLf & "商品名 =" & Me!

商品名 & vbCrLf & "サイズ =" & Me!サイズ)
rs.Update
End With
Next i
ElseIf IsNull(Me!品番last.Value) Then
rs.AddNew
rs!品番 = Me!品番頭 & Me!品番start
rs!サイズ = Me!サイズ
rs!商品名 = Me!商品名
MsgBox ("品番 =" & Me!品番頭 & Val(Me!品番start) & vbCrLf & "商品

名 =" & Me!商品名 & vbCrLf & "サイズ =" & Me!サイズ)

rs.Update
End If
ER_HA:
If Err.Number <> 0 Then
MsgBox (Err.Number & vbCrLf & Err.Description)
End If

rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Sub

何か役に立てば。(立つほどのもはありませんが)

投稿日時 - 2010-05-07 19:27:05

お礼

ありがとうございます。

IsNullに関して、ヘルプ等良く確認して見直してみます。

たぶん書き方が上手くなかっただけだと思うので・・・。

また、デバッグまで教えて頂き感動です。

今回のDBは、とりあえず全て組み上げてから
デバッグに手をつけようと思っており
まだ手が届いてなかったので、上記参考にさせて頂きます。
本当に助かります。

投稿日時 - 2010-05-08 09:18:30

このQ&Aは役に立ちましたか?

12人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

ACCESSが使える環境にないので■一般論■ですが。。。。

TEXTBOXは文字列が入力されるところですから
未入力(初期値)がNULL値とは考えられないので
未入力判定にはIsNullは使えない、ということでは?


それから質問者のコードでちょと気になったところ、、
  If Not IsNull(Me!品番last) Then
 ▲ElseIf IsNull(Me!品番last) Then
  End If
▲は、単に、Elseのみでいいかと、、

また同じようなコードはひとつに纏めて。。
'------------------------------------------- 
 Dim LastNo As Long

 If Me!品番last = "" Then
    LastNo = Val(Me!品番start)
 Else
    LastNo = Val(Me!品番last)
 End If

 For i = Val(Me!品番start) To LastNo
    rs.AddNew
    rs!品番 = Me!品番頭 & CStr(i)
    rs!サイズ = Me!サイズ
    rs!商品名 = Me!商品名
    rs.Update
 Next i
'----------------------------------
●実際には、品番startが未入力、0、数値でない文字列とか
品番startが品番lastより大きい、などのエラーチェックが必要になるかと。

●ISNULLのヘルプをじっくり眺めてみることをお勧めします。
以上です。

投稿日時 - 2010-05-07 12:06:04

ANo.1

具体的にどのような入力をしたとき、どのような
登録漏れが起こるのかの情報を追加してください。

また、

MsgBox ("品番 =" & Me!品番頭 + CStr(i) & vbCrLf & "サイズ =" & Me!サイズ & vbCrLf & "

商品名 =" & Me!商品名)


MsgBox ("品番 =" & Me!品番頭 & Val(Me!品番start) & vbCrLf & "サイズ =" & Me!サイズ &

vbCrLf & "商品名 =" & Me!商品名)


をそれぞれrs.UpDateの直前に入れてデータを確認してみてください。
ところでVal(Me!品番start) To Val(Me!品番last)のようにValをつけて
いるのは何か意味があるのですか。
今のところこのような感じですが。

投稿日時 - 2010-05-07 00:23:55

補足

piroin654さんありがとうございます。

登録漏れは、登録しようとフォームに入れたデータまるまるです。
たぶん If文~ が反応してないのでは・・・と自分では疑ってました。

今回ご提示頂いたメッセージボックスをrs.Updateの前に入れたところ
メッセージはでませんでした。

やはりIf文が反応してないと思い、
If IsNull(Me!品番last) Then
     ↓
If Me!品番last = "" Then
に変更してみたところ、メッセージはでました。
そしてデータも登録されていました。

これは文法等なにがいけなかったのか・・・・。
ご教授願えればと思います。

Val関数は、以前 Me!品番startだけにしていた時、
うまく動作しなく、数値型に指定した方が・・・という事があり
使用しています。
※品番start & last は数字3~5桁なので。

投稿日時 - 2010-05-07 09:03:31

あなたにオススメの質問