- PR -

ACCESSのDBのデータを編集する方法

投稿者投稿内容
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-03-12 20:02
引用:

雄琴さんの書き込み (2006-03-10 16:29) より:
Dim a As Decimal = CDec(price.Text)
drv("価格") = a

で試して見ました。新規にデータを追加でエラーはでませんが
編集の場合に
「抽出条件でデータ型が一致しません」エラーが表示されます。

Rowsインデクサのインデックス指定方法が間違っているのでしょうか。
指定した行のデータを変更してupdateを考えているのですが
う〜んなぜだろう???

----------新規にデータを追加----------
Dim PSET As New LISTSET
Dim drv As LISTSET.商品表Row = PSET.商品表.NewRow
Dim a As Decimal = CDec(price.Text)

drv.BeginEdit()
drv("商品名") = itemname.Text
drv("個数") = countname.Text
drv("価格") = a
drv("コメント") = coment.Text
drv.EndEdit()

PSET.商品表.Rows.Add(drv)
DC.DECA(PSET)
----------------------------
---------データを編集-------------------
Dim PSET As New LISTSET

DC.DDCA(PSET)

Dim drv As LISTSET.商品表Row = PSET.商品表.FindByID(Session("PID"))
Dim i As Int = drv.ID
Dim a As Decimal = CDec(price.Text)

PSET.商品表.Rows(i)("商品名") = itemname.Text
PSET.商品表.Rows(i)("個数") = countname.Text
PSET.商品表.Rows(i)("価格") = a
PSET.商品表.Rows(i)("コメント") = coment.Text

DC.DECA(PSET)

-----------Public class DC------
Public Sub DDCA(ByVal LSET As LISTSET)
LISTADP.Fill(LSET)
End Sub
Public Sub DECA(ByVal LSET As LISTSET)
LISTADP.Update(LSET)
End Sub
--------------------------------



エラー(例外)がでるのは、どの行ですか?それが重要なんですよ。


「商品表」は、DataTable ですか?FindById なんてメソッド、定義されていました?

 いちど、Option Strict を On にしてみることを薦めます。

〆 written by Jitta@わんくま同盟 on 2006/03/12
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 2006-03-13 19:15
回答いただきありがとうございます。
(こちらの返答遅れ申し訳ないです。)

エラーが出る行ですが、
データを編集する時の下記場所でエラーが発生します。
Public Sub DECA(ByVal LSET As LISTSET)
LISTADP.Update(LSET) ←ここで「抽出条件でデータが一致しません」のエラーが発生。
End Sub

商品表はデータテーブルです。

質問するにあたり情報が不足していると思いますが
懲りずに回答をお願いいたします。

型を意識していない作りから本エラーが発生していると
ご指摘いただき改良しましたが新規、編集とも同じように型を揃えても
編集の時のLISTADP.Update(LSET)でエラーが発生します。

新規の追加の
LISTADP.Update(LSET)
ではエラーが発生しないのに
データを編集する時のLISTADP.Update(LSET)
でエラーが発生します。

よきアドバイスをお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-13 19:29
引用:

雄琴さんの書き込み (2006-03-13 19:15) より:

商品表はデータテーブルです。


System.Data.DataTable クラスのメンバには FindByID というメソッドは存在しません。
本当に System.Data.DataTable クラスなのでしょうか?

引用:

質問するにあたり情報が不足していると思いますが
懲りずに回答をお願いいたします。


上記のことからもそうですが、自分がどのクラスを使っているか把握されていますでしょうか?

ところで、drv にある要素はあれで全部ですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 2006-03-13 19:47
回答ありがとうございます。

引用--------------------------------------------------------------------------
System.Data.DataTable クラスのメンバには FindByID というメソッドは存在しません。本当に System.Data.DataTable クラスなのでしょうか?
-------------------------------------------------------------------------------
商品表についてですが、
コンポーネントクラスでOleDbDataAdapterからデータセットを生成しました。
やり方
@新規項目の追加でコンポーネントクラスを追加
A追加したコンポーネントクラスのデザイン画面に
サーバーエクスプローラーからACCESSの商品表テーブルをドラッグ
Bドラッグしたら「OleDbDataAdapter1」の名前を「LISTADP」に変更
C「LISTADP」を右クリックしてデータセットの生成を選択しデータセットの
名前を「LISTSET」としました。

と書いている内にようやく
自分がどのクラスを使っているか把握されていますでしょうか?
この意味がわかりかけてきました。

ちょっともう少し試してみます。
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 2006-03-27 20:01
いつもお世話になります。

ADO.NET基礎講座などで勉強しましたが
未だアクセスDBの編集に苦戦している雄琴です。
データの新規追加は書き込めますが
編集(データの上書き)が上手くいきません。

新規追加のソースを参考にデータの上書き方法のアドバイスを頂戴したく。
アクセス側に何か設定が必要なのでしょうか?

-----------データの新規追加----------------------------
Dim PSET As New LISTSET 'LISTSETはデータセット
LISTADP.Fill(PSET)    'LISTADPはデータアダプタ

Dim udrow As LISTSET.商品表Row = PSET.商品表.NewRow

udrow.BeginEdit()
udrow.商品名 = "あ"
udrow.EndEdit()

PSET.商品表.Rows.Add(udrow)
LISTADP.Update(PSET)
---------------------------------------

-----------データの編集----------------------------
Dim targetrow As DataRow
Dim test As LISTSET.商品表DataTable = PSET.商品表
targetrow = test.Rows.Find(i) 'iはint型です。
targetrow("商品名") = "あ"
LISTADP.Update(PSET)  ←ここで「抽出条件でデータ型が一致しません」のエラーが発生
---------------------------------------

※これまでに色々ご指摘いただいたので商品表のテーブルには
ID(オートナンバー型)と商品名(テキスト型)のみで確認しています。
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 2006-03-27 20:46
追記です。

新規追加、データ編集ともに商品表(テーブル)内の商品名の箇所に文字列("あ")を書き込みたいと考えています。それとデータの編集部分でも
LISTADP.Fill(PSET)をしています。

-----------データの編集----------------------------
Dim PSET As New LISTSET 'LISTSETはデータセット
LISTADP.Fill(PSET)    'LISTADPはデータアダプタ
Dim targetrow As DataRow
Dim test As LISTSET.商品表DataTable = PSET.商品表
targetrow = test.Rows.Find(i) 'iはint型です。
targetrow("商品名") = "あ"
LISTADP.Update(PSET)  ←ここで「抽出条件でデータ型が一致しません」のエラーが発生
---------------------------------------

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