初めて自分の家と他人の家が違う、と意識した時

VB2005.NETの初級開発者です。

MDBをADO接続で開発を行いたいのですが
記述の方法がわかりませんので教えて下さい。

下記のようなサンプルはネット上でもよく見るのですが
INSERT分で記述を行いたいのですが、サンプルが見つかりません
よろしくお願いします。

後、CurrentProject.Connection.Execute strSQL, , adCmdTex
このような記述をネット上で見るのですがstrSQLにInsert分を
記述すれば良いのですか、わからないので教えて下さい。

また、下記の記述の方がよいのですか?

Dim ct As New Connection()
Dim rt As New Recordset()

' 接続文字列を設定
ct.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\test.mdb"
' データベースに接続
ct.Open()
' テーブルを指定し、レコードセットをオープン
With rt
.CursorType = CursorTypeEnum.adOpenDynamic
.LockType = LockTypeEnum.adLockOptimistic
.Open("Insert_Tbl", ct, , , CommandTypeEnum.adCmdTable)
End With

' データを追加
With rt
.AddNew()
.Fields("aaa").Value = TextBox1.Text
.Fields("bbb").Value = TextBox2.Text
.Update()
End With

A 回答 (2件)

>INSERT文で記述を行いたいのですが、サンプルが見つかりません



とりあえず見つけたものを貼って置きます。
http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …


>CurrentProject.Connection.Execute strSQL, , adCmdTex

これは、AccessのApplicationオブジェクトの
CurrentProjectプロパティの事だと思いますので、
AccessVBAのサンプルだと思います。

これを参考にするなら、CurrentProject.Connection の部分を、
データベースに接続した Connectionオブジェクトに置き換えます。

質問のソースで言うと、 ct.Open() の後で、

strSQL = "INSERT INTO Insert_Tbl ( aaa, bbb ) values ('hoge','foo');"
ct.Execute strSQL, , adCmdText + adExecuteNoRecords

これでSQL文を発行できると思います。
レコードセットを返さないSQL文(INSERT, UPDATE, DELETE)の場合は、
adExecuteNoRecordsを付けた方がパフォーマンスが良なるそうです。

http://timberlandchapel.com/adooptim.html


>また、下記の記述の方がよいのですか?

レコードを追加すると言う意味では、どちらでも良いと思います。

どちらがパフォーマンスが良くなるか?と言う意味なら、
私には分かりません。(^^;

環境による影響もありますので、実際の実行環境で
比較テストしてみるのが確実ではないでしょうか?

この回答への補足

ありがとうございます。
参考にさせて頂きます。

補足日時:2007/12/24 12:05
    • good
    • 0

これで、INSERTの記述ですよ。


このプログラムを説明すると。
1、AddNewでレコードを作ります。
2、Fieldsで値をセットします。
3、.Update()でUpdateします。
ようは、SQL的に言うとinsertで空のレコードを作りUpdateで値をセットしていると思えばわかりやすいでしょうか?

こうも書けますよ。
rt.AddNew TextBox1.Text, TextBox2.Text
この例はinsertのイメージです。


ただ このプログラムで気が付いたことが2、3あります。
1、セッションが切れれば自動コミットが働くのでしょうが、明示的に行ったほうがいいと思います。
    rt.Close: Set rt = Nothing
    ct.Close: Set ct = Nothing
2、エラー処理がありませんね
AddNewのときと、Updateの時にエラーが起こるかもしれません。

この回答への補足

ありがとうございます。
これで、INSERTの記述ですよ。
→たしかにINSERTの記述だとはわかるんですが
なるべく汎用的に作成したかったもので、
いろいろ調べていたのです。
後、エラー処理がありませんの指摘どおり
記述していないのですが、記述のしかたが
よくわかりませんので教えて頂けますでしょうか。
よろしくお願いします。

補足日時:2007/12/24 10:25
    • good
    • 0

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