プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になってます。VB2005の初心者の質問です。
データの変更頻度が少ないのでMDBテーブルをDataGridViewの表示させて行の状態から追加変更したいのですが肝心な部分がわかりません。
DB名=NO.MDB
テーブル名=番号 (IDNO、addres、TELNO の3項目です)

Private Sub 更新_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 更新.Click
Dim dSet As DataSet = New DataSet("番号")
Dim cn As OleDb.OleDbConnection =   NewOleDb.OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=NO.mdb;")
Dim dRow As DataRow
Dim dTbl As DataTable
Dim i As Integer
dTbl = DataGridView1.DataSource
For i = 0 To dTbl.Rows.Count - 1
If dTbl.Rows(i).RowState = DataRowState.Added Then
MessageBox.Show(i, "件目") →デバック表示です
??????? Addedならレコードの追加をしたいです
End If
Next
End Sub

ご回答よろしくお願いいたします。

A 回答 (2件)

ANo.1 です。


初心者の方には不親切なアドバイスだったかなと思い補足いたします。
また、記述に一部誤りがあったので訂正とお詫びいたします。

まず、MDBファイルをデータソースとして扱うために「データソースの追加」を
行っていますよね?
私はサンプルのNorthwind.mdbの「社員」テーブルを使用しました。

そうすると、「表示」→「ソリューション エクスプローラ」でソリューション エクスプローラに
指定した"「データソース名」.xsd"が表示されます。これをダブルクリックしてください。

表示された"「データソース名」.xsd"には"「テーブル名」TableAdapter"という項目がありますので、
これを右クリック→追加→QueryでInsertのSQL文を記述します。
これで"「テーブル名」TableAdapter"にはInsertQueryというメソッド(ですよね?)が追加されます。
(ここではInsert文だけ記述していますが、Select文、Update文も記述できるはずです。)

あとはコードを見てもらえばわかっていただけると思います。

==== Code ====
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'TODO: このコード行はデータを 'NorthwindDataSet1.社員' テーブルに読み込みます。必要に応じて移動、または削除をしてください。
Me.社員TableAdapter.Fill(Me.NorthwindDataSet1.社員)
End Sub

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim dTbl As NorthwindDataSet.社員DataTable
Dim i As Integer
dTbl = Me.NorthwindDataSet1.社員
For i = 0 To dTbl.Rows.Count - 1
If dTbl.Rows(i).RowState = DataRowState.Added Then
MessageBox.Show(i, "件目") '→デバック表示です
Me.社員TableAdapter.InsertQuery(dTbl.Rows(i).Item(0), dTbl.Rows(i).Item(1), dTbl.Rows(i).Item(2), dTbl.Rows(i).Item(3))
End If
Next
End Sub
End Class
==== end of Code ====

ちなみに私は、

SELECT 社員コード, 氏名, 在籍支社, 部署名 FROM 社員

でテーブルを開き、

INSERT INTO `社員` (`社員コード`, `氏名`, `在籍支社`, `部署名`) VALUES (?, ?, ?, ?)

というふうにクエリを設定していますので、
Me.社員TableAdapter.InsertQuery(dTbl.Rows(i).Item(0), dTbl.Rows(となります。
(InsertQuery()の1つ目の引数が、Values()の1つ目の"?"に対応します。)

==== 訂正とお詫び ====
前回、
>InsertCommandプロパティを設定し、OleDataAdapterメンバのUpdateメソッドを実行すれば良いのでは?
と書きましたが、Insertメソッドの実行が正しいです。
誤った記述をしてごめんなさい。

==== 追記 ====
これを機会に、Visual Basic 2005 Express Editionをインストールしてみました。
ついでにASP.NET環境も整えました。
知識を新しくする機会を与えてくれたことを感謝します。
    • good
    • 1
この回答へのお礼

お礼が遅くなり申し訳ありません。
詳細に回答をいただきながら感謝なんて恐れ入ります。
当方も自力で対処できるよう、また新しい知識の蓄積に努めてまいります。

どうもありがとうございました。

お礼日時:2007/09/28 16:15

回答される方がいらっしゃらないようなので。

。。

当方、VBを書いたことがありません。Visual Studioも持っていませんので
あくまで参考です。

OleDataAdapterクラス
http://msdn2.microsoft.com/ja-jp/library/system. …
というものがあるようです。
そして、OleDataAdapterメンバにInsertCommandプロパティというInsert文を定義するためのプロパティがあります。
InsertCommandプロパティを設定し、OleDataAdapterメンバのUpdateメソッドを実行すれば良いのでは?

ちなみにOleDataAdapterメンバは、上記URLのページの下方「参照」からたどっていけます。
ページの左のツリーからたどってもいけます。
    • good
    • 0

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

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