ADOでDBGridを使用したい。

解決


がく  2002-07-08 19:42:03  No: 104499

今、アドレス帳っぽいプログラムを作成しています。
DBはSQLサーバでADOを使っています。

Form_load時にrecordsetの内容をDBGridに表示させたいと思いますが、
エラーが出て表示されません。

Form_Loadのコードは以下のように作っています。

これを実行すると、
クラスはオートメーションまたは予測したインターフェースを
サポートしていません。

というエラーが表示されてしまいます。

コードの記述方法が違うのでしょうか?
どなたか教えていただけませんか?よろしくお願いします。

Private Sub Form_Load()
    
    Set cn = New ADODB.Connection
    cn.ConnectionTimeout = 30
    cn.CommandTimeout = 30
    
    cn.Open "Provider=SQLOLEDB;" & _
            "Data Source=(local);" & _
            "Initial Catalog=address;", "sa", "password"
    
    Set rs = New ADODB.Recordset
    rs.Open "address", cn, adOpenDynamic, adLockBatchOptimistic
    
    Set DBGrid1.DataSource = rs
    

End Sub


Say  2002-07-08 20:09:28  No: 104500

残念ながら、DBGridはADOに対応していません。

DAO + DBGrid もしくは
ADO + DataGrid 
のいずれかの組み合わせでご使用下さい。


がく  2002-07-08 20:43:16  No: 104501

早速ありがとうございます。

ADOでDBGridはサポートしていないんですね。

DataGridを使用して無事にできたのですが、
DataGridを使ったのが初めてでよくわからないところがあるのです。

上記のプログラムのSet DBGrid1.DataSource = rsの部分を以下のように変更し
実行すると、行セットにはブックマークを設定できませんというエラーが
表示されます。

Set DataGrid1.DataSource = rs

そこで色々調べてみると、CursorLocationプロパティで
レコードセットのカーソルを指定すると良いという事がわかり設定したら、
無事にできました。

    Set rs = New ADODB.Recordset
        rs.CursorLocation = adUseClient

    rs.Open "address", cn, adOpenDynamic, adLockBatchOptimistic
    Set DataGrid1.DataSource = rs

このレコードセットのカーソルを定義するというイメージがどうしても
つかめません。なぜこのような事をする必要があるのでしょうか?

よろしくお願いします。


Say  2002-07-08 21:28:08  No: 104502

>レコードセットのカーソルを定義するというイメージ
カーソルを継承してレコードセットが構成されている、
というほうが正しいでしょう。
通常はデフォルト設定が用いられるため、とりわけカーソルを
意識する必要がありませんが、普通に
adoRst.Open strSQL,adoCnn 
とやってるときも実はデフォルトカーソルを元に
レコードセットが構成されています。

ちなみにデフォルトはadUseServer で、
プロバイダまたはドライバのカーソルサービスを使用します。

adUseClient に設定してローカルカーソルサービスを使用すれば、
一般にサーバカーソルより多くの機能を利用できます。


がく  2002-07-08 22:49:10  No: 104503

なるほど〜わかりました。

とても助かりました。ありがとうございます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加