DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データベースの更新

環境/言語:[VB.NET Framework1.1]
分類:[.NET]

現在、VB.NETにてデータベースアプリケーションを作成しています。
RDMSはSybaseなのでODBCを介しての接続です。

使用するテーブルはtest_vbnet、indexとしてIDにユニークインデックスを貼っています。

今、フォーム上にデータグリッドを作成しました。
フォームのロードイベントに

---Form1.Load---------------------------------------------------------
conn = New OdbcConnection("DSN=vbtest;UID=sample;PWD=********")
Try
conn.Open()
' Insert code to process data.
Catch ex As Exception
MessageBox.Show("データベースに接続できませんでした。")
Finally
conn.Close()
End Try
-----------------------------------------------------------------------

ボタンを2つ作り1つ目のボタンを読み込みボタン
---Bottun1.Click-------------------------------------------------------
'DataAdapterの生成
da_vbnet = New OdbcDataAdapter("SELECT * FROM test_vbnet", conn)
'DataSetの生成
ds = New DataSet
da_vbnet.Fill(ds, "vbnet")

DataGrid1.DataSource = ds.Tables(0)
Dim col(0) As DataColumn
col(0) = ds.Tables(0).Columns("id")
ds.Tables(0).PrimaryKey = col
cb = New OdbcCommandBuilder(da_vbnet)
conn.Close()
------------------------------------------------------------------------
--button2.Click---------------------------------------------------------
da_vbnet.Update(ds, "vbnet")
------------------------------------------------------------------------

としています。しかしこれだと
"UpdateCommandの動的SQL生成は変更可能な列を返さない
SelectCommand に対してサポートされていません。"
とエラーになります。

対処法を教えてください。

なお、テーブルはIDカラムをユニークインデックスとして14,
データは現在3000件、最終的には10万件近いものを作成する予定です。
ろろさんこんにちは。

まず、データは取得できてるか確かめたほうがいいですよ。

---Form1.Load---------------------------------------------------------
conn = New OdbcConnection("DSN=vbtest;UID=sample;PWD=********")
Try
conn.Open()
' Insert code to process data.
Catch ex As Exception
MessageBox.Show("データベースに接続できませんでした。")
Finally
conn.Close()
End Try
-----------------------------------------------------------------------

Formのロード時にDBに接続して、
その場で切断してるみたいですけど (^^;
SHさん、こんにちは。さっそくの返信ありがとうございます。

> まず、データは取得できてるか確かめたほうがいいですよ。
>
> Formのロード時にDBに接続して、
> その場で切断してるみたいですけど (^^;


データは取得できています。
ボタン1のクリック時のda_vbnet.Fillで接続されたい無い場合はdetasetの
内容をつかって接続に行くようです。

実際にボタン1を押すことでデータグリッドにテーブルの中身は表示されました。
ここでデータグリッドの内容を変更してUpdateをかけようとするところで
先ほどのエラーが発生します。

ボタン2のクリック時のda_vbnet.update(・・・)の前と後に、
conn.open()およびconn.close()を書いてみましたが同じエラーでした。
追記です。

同じ事をコンポーネントを使ってやってみました。
データアダプターではやはりUpdateCommandとDeleteCommandを
作成できなかったというエラーになります。

当方の環境では、主キーになるものは自動で振らずに基本的に
データのMAX+1を振るように手動で振っています。
(前にも書きましたが、一意になるようにindexもはってあります)

DataApapterを作成する時にこのカラムを主キーにするなどといった
設定はどこかにない物でしょうか?

また上記にありますように手動で行うにはどのような手順になるのでしょうか?

データグリッドでなくテキストボックスの用に該当する行だけ抜き出して
更新というのは出来ました。

DOBON.NET | プログラミング道 | プログラミング掲示板