- - PR -
DataSetを使った更新
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-03-25 18:38
こんにちは、早速質問なんですが下記のような記述で変更が発生した行を取得して更新処理を
行いたいのですが row = table.Rows.Find(key) の部分で値が取得できずにNothingになってしまいます、ちなみにkeyの部分は画面で変更が発生した主キーの値を取得できているのですが 何か良い方法はないでしょうか? Dim row As DataRow Dim table As DataTable Dim key As Object = e.Cell.Row.DataKey table = DataSet21.Tables(e.Cell.Band.BaseTableName) If (Not (key Is Nothing)) Then row = table.Rows.Find(key) If (Not (row Is Nothing)) Then Try Dim newVal As Object = e.Cell.Value row(e.Cell.Column.Key) = newVal Catch DataSet21.RejectChanges() End Try End If |
|
投稿日時: 2003-03-25 19:31
こんにちは。
DataTableにPrimaryKeyを設定していないとか? 余分な空白がどちらかに混ざっているとか? 大文字、小文字が違うとか? |
|
投稿日時: 2003-03-25 19:37
Jittaさん返事ありがとうございます。
PrimaryKeyは設定してますね、型はintegerで宣言してあるので大文字、小文字が違うというのはないと思うのですが・・・、keyに直接値を突っ込んでも駄目でした。 |
|
投稿日時: 2003-03-25 19:49
こんにちは。
keyをobjectではなく、decimal/integer/longにするとか? 『keyに直接値を突っ込んでも駄目でした』というのは、「dim key as object = 123」ということですか?「row = table.Rows.Find(123)」は、してみましたか? |
|
投稿日時: 2003-03-25 20:07
Jittaさん
dim key as object = 1もrow = table.Rows.Find(1)も試してんみたんですが全く駄目でし た、keyで変更があるPrimaryKey値はデバッガで確認する限り欲しい値が取れてました。 DataTableの設定かとも思ったのですがDataSetで使用しているTableを取得できているのです が他に問題があるんでしょうか? |
|
投稿日時: 2003-03-26 09:03
こんにちは。
これでできているんですけどねぇ・・・? テーブル構成(Oracle9i) ID NUMBER(8.0) PRIMARY KEY NAME VARCHAR2(64) UNIQUE Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load data = New DataTable("DATA") Me.OleDbDataAdapter1.Fill(data) data.PrimaryKey = New DataColumn() {data.Columns("ID")} End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim key As Decimal Try key = CDec(TextBox1.Text) Catch ex As SystemException Exit Sub End Try Dim row As DataRow = data.Rows.Find(key) If Not (row Is Nothing) Then TextBox2.Text = row.Item("NAME") End If End Sub ※コードタグを付けると横に長くなるので付けていません |
|
投稿日時: 2003-03-26 09:52
Jittaさんありがとうございます。
たしかにこれだとできますね・・・。 私は テーブル構成(Oracle9i) CODE integer PRIMARY KEY NAME varchar2(20) REMRKS varchar2(20) でやっているのですがもう少し調べてみます。 |
|
投稿日時: 2003-03-26 18:54
こんにちは。
>>テーブル構成(Oracle9i) >>CODE integer PRIMARY KEY >>NAME varchar2(20) >>REMRKS varchar2(20) ん?Oracleにinteger型ってありましたっけ? DataColumnに、データベース側とアプリ側の型変換情報がありますから、それを見て、Findに渡す型をあわせてみてはどうでしょうか。 |