Accessデータベースのデータを更新するには?


イルカ  2003-06-24 18:00:20  No: 78423  IP: [192.*.*.*]

VB.netでデータベースのデータを更新(追加、変更、削除)をしたいのですが、下記のようなコードを作成したのですが追加ができません。
-------------------------------------------------------------------
Dim oADP As OleDbDataAdapter
Dim oDs As DataSet
Dim InsertCmd As OleDbCommand
Dim strSQL As String

    strSQL = "INSERT INTO Baitai (BaitaiCode, BaitaiName)" & _
            " VALUES ('" & txtCode.Text & "', '" & txtName.Text & "')"

    InsertCmd = New OleDbCommand(strSQL1, oDbConSting)

    oADP = New OleDbDataAdapter()

    oADP.InsertCommand = InsertCmd

----------------------------------------------------------------
以上です。初めてでいろいろと苦戦しています。おかしいところがあれば教えて下さい。よろしくお願い致します。

編集 削除
nanashi  2003-06-25 10:01:10  No: 78424  IP: [192.*.*.*]

このOleDbなんとかってのは使ったことないのでよく分かりませんが

>    InsertCmd = New OleDbCommand(strSQL1, oDbConSting)

ここで使ってるstrSQL1ってのはなんですかね?
ソース内に出て来てないようですが。

編集 削除
イルカ  2003-06-25 10:28:19  No: 78425  IP: [192.*.*.*]

すいません。
その上のINSERT文のstrSQLのことです。

InsertCmd = New OleDbCommand(strSQL, oDbConSting)

編集 削除
イルカ  2003-06-25 11:33:17  No: 78426  IP: [192.*.*.*]

もしくわDataSetオブジェクトを使用して特定のデータの更新する方法がありますか?

編集 削除
魔界の仮面弁士  2003-06-25 14:33:00  No: 78427  IP: [192.*.*.*]

DataAdapter.InsertCommandプロパティを使っているという事は、
(DataAdapter.Updateなどをを使って)DataTable経由で
更新しようとしているのでしょうか?

そうではなく、単にINSERT SQLを発行したいだけなのであれば、
Command.ExecuteNonQueryメソッドを発行するだけで済むかと思いますよ。

編集 削除
イルカ  2003-06-25 14:46:23  No: 78428  IP: [192.*.*.*]

DataTable経由で更新したいのですが、MSDNとか見ているのですが理解ができないんです。

編集 削除
クリリン  2003-06-25 15:26:26  No: 78429  IP: [192.*.*.*]

多分、oDbConStingはOleDbConnectionの事と前提して記述します。
Insert文を流したいだけであれば、

Dim m_cmd As IDbCommand
Dim strSQL as string = "INSERT INTO Baitai (BaitaiCode, BaitaiName)" & _
            " VALUES ('" & txtCode.Text & "', '" & txtName.Text & "')"

  Try
    m_cmd = m_oDbConSting.CreateCommand
    m_cmd.CommandText = strSQL
    m_cmd.ExecuteNonQuery() 'コマンド実行
  Catch ex As Exception
    'エラートラップ
    System.Windows.Forms.MessageBox.Show(ex.Message)
  End Try

で実行できますよ

編集 削除
イルカ  2003-06-25 15:48:18  No: 78430  IP: [192.*.*.*]

クリリンさんのを参考にしてみたのですが、
> m_cmd.ExecuteNonQuery() 'コマンド実行
で、「ExecuteNonQueryには接続が開かれていて使用可能なことが必要です」
とエラーがでるのですが
ちなみに、oDbConStringはOleDbConnectionのことです。

編集 削除
クリリン  2003-06-25 15:53:49  No: 78431  IP: [192.*.*.*]

OleDbConnectionは先にOpenしている事が前提です。
もちろん、私が記述しているコードもそうですが、
DataAdapterを使用している場合でも同様です。
ただし、DataAdapterはOleDbConnectionをOpenした後は、
接続情報を保持しているので、OleDbConnectionをCloseしてもかまわなかったと思います。

編集 削除
クリリン  2003-06-25 16:14:20  No: 78432  IP: [192.*.*.*]

ADO.NETの操作を行なうクラスを作りました。
ただし、DataAdapterを使用していませんので、読み取り専用です。
また、DataReaderの性質上、機能が乏しいのであしからず…

http://www.takonet.co.jp/~pegasus/samples/ADO.NET.lzh

編集 削除
イルカ  2003-06-25 16:36:03  No: 78433  IP: [192.*.*.*]

クリリンさんありがとうございます。
しかし、私が行いたいのはDataSetオブジェクトを利用して非接続型のデータベースアクセスを考えているのですけど…

編集 削除
クリリン  2003-06-25 16:51:14  No: 78434  IP: [192.*.*.*]

ふむ、確かに
「ExecuteNonQueryには接続が開かれていて使用可能なことが必要です」
とでますねぇ・・・
ちょっと調べて見ます。
ついでに、DataSet用のクラスも作成中ですし…

編集 削除
クリリン  2003-06-25 17:55:14  No: 78435  IP: [192.*.*.*]

非接続型といえど、データを追加、更新、削除する場合はそのタイミングで接続しないといけないみたいです。
なんか、このやり方って、ADOの時代からやっていたんですけどねぇ…
今の所、DataSetの大きなメリットって見出せないのですが、どうなんでしょうか?知りたいところです。何かわかりましたら報告します。

編集 削除
イルカ  2003-06-25 17:58:44  No: 78436  IP: [192.*.*.*]

やっぱりそうなんですかね…
自分も調べてみます。

編集 削除
岡田 之仁  2003-06-28 19:44:05  No: 78437  IP: [192.*.*.*]

とりあえずですが・・・

http://www.gotdotnet.com/japan/team/fieldevangelists/fusaito/meikaiADONET1.aspx

ここをご覧になりましたか?
基本的には、SQL Server へと、Accessへの接続には、Sql... と、OleDb...
と違いますが、同じなので・・・

お試し下さい。

以上。

編集 削除