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

DataTableを使った処理

  • 題名: DataTableを使った処理
  • 著者: とおる
  • 日時: 2005/11/24 17:53:39
  • ID: 13859
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[環境(Windows XP、使用言語(VB.NET]
分類:[.NET]

お世話になります。
今DataReaderを使いDataGridにMDBを読み込ませ、一応更新はできるようになったのですが、一行値を変更して更新をかけようとすると、全部同じ値で更新されてしまいます。
なので、何行目というのを取得して、そこだけ更新をかけれるようにしたいのですが、どのようにすればよろしいでしょうか??総行数と行番号まではとれてます。
あと、削除や、新規追加の時に総行数や行番号がちゃんと変わるようにしたいのですが。何か良い方法がありましたらよろしくお願いします。

Private Shared Sub tblGakka_ColumnChanging(ByVal sender As Object, ByVal e As DataColumnChangeEventArgs)

Dim SJIS As System.Text.Encoding
SJIS = System.Text.Encoding.GetEncoding("Shift_Jis")
Dim TextWork As String
If (e.Column.ColumnName.Equals("学科")) Then
If Not (e.ProposedValue Is DBNull.Value) Then
TextWork = e.ProposedValue
If SJIS.GetByteCount(TextWork) > 40 Then
MessageBox.Show("「学科」で入力可能な文字数は、全角で20文字(半角40文字)以内です。", "「学科」入力エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
TextWork = SJIS.GetChars(SJIS.GetBytes(TextWork), 0, 40)
e.ProposedValue = TextWork
End If
End If

Dim cnn As New OleDbConnection
Dim cmd As New OleDbCommand

Try
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + _
Application.StartupPath + "\Database\Sp_dbv50.mdb"
cmd.Connection = cnn
cnn.Open()

cmd.CommandText = "UPDATE [T_学科] SET 学科 ='" & TextWork & "'"

cmd.ExecuteNonQuery()

Catch oExcept As Exception
'例外が発生した時の処理
MessageBox.Show(oExcept.ToString, "例外発生")

Finally
If Not cnn Is Nothing Then
cnn.Close()
End If
End Try
End If
End Sub
#End Region

Private Sub DG_Gakka_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DG_Gakka.CurrentCellChanged
Dim aa As Integer
DG_Gakka.CaptionText = "学科 - [ " & Format(Me.DG_Gakka.CurrentCell.RowNumber + 1, "#,###") & " / " & Format(tblGakka.Rows.Count, "#,###") & " ]"
aa = Me.DG_Gakka.CurrentCell.RowNumber + 1
End Sub

一応値が変わった時に更新がかかります。
2005/11/24(Thu) 18:01:20 編集(投稿者)

■No13859に返信(とおるさんの記事)
> cmd.CommandText = "UPDATE [T_学科] SET 学科 ='" & TextWork & "'"
これが原因だと思います。

Where句を使って更新対象を指定して、
OleDbParameterを使ってパラメータを渡しましょう。

http://www.techscore.com/tech/sql/04_02.html
http://park5.wakwak.com/~weblab/clsDBIO.html
■No13860に返信(なおこ(・∀・)さんの記事)
> 2005/11/24(Thu) 18:01:20 編集(投稿者)
>
> ■No13859に返信(とおるさんの記事)
>>cmd.CommandText = "UPDATE [T_学科] SET 学科 ='" & TextWork & "'"
> これが原因だと思います。
>
> Where句を使って更新対象を指定して、
> OleDbParameterを使ってパラメータを渡しましょう。
>
なおこさんいつもお世話になります。
Where句を使うのですが、項目数が2つしかなく、一つはチェックボックスでもう一つが学科なのですがこのような時はWhere句はどのように使えばいいのでしょうか?
以前WHERE句を使ってcmd.CommandText = "UPDATE [T_学科] SET 学科 ='" & TextWork & "' Where 学科=?"でやってみたのですが、一つ以上のパラメーターが必要ですとエラーが返ってきたので、パラメーターを行番号であたえようかなと思い行番号は取得できないかと思ったのです。
なるべくMDBの方には項目を増やしたくないのですが・・・。
2005/11/24(Thu) 21:42:01 編集(投稿者)

お世話になります。

■No13861に返信(とおるさんの記事)
> Where句を使うのですが、項目数が2つしかなく、一つはチェックボックスでもう一つが学科なのですがこのような時はWhere句はどのように使えばいいのでしょうか?
> 以前WHERE句を使ってcmd.CommandText = "UPDATE [T_学科] SET 学科 ='" & TextWork & "' Where 学科=?"でやってみたのですが、一つ以上のパラメーターが必要ですとエラーが返ってきたので、パラメーターを行番号であたえようかなと思い行番号は取得できないかと思ったのです。
> なるべくMDBの方には項目を増やしたくないのですが・・・。

とおるさんが仰っている、「1 つ以上のパラメータが必要です」という例外は
そういう意味ではなく、
CommandText に ? と指定しておきながら、
SelectCommand オブジェクト の Parameters プロパティに OleDbParameter オブジェクトが 1 個もないですよ、
セットしてね、というエラーだと思います。

なので、
先に私が貼り付けたところとか、

↓ここの OleDb の ' Add parameters and set values. らへんを見て、
OleDbParameter オブジェクトを追加しましょう。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpconusingparameterswithdataadapters.asp
■No13863に返信(なおこ(・∀・)さんの記事)
> 2005/11/24(Thu) 21:42:01 編集(投稿者)
>
こんにちは。
なおこさんが言っているのは変更する値は書いときおきながら、
変更される値の指定はなされてない。。。(こういうことでしょうか・・・・?)
お世話になります。

■No13876に返信(とおるさんの記事)
> なおこさんが言っているのは変更する値は書いときおきながら、
> 変更される値の指定はなされてない。。。(こういうことでしょうか・・・・?)

13861 のとおるさんのレスの内容の場合、そのようですね。
  • 題名: Re[6]: DataTableを使った処理
  • 著者: はいこーん
  • 日時: 2005/11/25 12:26:27
  • ID: 13878
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
WHERE。
  • 題名: Re[6]: DataTableを使った処理
  • 著者: とおる
  • 日時: 2005/11/25 13:15:39
  • ID: 13880
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No13877に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> 13861 のとおるさんのレスの内容の場合、そのようですね。

なおこさんありがとうございます。
これでなんとか先に進めそうです。
また何か問題が発生した時はよろしくおねがいします。

>はいこーんさんWHEREですね。
解決済み!

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