すっきりして見やすいですねぇなんて思いながら見てましたが、OpenRecordset
にはSQL文も指定できるのでハイブリッドでやるのもいいかなぁと思いました
strSQL = "SELECT 依頼ID, 依頼日, 依頼者, W_No, W_Noロット, 品名, 希望処置, 補足説明 FROM T_依頼;"
Set rs = CurrentDb.OpenRecordset(strSQL)
rs.AddNew
For Each fld In rs.Fields
fld.Value = Me(fld.Name).Value
Next
rs.Update
不要な分を弾く処理よりは必要分を記述していくほうが分かりやすいかと
単純なSELECT文なので間違いも起きにくいですし
それから、エイリアス使ってひねってやるとフィールド名とコントロール名が別でも良かったりしますね
strSQL = "SELECT 依頼ID AS txt依頼ID, 依頼日 AS txt依頼日, 依頼者 AS cmb依頼者, W_No AS txtW_No, W_Noロット AS txtW_Noロット, 品名 AS txt品名, 希望処置 AS cmb希望処置, 補足説明 AS txt補足説明 FROM T_依頼;"
フォームに配置できないフィールド名(詳細)とかはこの手法で
質問だと後半のINSERTは「依頼ID」が共通で最大10レコード登録な処理ですかね(追記内容だと「依頼ID」にもi
がついているので真実は不明)
これの時は、別入力処理も使っていくことになりそうです
Dim strSQL As String
strSQL = "SELECT 依頼ID, ロット番号 AS txtロット番号, ロット枝 AS cmbロット枝, 依頼理由_1 AS cmb1依頼理由, 依頼理由_2 AS cmb2依頼理由, 依頼理由_3 AS cmb3依頼理由, 巻き長さ AS txt巻き長さ, 詳細補足説明 AS txt詳細補足説明, 更新日時 FROM T_依頼詳細"
Set rs = CurrentDb.OpenRecordset(strSQL)
Dim i As Long
For i = 1 To 10
If Not IsNull(Me("依頼理由" & i).Value) Then
rs.AddNew
For Each fld In rs.Fields
If Not ",依頼ID,更新日時," Like "*," & fld.Name & ",*" Then
fld.Value = Me(fld.Name & i).Value
End If
Next
'//レコード共通項目や計算結果を入れるものは個別に処理
rs!依頼ID.Value = Me!依頼ID.Value
rs!更新日時.Value = Now
rs.Update
End If
Next i
rs.Close
更新日時のような計算で求めるものも外に出して個別に処理ですかねぇ
Like
判定は誤動作しそうで怖い。完全一致で判定(Select Case
で列挙するとか)したくなります
通報 ...