店舗.mdbからDAOを使い、VBのcmb_miseというコンボボックスに
店名をもってきたいと思っています。本を見ながら
Private Sub cmb_mise_Click()
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("店舗.mdb")
Set rs = db.OpenRecordset("店名")
cmb_mise.AddItem rs.店名
Next
cmb_mise.Text = cmb_mise.List(0)
End Sub
とやってみたりいろいろと試しているのですが、さっぱりわかりません。
よろしくお願いします。
はじめまして。
DBはDAOで開いているのですね。
上記の
cmb_mise.AddItem rs.店名
Next
cmb_mise.Text = cmb_mise.List(0)
の部分を次のようにして下さい。
With cmb_mise
.Visible=False
rs.MoveFirst
Do
.AddItem rs("店名")
rs.MoveNext
Loop Until rs.EOF
'ここでレコードセットとDBをとじます
............................
.ListIndex=0
rs.Close
.Visible=True
End With
水無月さん早速回答ありがとうございます。
DBをDAOで開いているのかもわかりません。
下のようには書いてあるのですが・・・
'DAOを開く
Dim db As Database, ws As Workspace
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("店舗.mdb")
これだとまだ開いてはいないんでしょうか?
まったくの初心者のため、こんな質問まで
申し訳ありません。
すみません。個人的にはDAOは使わず、ADOを使っているため詳しくない部分があるのでごめんなさい。
Set db = ws.OpenDatabase("店舗.mdb") だけではDBのファイルを開いただけで、レコードセットは開いていません。
*********************************************
Dim cn As DAO.Database, rs As DAO.Recordset
Dim mySQL As String
'*** 店名テーブルの店名フィールドのみを店名の順序で取り出すSQL文
mySQL = "SELECT 店名 " _
& "FROM 店名 " _
& "ORDER BY 店名 "
'*** DBを開きます
Set db = DBEngine.Workspaces(0).OpenDatabase("店舗.mdb")
'*** レコードセットを開きます
Set rs = db.OpenRecordset(mySQL, dbOpenDynaset)
'コンボボックスに書き込みます
With cmb_mise
.Visible=False
.Clear
rs.MoveFirst
Do
.AddItem rs("店名")
rs.MoveNext
Loop Until rs.EOF
'*** ここでレコードセットとDBをとじます
rs.Close
db.Close
'*** 後処理
.ListIndex = 0
.Visible=True
End With
**********************************************************
Set rs = db.OpenRecordset(mySQL, dbOpenDynaset)のところがちょいとあやしいので動かなかったらごめんなさいです
私は初心者なので「これだ!」とはいえませんが、
プロジェクトの参照設定で [Microsoft DAO 3.5 Object Library] を参照してますか?
参照していないとDAOは使えないのでは?
よく分かりませんが(-o-;
>>> Set db = ws.OpenDatabase("店舗.mdb")
>>> これだとまだ開いてはいないんでしょうか?
mdbには接続できていますよ。>freeさん
その後、水無月さんが書かれた様に、OpenRecordsetメソッドでテーブルの内容にアクセスできます。
なお、列のデータを持ってくるときには、
rs.店名
ではなく、
rs!店名
rs!店名.Value
rs.Fields!店名
rs.Fields!店名.Value
rs("店名")
rs("店名").Value
rs.Fields("店名")
rs.Fields("店名").Value
rs.Fields.Item("店名")
rs.Fields.Item("店名").Value
などの書き方を使う事ができます。
省略可能なプロパティを明記するかどうかによって、いろいろな記述が可能ですが、私は、下記の 28. に書かれているような、『rs.Fields("店名").Value』の記述を多用しています。
http://www.gj.il24.net/~nakasima/vb/tech/style/index.htm
> プロジェクトの参照設定で [Microsoft DAO 3.5 Object Library] を参照してますか?
Access 2000以降の形式(Jet 4.0)のmdbでは、DAO 3.5ではなく、DAO 3.6を使います。>やっつんさん
DAO 3.6では、以前の形式のmdbも使えますから、参照設定するなら、3.5よりも3.6の方が良いでしょう。
> 参照していないとDAOは使えないのでは?
参照設定せずとも使えますよ。レイトバインドで。
まぁ、参照して使う人の方が多いでしょうけれどね。
皆さんたくさんの回答ありがとうございます。とても
ためになりました。DAO 3.6は参照していたのですが、
プロパティにおかしいところがあったため
(多分・・・外部HTMLエディタだと思います)
もってこれなかったようです。
http://www.gj.il24.net/~nakasima/vb/tech/style/index.htm
このページお気に入りに追加させていただきました(*^_^*)
本当にありがとうございました。