お世話になってます。
レコードをコピーする時にどうしてもこのエラーを回避できず困っています。
■設定
インデックスは主キーのフィールドのみです。
→テーブルのデザインビューにある [デザイン]タブ > 表示/非表示 > インデックス で確認しました。
分割フォーム上での操作です。
[※追記] テーブル上で直接操作(レコードを選択、コピー、新規レコードに貼り付け)する時はエラー無し。
■エラー
レコードの複製自体はできますが、保存する時に次のエラーが発生。
実行時エラー: 3058
インデックスまたは主キーにはnull値を使用できません。
■試行済
● UI上で手動コピー
・フォームのレコードセレクタをクリックしコピー元のレコードを選択状態にする。
・Ctrl + C でコピー。
・新規レコードのレコードセレクタをクリックしレコード選択状態にする。
・Ctrl + V で貼り付け。
・Shift + Enter で保存。 ← ここでエラー
● 既定の埋め込みマクロ
・デザインビューでボタンを作成する時のウィザードでレコードの複製を選択。
・ボタンをクリックしてコピー。
・Shift + Enter で保存。 ← ここでエラー
● VBAで保存 1
RunCommand acCmdSelectRecord
RunCommand acCmdCopy
RunCommand acCmdRecordsGoToNew
RunCommand acCmdPasteAppend
DoCmd.RunCommand acCmdSaveRecord ’ ← ここでエラー
● VBAで保存 2
Dim Rs As Recordset
Dim subRs As Recordset
Dim i As Long
With Me.Recordset
Set Rs = Me.RecordsetClone
Rs.Bookmark = .Bookmark
.AddNew
For i = 0 To .Fields.Count - 1
Select Case .Fields(i).Name
Case "ID" '主キー
.Fields(i) = 123456 '重複していない数字です。(最終的には自動採番します)
Case "Action" '複数の値を持つフィールドに対する処理
Rs(i).Value.MoveLast
Set subRs = Rs(i).Value
If subRs.BOF = False Then subRs.Movefirst
While (Not subRs.EOF)
With .Fields(i).Value
.AddNew
!Value = subRs!Value
.Update
End With
subRs.MoveNext
Wend
subRs.Close
Set subRs = Nothing
Case Else
.Fields(i) = Rs(i)
End Select
Next
.Update '← ここでエラー
Rs.Close
Set Rs = Nothing
End With
最後の「VBAで保存 2」の場合、レコードの全てのフィールドに対してコピーを実施しているので
既存のレコードが存在する(Nullエラーにならず保存されている)以上、
インデックスや主キーが仮に他にあったとしてもエラーにはならないハズ、と理解しているので混乱しています。
(既存レコードは手入力です。手入力ならエラーにはなりません。)
既知のバグでもあるのでしょうか。(Windows Updateは最新の状態です)
どなたかお知恵をお貸しください。
【※ 翌日追記】
全レコードで同じかと思っていたら、特定のレコードでエラーが出ずに複製+保存できました。
成功/失敗の差を検証していくと、特定のフィールドに値が設定されている場合は成功、値が無い場合は失敗、でした。
その特定のフィールドは2つの数値型フィールドで、両方ともルックアップが設定されています。
両方とも入力されている場合のみエラーを回避できました。
(このフィールドに連結したコントロールには、以前別件で質問したこのような設定がされています。
→ 値集合ソースの中の特定の値のみをコンボボックスに表示させたい )
しかし同様のフィールドは他にもあります。
他と違ったのは、ルックアップの連結列がテーブル側では「2」、フォーム側では「1」になっていました。
もしやここが不具合を起こしたのかとテーブル、フォーム共に連結列:1 に統一しましたが改善しません。
他に正常なフィールドと異なる点は、(関係あるか分かりませんが)「値リストの編集の許可」が「はい」に
なっている事くらいです。 → 「はい」である必要もないので他に合わせて「いいえ」としました。
原因らしきフィールドは特定できましたが何故原因なのか未だもって不明です。