- PR -

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

投稿者投稿内容
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 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
--------------------------------

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 10:23
引用:

雄琴さんの書き込み (2006-03-10 10:17) より:

Public Sub DDCA(ByVal LSET As LISTSET)
LISTADP.Fill(LSET)
End Sub

Public Sub DECA(ByVal LSET As LISTSET)
LISTADP.Update(LSET)
End Sub


そもそも、LISTSET って何ですか?
LISTADP の型も不明です。

こんなオーバーロードは既定の Framework には存在しないので、
どちらも独自の型だと思いますが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 2006-03-10 10:55
LISTADPはOleDbDataAdapterオブジェクトです。
LISTSETはLISTADPから生成したDataSetオブジェクトです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 11:06
引用:

雄琴さんの書き込み (2006-03-10 10:55) より:

LISTSETはLISTADPから生成したDataSetオブジェクトです。


LSET の間違いかな。
LISTSET については、どう見ても「型」なんですから、オブジェクトじゃないですよね。

引用:

「抽出条件でデータ型が一致しません」エラーになります。


これは、例外メッセージのままの意味です。
型が一致していないと言っています。

たとえば、数値型のフィールドに対して文字列で参照または設定すると起きます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-10 11:07
書いてらっしゃるコードは、型を意識されていないようですね。

Rowsインデクサのインデックス指定に文字列を使っていますし、「価格」や「個数」はDB上で文字列で持っているのですか?
文字列で持っていないのに文字列を入れていませんか?

_________________
囚人のジレンマな日々
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 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
に変えて試しても「抽出条件でデータ型が一致しません」のエラーが
表示されました。

更なるコメントを頂戴したく。
よろしくお願いします。







じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-10 12:18
引用:

雄琴さんの書き込み (2006-03-10 11:49) より:

更なるコメントを頂戴したく。
よろしくお願いします。


指摘したことと違う対応をしてらっしゃいます。

引用:

商品表テーブルのフィールド名とデータ型は以下です。
ID:テキスト型
商品名:テキスト型
価格:通貨型
個数:テキスト型
コメント:テキスト型

引用:

drv("価格") = price.Text


価額は通貨型なのに String で挿入しているんですね。

# 個数が Text タイプなのもわからない...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
雄琴
常連さん
会議室デビュー日: 2006/01/12
投稿数: 20
投稿日時: 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
--------------------------------

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