Accessからデータを移動するには?

解決


free  2004-06-22 13:24:07  No: 114122  IP: [192.*.*.*]

店舗.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

とやってみたりいろいろと試しているのですが、さっぱりわかりません。
よろしくお願いします。

編集 削除
水無月  2004-06-22 13:36:23  No: 114123  IP: [192.*.*.*]

はじめまして。
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

編集 削除
free  2004-06-22 13:53:41  No: 114124  IP: [192.*.*.*]

水無月さん早速回答ありがとうございます。

DBをDAOで開いているのかもわかりません。

下のようには書いてあるのですが・・・
'DAOを開く
Dim db As Database, ws As Workspace
Set ws = DBEngine.Workspaces(0)
Set db = ws.OpenDatabase("店舗.mdb")

これだとまだ開いてはいないんでしょうか?
まったくの初心者のため、こんな質問まで
申し訳ありません。

編集 削除
水無月  2004-06-23 13:54:43  No: 114125  IP: [192.*.*.*]

すみません。個人的には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)のところがちょいとあやしいので動かなかったらごめんなさいです

編集 削除
やっつん  2004-06-24 22:10:20  No: 114126  IP: [192.*.*.*]

私は初心者なので「これだ!」とはいえませんが、
プロジェクトの参照設定で [Microsoft DAO 3.5 Object Library] を参照してますか?
参照していないとDAOは使えないのでは?
よく分かりませんが(-o-;

編集 削除
魔界の仮面弁士  2004-06-24 23:17:31  No: 114127  IP: [192.*.*.*]

>>> 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は使えないのでは?
参照設定せずとも使えますよ。レイトバインドで。
まぁ、参照して使う人の方が多いでしょうけれどね。

編集 削除
free  2004-06-25 09:48:10  No: 114128  IP: [192.*.*.*]

皆さんたくさんの回答ありがとうございます。とても
ためになりました。DAO 3.6は参照していたのですが、
プロパティにおかしいところがあったため
(多分・・・外部HTMLエディタだと思います)
もってこれなかったようです。

http://www.gj.il24.net/~nakasima/vb/tech/style/index.htm
このページお気に入りに追加させていただきました(*^_^*)

本当にありがとうございました。

編集 削除