hatena
hatena
2022/06/16 (木) 13:34:36
下記の部分でエラーということですね。
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_依頼")
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(依頼ID).Value '←ここでエラー
fld.Value = Me(依頼日).Value
fld.Value = Me(依頼者).Value
fld.Value = Me(W_No).Column(2)
fld.Value = Me(W_Noロット).Value
fld.Value = Me(品名).Value
fld.Value = Me(希望処置).Value
fld.Value = Me(補足説明).Value
Next
rs.Update
rs.Close
前回の回答で、
一つずつ、フィールドに対応するテキストボックスの値を代入する方法と、
フィールド名とテキストボックスを同じにしておいて、いちいち指定せずにループで代入しておく方法、
の2つを提案したのですが、それを混ぜ和せてしまっては正常に動きません。
前者の方法でいくなら、上記のコードは、下記のようになります。(フィールド名とテキストボックス名は同じにしてあるという前提です)
Dim rs As DAO.Recordset, fld As DAO.Field
Set rs = CurrentDb.OpenRecordset("T_依頼")
rs.AddNew
rs("依頼ID").Value = Me.依頼ID.Value
rs("依頼日").Value = Me.依頼日.Value
rs("依頼者").Value = Me.依頼者.Value
rs("W_No").Value = Me.W_No.Value 'コンボボックスの連結列をフィールドのデータと合うものにしておく
rs("W_Noロット").Value = Me.W_Noロット.Value
rs("品名").Value = Me.品名.Value
rs("希望処置").Value = Me.希望処置.Value
rs("補足説明").Value = Me.補足説明.Value
rs.Update
rs.Close
通報 ...
後者の方法なら、下記のコードになります。
入力しないフィールドがある場合 "フィールド1,フィールド2" とカンマ区切りで指定してください。
全てのフィールドに入力するならIf文は不要です。
すっきりして見やすいですねぇなんて思いながら見てましたが、
OpenRecordset
にはSQL文も指定できるのでハイブリッドでやるのもいいかなぁと思いました不要な分を弾く処理よりは必要分を記述していくほうが分かりやすいかと
単純なSELECT文なので間違いも起きにくいですし
それから、エイリアス使ってひねってやるとフィールド名とコントロール名が別でも良かったりしますね
フォームに配置できないフィールド名(詳細)とかはこの手法で
質問だと後半のINSERTは「依頼ID」が共通で最大10レコード登録な処理ですかね(追記内容だと「依頼ID」にも
i
がついているので真実は不明)これの時は、別入力処理も使っていくことになりそうです
更新日時のような計算で求めるものも外に出して個別に処理ですかねぇ
Like
判定は誤動作しそうで怖い。完全一致で判定(Select Case
で列挙するとか)したくなります