- - PR -
ACCESSのDBのデータを編集する方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-03-10 10:17
お世話になります。雄琴です。
VB.NETを勉強中です。 商品表テーブル(ACCESSのデータ)にあるデータを編集して 上書きしたいと考えています。 下記ソースコードで実行するとLISTADP.Update(LSET)の部分で 「抽出条件でデータ型が一致しません」エラーになります。 色々調べて見ましたが解決に至らず質問した次第です。 なぜエラーがでるのか、編集するなら違う方法がよいなど 回答お願いします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim PSET As New LISTSET DC.DDCA(PSET) Dim drv As LISTSET.商品表Row = PSET.商品表.FindByID(Session("PID")) Dim i As String = drv.ID PSET.商品表.Rows(i)("商品名") = itemname.Text PSET.商品表.Rows(i)("個数") = countname.Text PSET.商品表.Rows(i)("価格") = price.Text 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 -------------------------------- | ||||||||||||
|
投稿日時: 2006-03-10 10:23
そもそも、LISTSET って何ですか? LISTADP の型も不明です。 こんなオーバーロードは既定の Framework には存在しないので、 どちらも独自の型だと思いますが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-10 10:55
LISTADPはOleDbDataAdapterオブジェクトです。
LISTSETはLISTADPから生成したDataSetオブジェクトです。 | ||||||||||||
|
投稿日時: 2006-03-10 11:06
LSET の間違いかな。 LISTSET については、どう見ても「型」なんですから、オブジェクトじゃないですよね。
これは、例外メッセージのままの意味です。 型が一致していないと言っています。 たとえば、数値型のフィールドに対して文字列で参照または設定すると起きます。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-03-10 11:07
書いてらっしゃるコードは、型を意識されていないようですね。
Rowsインデクサのインデックス指定に文字列を使っていますし、「価格」や「個数」はDB上で文字列で持っているのですか? 文字列で持っていないのに文字列を入れていませんか? _________________ 囚人のジレンマな日々 | ||||||||||||
|
投稿日時: 2006-03-10 11:49
回答ありがとうございます。
商品表テーブルのフィールド名とデータ型は以下です。 ID:テキスト型 商品名:テキスト型 価格:通貨型 個数:テキスト型 コメント:テキスト型 新規にデータを追加する場合は下記ソースコードで 追加できています。 ----------新規にデータを追加---------- Dim PSET As New LISTSET Dim drv As LISTSET.商品表Row = PSET.商品表.NewRow drv.BeginEdit() drv("商品名") = itemname.Text drv("個数") = countname.Text drv("価格") = price.Text drv("コメント") = coment.Text drv.EndEdit() PSET.商品表.Rows.Add(drv) DC.DECA(PSET) ---------------------------- ACCESSデータ側のIDを数値型 Rowsインデクサのインデックス指定を Dim i As Integer = drv.ID に変えて試しても「抽出条件でデータ型が一致しません」のエラーが 表示されました。 更なるコメントを頂戴したく。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2006-03-10 12:18
指摘したことと違う対応をしてらっしゃいます。
価額は通貨型なのに String で挿入しているんですね。 # 個数が Text タイプなのもわからない... _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 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 -------------------------------- |