• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:フォームを利用したデータ登録について。)

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

このQ&Aのポイント
  • フォームを利用してACCESS2000にデータを登録する方法について説明します。
  • 登録フォームに必要事項を入力し、新規データをテーブルに追加します。品番を生成して登録する手順や連番の場合の処理についても解説します。
  • 質問者がコードを実行しても登録がされない問題が発生しています。コードの修正や確認すべきポイントについてアドバイスが欲しいとのことです。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

たしか環境は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 何か役に立てば。(立つほどのもはありませんが)

taho1999
質問者

お礼

ありがとうございます。 IsNullに関して、ヘルプ等良く確認して見直してみます。 たぶん書き方が上手くなかっただけだと思うので・・・。 また、デバッグまで教えて頂き感動です。 今回のDBは、とりあえず全て組み上げてから デバッグに手をつけようと思っており まだ手が届いてなかったので、上記参考にさせて頂きます。 本当に助かります。

その他の回答 (2)

  • myRange
  • ベストアンサー率71% (339/472)
回答No.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のヘルプをじっくり眺めてみることをお勧めします。 以上です。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.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をつけて いるのは何か意味があるのですか。 今のところこのような感じですが。

taho1999
質問者

補足

piroin654さんありがとうございます。 登録漏れは、登録しようとフォームに入れたデータまるまるです。 たぶん If文~ が反応してないのでは・・・と自分では疑ってました。 今回ご提示頂いたメッセージボックスをrs.Updateの前に入れたところ メッセージはでませんでした。 やはりIf文が反応してないと思い、 If IsNull(Me!品番last) Then      ↓ If Me!品番last = "" Then に変更してみたところ、メッセージはでました。 そしてデータも登録されていました。 これは文法等なにがいけなかったのか・・・・。 ご教授願えればと思います。 Val関数は、以前 Me!品番startだけにしていた時、 うまく動作しなく、数値型に指定した方が・・・という事があり 使用しています。 ※品番start & last は数字3~5桁なので。

関連するQ&A

専門家に質問してみよう