- PR -

◆明細画面で更新すると”フィールド '管理番号' は更新できません。”とエラー

投稿者投稿内容
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-10-01 11:06
WindowsXP、VB2005EE Access2003 でWindowsアプリケーションを開発中です。
固定資産の管理台帳を作成しています。画面には「固定資産BindingNavigator」
と次のTextBox等を配置してバインドさせています。
・管理番号TextBox ・・・主キー
・取得価格TextBox
・資産名称TextBox
・その他
「資産閲覧」フォームのLoad時に次のように記述しています。
コード:

Me.固定資産TableAdapter.Fill(Me.DataSet1.固定資産)


[データ保存]ボタンには次のコードが自動的に記述されています。
コード:

Me.Validate()
Me.固定資産BindingSource.EndEdit()
Me.固定資産TableAdapter.Update(Me.DataSet1.固定資産)



◆状況説明
実行すると画面に固定資産の明細が正常に表示され、Navigatorの[次に移動]や
[前に戻る]ボタンで全てのレコードが正常に閲覧できます。またレコードの内容を
何も変更しないでNavigatorの[データ保存]ボタンを押すと正常に終了します。
(当然レコード内容も変更されていません)

◆問題点
1番目のレコードの資産名称の「自動車」を「トヨタ自動車」と変更して[データ保存]
ボタンを押すと次のようなエラーが発生してしまい、実行が停止されてしまいます。
エラー内容 →(管理番号は主キーです)
「フィールド '管理番号' は更新できません。フィールドが更新可能ではありません。」

何がエラーなのか理解できずに困っています。よろしくご教授下さい。



------- これ以降は12:04に追加情報を記述しました。 ------------
上記の状況は私なりに考えてもおかしな現象なので、もしやと考え、違うテーブルで
同じようなテストを行いましたところ、別テーブルのレコードを変更してNavigator
の[データ保存]ボタンを押すと正常に変更内容が保存されています。
再度閲覧して確認しました。
このエラー状態は、固定資産テーブルのみに発生しているようで、なぜなのかは
いまだに解っていません。どなたかヒントでもいただければありがたいのですが。
よろしくお願いいたします。

------- これ以降は01:00に情報を追加しました。 ------------
主キーの管理番号TextBoxで表示するのは管理番号の変更可能となることに問題がある
のでは考え、管理番号TextBoxをフォームから削除しましたが同じエラーが発生します。

また、ここで使用している固定資産テーブルへの新規登録は現在でも正常に登録可能です。



[ メッセージ編集済み 編集者: One.net 編集日時 2008-10-01 12:02 ]

[ メッセージ編集済み 編集者: One.net 編集日時 2008-10-01 12:59 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-01 13:04
引用:

One.netさんの書き込み (2008-10-01 11:06) より:

◆問題点
1番目のレコードの資産名称の「自動車」を「トヨタ自動車」と変更して[データ保存]
ボタンを押すと次のようなエラーが発生してしまい、実行が停止されてしまいます。
エラー内容 →(管理番号は主キーです)
「フィールド '管理番号' は更新できません。フィールドが更新可能ではありません。」

------- これ以降は01:00に情報を追加しました。 ------------
主キーの管理番号TextBoxで表示するのは管理番号の変更可能となることに問題がある
のでは考え、管理番号TextBoxをフォームから削除しましたが同じエラーが発生します。

また、ここで使用している固定資産テーブルへの新規登録は現在でも正常に登録可能です。



全くの推測ですが、UPDATE メソッドで投げられるクエリで更新する列に主キーが含まれているとうまくいかないのではないでしょうか?
UpdateCommand を確認して、更新する列に主キーが含まれないように直したらどうでしょう。
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-10-01 13:20
rainさん、回答ありがとうございます。
「更新する列に主キーが含まれているのでは?」とのご指摘ですが、状況説明にも
ありますとおり、コード記載はLoad時の記述が1行だけで、あとはTextBoxの
ドラック&ドロップアンド時に自動生成されるコードだけです。
私もエラー内容から主キーを変更しているのではと考えましたが、それらしい
事はありません。また主キーの管理番号TextBoxをフォームから削除しても
結果は同じでした。以上報告まで・・・

_________________


[ メッセージ編集済み 編集者: One.net 編集日時 2008-10-01 13:27 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-01 13:46
引用:

One.netさんの書き込み (2008-10-01 13:20) より:
rainさん、回答ありがとうございます。
「更新する列に主キーが含まれているのでは?」とのご指摘ですが、状況説明にも
ありますとおり、コード記載はLoad時の記述が1行だけで、あとはTextBoxの
ドラック&ドロップアンド時に自動生成されるコードだけです。
私もエラー内容から主キーを変更しているのではと考えましたが、それらしい
事はありません。また主キーの管理番号TextBoxをフォームから削除しても
結果は同じでした。以上報告まで・・・



それは「固定資産TableAdapter.UpdateCommand には管理番号列を更新しているような記述はなかった」という意味でしょうか?
だとすると私にはこれ以上のことはわかりませんが。
King
ぬし
会議室デビュー日: 2008/06/20
投稿数: 284
投稿日時: 2008-10-01 14:45
ここの「テーブルアダプタのUpdateメソッド」って所を見れば rain さんが何をおっしゃっているかわかると思います。

http://www.atmarkit.co.jp/fdotnet/vblab/vsdbprog_07/vsdbprog_07_03.html
からあげ
会議室デビュー日: 2007/12/13
投稿数: 19
投稿日時: 2008-10-01 15:18
こんにちは。

特定のテーブルだけうまくできないという場合は、テーブル定義に
問題がある確率が高いと思います。

ちなみに管理番号のIDENTITY属性はどうなっていますか?
そしてOne.netさんが正常に更新ができると言っているテーブルの
各項目のIDENTITY属性はどうなっていますか?

一言言わせてください。
rainさんの言いたかったことは、いくら自動生成してるからと言っても、
更新の問題ならUPDATEクエリーを確認するのは基本だろってことですよ。
そこから問題解決の糸口が見えるのです。
間違っているはずがないと思いこまずに、いろんな可能性を考え、
実際にデバッグすることでバグをつぶしていくのです。

Accessでしたか。それではIDENTITYではなくオートナンバーですね。失礼しました。

[ メッセージ編集済み 編集者: からあげ 編集日時 2008-10-01 15:36 ]

[ メッセージ編集済み 編集者: からあげ 編集日時 2008-10-01 15:38 ]
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-10-01 15:52
とりあえず、質問を読んでからの思考の過程を晒しておきます。参考になれば。
コード:
「フィールド '管理番号' は更新できません。フィールドが更新可能ではありません。」
というメッセージがある 
↓
ということは、管理番号を更新しようとしているんだろう
↓
どこで更新しようとしているのかといえば、
Me.固定資産TableAdapter.Update(Me.DataSet1.固定資産) だ
↓
じゃあこの 固定資産TableAdapter で持っている更新クエリ(UpdateCommandプロパティ)の
中身が怪しいんじゃないか?
↓
ここで管理番号を更新しないように直せばいいんじゃない?



「なんで管理番号列は更新できないのか?」という方向には考えが向いていなかったのですが、オートナンバーだとそりゃ更新はできないですね。
#「フィールドが更新可能ではありません」でググっておけばよかった
One.net
大ベテラン
会議室デビュー日: 2008/03/01
投稿数: 202
投稿日時: 2008-10-01 17:32
rainさん、Kingさん、からあげさん、すみません。
ご指導いただきながら私からの返事が大変遅くなり、申しわけありません。1:30
から外出してまして、今帰り内容を読ませていただいているところです。
私の力不足で申し訳ありませんが、まだ全部理解できていません。そして提示いただ
きました「第7回 マスタ/詳細テーブルにおける更新処理」をよく読んで見たいと考
えています。

rainさんの言われる「固定資産TableAdapter で持っている更新クエリ(UpdateCommand
プロパティ)の中身が怪しい」とのことですが意味がよく理解できていません。自動生成
の中身にも管理番号を更新しようとしている箇所があるかもしれないということでしょうか。

からあげさんの言われるとおり"管理番号"は主キーに設定していてオートナンバーです。
申し訳ありませんが、ご指導いただいた中身がまだ理解できていませんので、しばらく
時間を下さい。とりあえずお返事が遅くなったことをお詫びいたします。




[ メッセージ編集済み 編集者: One.net 編集日時 2008-10-01 17:34 ]

スキルアップ/キャリアアップ(JOB@IT)