大人になっても苦手な食べ物、ありますか?

accessでデータベース参照システムを作成しているのですが、このオブジェクトに値を代入することはできません
というエラーがでています。

色々過去ログを調べたのですが、私の内容と該当しそうなのがみつかりませんでした。

TABLE_A
親番号 子番号 項目a... b....
3 , 1 , xxxxxxxxxxx
3 , 2 , xxxxxxxxxxxx

TABLE_AとリンクしているフォームXを開きます。
開いたあと、filterをかけています。(例 filter : 親番号 = 3)
そのフォームには、コントロールソースがいくつもあります。

編集ロックを解除して、データベースの内容を上書きしています。
新規作成時には、子番号という、テーブルのキー情報にだけ値を入れて(既存のmax値+1)、その他の項目を全てnullにして、データの新規登録を可能にさせています。
(例 : 3, 3 , xxxxxxxxのデータが作成される)

ここまでは動作しています。

やりたいことは、親番号4という、TABLE_Aにない情報で、上記で、同じくフォームxを開いたあと、新規登録を可能にしたいのですが、
子番号のコントロールボックス(テキストボックス)に、1という新規番号をいれようとしたら、エラーになります。
内容は、{このオブジェクトに値を代入することはできません}です。

この解決方法がなかなかみつかりません。

説明が難しいので伝わりにくいかもしれません。
なにかありましたら、説明させて頂きます。

フォームは、
DoCmd.OpenForm stDocName, , , stLink
で開いています。

A 回答 (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には主キーが無い様子だとか、
親番号の取得も手動であるとか、何か
漠然とした内容ですが、大丈夫なので
しょうか。

誰かがオールインワンのコードを書けば
適当に選択してください。
以上です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/09 22:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A