VB6.0用掲示板の過去のログ(No.1)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [過去ログ] [管理用]

投稿日: 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)


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- Web Forum -