今、アドレス帳っぽいプログラムを作成しています。
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
残念ながら、DBGridはADOに対応していません。
DAO + DBGrid もしくは
ADO + DataGrid
のいずれかの組み合わせでご使用下さい。
早速ありがとうございます。
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
このレコードセットのカーソルを定義するというイメージがどうしても
つかめません。なぜこのような事をする必要があるのでしょうか?
よろしくお願いします。
>レコードセットのカーソルを定義するというイメージ
カーソルを継承してレコードセットが構成されている、
というほうが正しいでしょう。
通常はデフォルト設定が用いられるため、とりわけカーソルを
意識する必要がありませんが、普通に
adoRst.Open strSQL,adoCnn
とやってるときも実はデフォルトカーソルを元に
レコードセットが構成されています。
ちなみにデフォルトはadUseServer で、
プロバイダまたはドライバのカーソルサービスを使用します。
adUseClient に設定してローカルカーソルサービスを使用すれば、
一般にサーバカーソルより多くの機能を利用できます。
なるほど〜わかりました。
とても助かりました。ありがとうございます。
ツイート | ![]() |