プロが教えるわが家の防犯対策術!

VB .Netでデータベースの追加・変更をしています。
データセットのレコードを追加できたのですが、変更がわかりません。
追加は・・・dtrow = dttable.NewRowで始まり、追加したい項目を書いています。
そして終わりは・・・
''行を追加
dttable.Rows.Add(dtrow)
''データソースを更新
oleDa.Update(dttable)

変更はどうしたらよいのでしょうか?

A 回答 (3件)

>データセットのレコード更新がしたい



データセット?データセットにはレコードはありません
データテーブルにレコードがあります
こんな感じ
Dataset
└─DataTable
  └─DataRowCollection

新規追加ができているなら更新は簡単です

まず更新したいレコードを検索する
検索できたら、そのレコードをDataRowにて取得する

その後、対象フィールドを上書きしてからDataTableのUpdateメソッドにて更新する

[例]
Dim dRow As DataRow

'主キーにて検索(※123は検索項目値)
dRow = dTbl.Rows.Find(New Object() {123})

If Not dRow Is Nothing Then

  'フィールド更新
  dRow.Item("hogehoge") = "ほげほげ"

  dTbl.Update()

End If
    • good
    • 4

こんな感じですかね



  Dim strConn As String          '接続文字列
  Dim oleConn As OleDbConnection     'コネクション
  Dim oleDa As OleDbDataAdapter      'データアダプタ
  Dim oleCb As OleDbCommandBuilder    'コマンドビルダ
  Dim strSQL As String          'SQL
  Dim dttable As DataTable
  Dim dtrow As DataRow

  strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\test.mdb"
  oleConn = New OleDbConnection(strConn)

  strSQL = "SELECT * FROM " & TableName

  oleDa = New OleDbDataAdapter(strSQL, oleConn)
  oleCb = New OleDbCommandBuilder(oleDa)

  dttable = New dttable
  oleDa.Fill(dttable)
  oleDa.FillSchema(dttable)

  dtrow = dttable.NewRow

  dtrow("日付") = "20050401"

  ''行を追加
  dttable.Rows.Add(dtrow)

  ''データソースを更新
  oleDa.Update(dttable)

コマンドビルダは、データアダプタの「SelectCommand」を基にして
「InsertCommand」「UpdateCommand」「DeleteCommand」に自動でSQLを設定してくれます
まだ慣れないうちは、このコマンドビルダを使用してもよいでしょうが、
慣れてきたら個別に記述するのがよろしいでしょう

HOME > VB.NET Tips HOME > コントロール > DataSet
http://vbdotnet.fc2web.com/vbnet/control/DataSet …

この回答への補足

新規作成はできました。

更新は・・・
oleCmd.CommandText = "SELECT * FROM ファイル WHERE 日付 = '20050320';"
oleDa.SelectCommand = oleCmd
oleDa.Fill(dttable)
If dttable.Rows.Count > 0 Then
  dtrow.BeginEdit()
End if

dtrow.BeginEdit()でエラーがでます。
オブジェクト参照がオブジェクト インスタンスに設定されていません。

新規作成ではdtrow = dttable.NewRowとしているので更新の場合もdtrow = ??としなければならないと思いますが・・・何をしたら良いかわかりません。

補足日時:2005/04/01 19:21
    • good
    • 0

>Dataset


>└─DataTable
>  └─DataRowCollection

Dataset
└─DataTableCollection
  └─DataRowCollection

間違えました orz

この回答への補足

新規追加できてると思ったらできていなかったです・・・。データソースを更新する時に、
更新には、新しい行を含む DataRow コレクションが渡されたとき、有効な InsertCommand が必要です。
のエラーが出ます。

追加したい項目の書き方は・・・
dtrow = dttable.NewRow

dtrow("日付") = "20050401"

''行を追加
dttable.Rows.Add(dtrow)
''データソースを更新
oleDa.Update(dttable)

ではダメですか?
INSERT文でするのでしょうか?

補足日時:2005/04/01 14:40
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A