投稿日 | : 2002/12/12(Thu) 12:56 |
投稿者 | : 魔界の仮面弁士 |
Eメール | : |
URL | : |
タイトル | : Re^4: ADOのコネクション処理について |
> > そうすると、VB6でADOを使う場合、対象はMSDEかSQL Serverとゆうことになるのでしょうか
SQL Serverとの親和性が高いのは確かですが、別にADOはそもそもデータベース接続用と
いうわけではなく、もっと汎用的なデータ操作オブジェクトです。
データベース以外…例えば、メモリ上にもったデータを扱う事もできますし(standalone-recordset)、
Webにファイルをアップロードしたりダウンロードしたりする事もできます(Internet Publishing Provider)。
> > 対象がmdbの場合、VB6ではDAOを使うべきの判断でいいのでしょうか?
処理としてはDAOの方が高速ですが、気になるほどの差が生じる事は稀です。
ADOでしかできない事やDAOでしかできない事もありますので、ケースバイケースではありますが、
現在ADOで作っているものを、わざわざDAOに置き換える程の事は無いと思いますよ。
> 1) Likeを使ったあいまい検索ができない
いいえ、可能ですよ。(^^;)
ただし、DAO 3.6は、ANSI SQL-89構文を使用していますが、JET 4.0プロバイダは、
ANSI SQL-92構文を利用しているため、ワイルドカード文字は異なります。
具体的には、SQL-89モードでは、*, ?等を利用しますが、SQL-92モードでは、%, _等を利用する事になります。
SQL-89は、MS-DOS互換のワイルドカード表現ですが、ADO(というか Jet 4.0 OLE DB Provider)で
採用されているSQL-92構文では、OracleやMSDEなどの、一般的なRDBMSに近い構文になったわけですね。
(なお、[]や#などの表現は、どちらのモードでも利用する事ができます)
ちなみに、Microsoft Access 2002では、オプション設定を変更する事で、
クエリ画面でANSI SQL-89モードを使うか、92を使うかを指定できるようになっています。
> 2) Do 〜 Loopの中で更新を行うとシステムエラー?が発生する
当方では経験していないので、この件について具体的に教えていただけないでしょうか?
> 3) レコードを追加した後オートナンバーが取得できない
コーディングに問題があるのでは無いでしょうか。
当方で実験したところ、「FieldオブジェクトのValueプロパティ」でも、
「"SELECT @@IDENTITY"クエリ」でも、問題なく取得できましたが。。。
'ファイル名: C:\db1.mdb
'テーブル名: TABLE
'第1列: ID=オートナンバー(主キー)
'第2列: DATA=テキスト型(長さ=50)
Dim Cn As ADODB.Connection
Dim RS As ADODB.Recordset
Set Cn = New ADODB.Connection
Cn.Provider = "Microsoft.Jet.OLEDB.4.0"
Cn.Open "C:\db1.mdb"
Set RS = New ADODB.Recordset
RS.Open "TABLE", Cn, adOpenKeyset, adLockOptimistic, adCmdTableDirect
RS.AddNew
RS.Fields("DATA").Value = "1行目"
RS.Update
Debug.Print RS.Fields("ID").Value
MsgBox Cn.Execute("SELECT @@IDENTITY").Collect(0)
RS.AddNew
RS.Fields("DATA").Value = "2行目"
RS.Update
Debug.Print RS.Fields("ID").Value
MsgBox Cn.Execute("SELECT @@IDENTITY").Collect(0)
RS.AddNew "DATA", "3行目"
RS.AddNew "DATA", "4行目"
RS.AddNew "DATA", "5行目"
Debug.Print RS.Fields("ID").Value
MsgBox Cn.Execute("SELECT @@IDENTITY").Collect(0)