• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:accessのこのオブジェクトに値を代入することはできません エラー)

accessのデータベース参照システムでオブジェクトに値を代入することはできません エラー

このQ&Aのポイント
  • accessで作成しているデータベース参照システムで、オブジェクトに値を代入することができないというエラーが発生しています。
  • フォームXを開いた後、テーブルAとリンクしている編集ロック解除フォームにおいて、子番号のコントロールボックスに値を代入しようとした際にエラーが発生しています。
  • 新規登録時にテーブルAに存在しない親番号4の情報をフォームXに入力しようとした際に、子番号のコントロールボックスに値を代入することができず、エラーが発生しています。

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

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

どのように設定しているのかわかりませんが、 >子番号という、テーブルのキー情報 >にだけ値を入れて(既存のmax値+1)、 ならば、3の次は4しか入らないのでしょうし、 入れられないでしょう。 以下は一つの案です。以下のコードは DAOです。 まず、フォームの子番号のフィールドの 入力の縛りを解除します。 TABLE_子番号というテーブル数値型 の子番号というフィールドをつくる。 主キーは無し。このテーブルの子番号の 値を更新させて参照用に使います。 次の段階も考え方はいろいろです。 親番号の取得時に子番号をリセット するか、子番号のリセットを単独で するかです。 親番号の取得をどのようにしているのか わかりませんから、ここでは子番号の リセット、番号の取得をボタンクリック にしておきます。 '子番号のリセット: Private Sub 子番号リセット_Click() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("TABLE_子番号", dbOpenDynaset) rs.Edit rs!子番号 = 0 rs.Update rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub '子番号の取得表示: Private Sub 子番号入力_Click() Dim db As Database Dim rs As Recordset Set db = CurrentDb Set rs = db.OpenRecordset("TABLE_子番号", dbOpenDynaset) If rs>Recordcount > 0 Then rs.Edit rs!子番号 = rs!子番号 + 1 rs.Update Me![子番号] = rs!子番号 'TABLE_子番号のセットをすれば '上記のIfの行と以下のEnd Ifまで 'は必要ない。 Else rs.AddNew rs!子番号 = 1 rs.Update rs.MoveFirst rs.Edit rs!子番号 = 0 rs.Update rs.Edit rs!子番号 = rs!子番号 + 1 rs.Update Me![子番号] = rs!子番号 End If rs.Close: Set rs = Nothing db.Close: Set db = Nothing End Sub TABLE_子番号のセット: TABLE_子番号は作ったままだとレコードがない とAccessが文句を言うので子番号に適当に 数値を入れて一回レコードを登録します。 その後、レコードの数値を0にしておきます。 これで完了です。これを準備した場合は 上記のコードでいらないところは削るか コメントアウトしてください。 二つのプロシージャはクリックイベントに なっていますが、関数にして適当にアレンジ してプログラムの中で使ってください。 質問の状況だと、レコードの上書きだとか、 TABLE_Aには主キーが無い様子だとか、 親番号の取得も手動であるとか、何か 漠然とした内容ですが、大丈夫なので しょうか。 誰かがオールインワンのコードを書けば 適当に選択してください。 以上です。

tirochan
質問者

お礼

ありがとうございます。 プログラムを参考に、応用して作成し、実現できました。 大変勉強になりました。

関連するQ&A