VBからAccessへODBCを使って接続せるには?


XYZ  2005-09-24 20:38:39  No: 125694

VBを始めたばかりで初歩的な質問かも知れませんが、VBでデータコントロールなどを使わないでAccess内にあるデータベースをVB上に接続する仕方(コード)を教えてほしいです。


Dental  2005-09-24 22:23:46  No: 125695

データコントロールって書いてるので、多分VB4〜VB6あたりだと思うけど。

> VBからAccessへODBCを使って接続せるには?
どうしてもODBCで接続したいのですか? 普通はODBC経由での接続はしませんよ。
一般的な手法は、ADO または DAO を使って接続する手法なんですが、
この場合はODBCは使われません。

>(コード)を教えてほしいです。
使い方は、ヘルプのチュートリアルにも書かれていますし、
CD-ROM内にはサンプルプログラムも付属していますよね?

それでも分からないなら、入門者向けのサイトを探してみては?
http://homepage2.nifty.com/inform/vbdb/
http://homepage1.nifty.com/rucio/main/database/index_db.htm

サンプルを見てもわからないって事なら、どこがわからないのか
具体的に書いてくれないと、こっちも具体的な回答はできないです。


XYZ  2005-09-24 23:07:35  No: 125696

返答ありがとうございます。一般的ならDentalの言う通りADOやDAOを使うのですが、今回はそれを使わずに、Access内のデータベースをVB6.0に接続する課題が出ました。何分いままで、プログラミングをしたことがないもので基本がわからないとこがあります。
データソースを使ってとも言われたのですが・・・。


Dental  2005-09-25 00:00:44  No: 125697

>一般的ならDentalの言う通りADOやDAOを使うのですが、
……では私も呼び捨てで書かせてもらいましょう。

XYZが出された課題の内容を知らないのですが、本当の本当に
"ADO"(というかOLEDB) も "DAO" も駄目なのですか?

それって、課題としてはかなり首を傾げてしまうのですが、
"ADO  データ  コントロール" とか "データ コントロール" が
駄目というだけではなく、ADOやDAO自体が駄目って事なんですよね。

ADOもDAOも使わずにAccess内のデータベース…つまり、mdbファイルを
読むとなれば、あとは "RDO" か "ODBC API" ぐらいしか選択肢は
残って無いですよ。

しかも、"ODBC API"は初心者が手軽に扱えるような物では無いので除外。
すると事実上、"RDO" しか使えるものは無いんです。

ま。RDO を使うなら、ODBC経由での接続となるので、初めの条件自体は
満たせるんでしょうけど、これって、VBからmdbファイルを読むにしては、
非常に稀な状況です。

それでも構わないという事であれば、ヘルプの "キーワード" 検索で
「リモート データ オブジェクト」という言葉を調べてみましょう。
そこに、RDOの詳しい説明と、実際のコード例が書かれています。

……ところで、現在使ってるVB6のエディションは何ですか?
RDOを使うには一つハードルがあって、VB6でRDOを使うには、VB6の
"Enterprise Edition" が必要になるんですよ。
もし、"Professional Edition" や "Learning Edition" を使っているなら
RDO という選択肢すら消えてしまうのですが。

> 基本がわからないとこがあります。
その状態で、いきなりデータベース操作の課題を出されたのですか…(合掌)
# まさか、基本がわかっていないのは、課題を貰ったほうではなく、
# 課題を出している方だった、なんてオチはあるまいな。

> データソースを使ってとも言われたのですが・・・。
そりゃまぁ。データソースが無ければ接続どころじゃないですしねぇ。
(今回のデータソースは mdbファイルなのですよね?)


XYZ  2005-09-25 00:22:30  No: 125698

すいません!!こいいったページに質問するのが初めてだったのでペンネームのまま書いてしまいました。もし、気分を悪くさせてしまったら、すいません。

以前VBの勉強をしてる際に、ADOやデータコントロールを使っての勉強を一応したんです。実際これを使えば簡単にデータを取ってくることもできるのは理解しているつもりです。
今回はその二つのコントロールを使わずに、Accdess内にあるデータベースをVB内のテキストボックス内に挿入するという課題なのです。

もしかしたら、説明不足かもしれませんが、実際今までVBの本をみながら、プログラムを作っていたので、Accessからデータを読み込んで、VB上にデータを持っていくっていうことをしたことがありません。

それと、VB6のエディションですが、たぶん”Professional Edition" や "Learning Edition" ではないとおもいます。

データソースはmdb.ファイルです。


Dental  2005-09-25 02:17:54  No: 125699

> ADOやデータコントロールを使っての勉強を一応したんです。
> 今回はその二つのコントロールを使わずに、

ちょーっと待った。「その二つ」ってどれとどれです?

"データコントロール"は、なるほど確かにコントロールですよ。
でも、"ADO" はコントロールじゃ無いんですけどね…。もしかして、
"ADO" を "ADOデータコントロール" と混同してませんか?

"ADOデータコントロール(ADODC)" や "データコントロール(DATA)" や
"リモート データ コントロール(MSRDC)"なら、文字通りコントロールなので、
フォームに貼って使うしかないんですけどね。

"ADO" や "DAO" や "RDO" による接続なら、コントロール経由での接続じゃ
無いので、特に問題ない気がするんですけど…本当にADOとかじゃ駄目なんですか。
(まぁ、"DataEnvironment" での接続は NG かも知れないけど)

> VB6のエディションですが、たぶん
なぜ "多分" なんですか……。ちゃんと確認して欲しいです。
こちらでは、そちらの環境を調べる事なんてできないのですから。

購入した時のVBの箱を見れば、エディションが書かれてますし、箱が無くても、
起動時に一瞬表示される画面にエディションが書かれていたりしません?
(私のVB6は、起動時に Visual Basic 6.0 Enterprise Edition と表示される)

> 説明不足かもしれませんが
説明不足というか。どうも話が噛み合ってない気がするんですよ。
質問の内容を読み返してみても、どんな課題なのかどうにも曖昧で。

たとえば。質問のタイトルには ODBC という言葉がありましたけど、
質問内容を見ると、どこにも ODBC の話が出てきてないですよね?
なので、本当にODBCが必要なのか、私にとっては未だに曖昧なままです。

一応、DAO も ADO も RDO も、いずれも ODBC接続をサポートしていますから、
課題の都合で、本当にODBCしか選択肢が無いのなら、それで回答します。でも、
ODBCが必須というわけじゃないなら、他の方法を使った方が良いです。

"DAO" は、本来はmdb専用に作られてますが、ODBC接続もサポートしています。
でも、mdb接続をDAOからODBC経由で行うなんて回りくどい事は、普通はしません。
本来のmdb用機能を使って接続した方が、よほど効率が良いですからね。

"ADO" は、OLE DBを使用することで、数多くのデータソースに対応しています。
そしてその中には、ODBC用のOLE DBもあります。でも、ODBC経由でmdbを開く事は
あまりしません。Jet用OLE DBを使って接続するたほうが一般的です。

"RDO" は、ODBC接続専用に設計されてます。でも、mdbを開くのであれば、
ADOやDAOの方が効率がよいので、RDOはあまる使われません。そもそも、
Enterprise Editionでしか利用できないという制限があるので、ADOが
登場した今では、わざわざ RDO で接続する必要性自体がほとんど無いです。

それともう一つ曖昧な点が。

質問の流れから、コントロールは不可、って事までは分かるんですけど、
それじゃ、コントロール以外の何なら良いのか、って点がやっぱり不明瞭。

まずは一般的な ADO や DAO の話をしてみたところ、それらについては
>> ADOやDAOを使うのですが、今回はそれを使わずに
と断られましたよね?
まぁ、駄目なら駄目でも良いのですが、代替案で RDO の話をしてみても、
RDO すら NG なのか、それとも RDO なら OK なのかすら答えてくれてませんし。

こうなると、「じゃあ、どんな接続法なら良いの?」って事になっちゃって、
具体的なコードの話まで持って行けないです。


いぬかみっ!  2005-09-25 02:35:49  No: 125700

> VBでデータコントロールなどを使わないでAccess内にあるデータベースをVB上に接続する
だから、データコントロールは使ってはいけないけどADOは使ってはいけないといってないのでADOを使ってアクセスすればいいのでは?


いぬかみっ!  2005-09-25 02:37:33  No: 125701

Private Sub Command1_Click()
Dim cn As ADODB.Connection 'データベースへの接続情報を保持するオブジェクト
Dim rs As ADODB.Recordset 'データベースの内容を出力するレコードセット
Dim mySQL As String 'SQL文を保持

    mySQL = "SELECT * FROM テーブルの名前"
    
    Set cn = New ADODB.Connection
    cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
                        & "Data Source= " & App.Path & "\db1.mdb"
    cn.Open
    Set rs = New ADODB.Recordset
    With rs
        .ActiveConnection = cn
        .Source = mySQL
        .CursorType = adOpenStatic
        .LockType = adLockOptimistic
        .Open
    End With
    'レコード空白でエラーが出たとき
    On Error GoTo Error01
        Text1.Text = ![列の名前]
        rs.Close: Set rs = Nothing
        cn.Close: Set cn = Nothing
    Exit Sub

Error01: 'エラーのときの処理
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
    Resume Next
End Sub

では、だめなの?
Access 2000 の形式のデータベースに接続する場合プロバイダは Microsoft.Jet.OLEDB.4.0 以上のバージョンを指定します。


いぬかみっ!  2005-09-25 02:39:05  No: 125702

書き間違えました。
![列の名前]のところはrs![列の名前]です。


Dental  2005-09-25 03:45:24  No: 125703

>> VBでデータコントロールなどを使わないでAccess内にあるデータベースをVB上に接続する
>だから、データコントロールは使ってはいけないけどADOは使ってはいけないといってないので
ADOは使えないと、少なくとも2回言ってます。

>> ADOやDAOを使うのですが、今回はそれを使わずに

>> ADOやデータコントロールを使っての勉強を一応したんです。
>> 今回はその二つのコントロールを使わずに、

それに、
>> それって、課題としてはかなり首を傾げてしまうのですが、
>> "ADO  データ  コントロール" とか "データ コントロール" が
>> 駄目というだけではなく、ADOやDAO自体が駄目って事なんですよね。
という問いに対して否定もしていません。肯定もしていませんが、
ADOを使ってよいのかどうかは、今のところはグレーではないかと。

> ADOを使ってアクセスすればいいのでは?
それで解決するなら、最初に答えた
 http://homepage2.nifty.com/inform/vbdb/
 http://homepage1.nifty.com/rucio/main/database/index_db.htm
が無視された事になるので、ちょっと悲しいです。

上のURLでは、文字通り「ADO で Accessデータベースに接続する」って
項目があるのだし、下のURLでは、「3.レコードの移動」あたりから、
ADODCを使わずに、レコードを表示するサンプルがあるのだし。

> では、だめなの?
サンプル提示、Good Jobです。>いぬかみっ!さん

あと追加するなら、EOF判定のコードが必要だと思います。
一見、エラー処理で回避しているように見えますけど、
Resume Next後の2重解放でエラーになりそうな気がするので…。


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

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






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