• 締切済み
  • 暇なときにでも

ADODBでサーバー・DBに接続するとは・・・

初めまして、専門学校で技術の勉強をしている女子です。 ACCESSを使ってVBAでの課題をしている途中で、色々疑問が湧き、調べても解決できなくて、質問させてください(課題とは関係ないので課題を作りたいというわけではないですよ^^;)。 アクセスでカレントプロジェクトをADODBで接続して自データ(テーブル)を持ってくるのは、書籍などでもありますし、規定のコードを書いて実現できるのですが、よく聞く三層クライアントサーバーシステム(基本情報の勉強で知りました)では   【クライアント → サーバー → DB】 のようになっていると思います。例えばSQLSeverへの接続をするには   Set cn = New ADODB.Connection  CN.Provider = "SQLOLEDB"  CN.ConnectionString = "Data Source=111.199.---.+++;" & '←ここなんですが                "Initial Catalog=***;" &                "User ID=***" &                "Password=***" のように接続するようなのですが、どう解釈すればいいんだろう?と思っています。 ・疑問:これだとクライアントからSQLServerへ接続するIPアドレスしか指定していないので、サーバーOSに辿り着かないのでは・・?それともIISが自動でしてくれるのでしょうか? ・疑問:ODBCドライバという接続のしかたも調べましたが、やっぱり"Data Source="の指定を変えるだけで疑問はそのまま残ってしまいます。 自分なりに考えた事を書きたいと思います。 以下のことは私が勘違いや思い込みをしているのではないかと思っています。 なので正してくれる回答があればうれしいです。(ずうずうしくてスミマセン・・) ・何層だろうとサーバOSが、指定されているIPとDBを自動で判断し、このコードで接続できる。サーバOSの設定はDBAに詳しくなろう。 ・ではなくて、やっぱりサーバOSへの接続を記述して確立してから、改めてDBへの接続を記述しないとだめ。 ・VBAの記述はこれでよし、でもSQLSeverの設定でクライアントの許可をすればいいんだよ。 ・同じくVBAはこれでよい、でもサーバOSの設定でクライアントの許可を・・。 など考えています。何か根本的に理解していないことがありそうで、、また色々調べて本やネットをたくさん見ているために情報が整理できずに、間違った考えになっているのでは。と苦しんでいます。 実は先生や周りの友人に聞いても「たぶんそれでいいんじゃない?」とあやふやなんです(ーー;) そして私自身もIISやサーバOS、DBサーバの理解が足りていない事は実感しています。 現役でコードを書いている方や設定をされているかたにお話しを聞きたくて質問してみました。 面倒でなければ簡単なコードを記述して頂けるとありがたいです! ちなみに今はマイクロソフト群で勉強していますが、これをクリアしたらこんどはオラクルやMYSQLなどへの接続もしてみたいと思っています(学校に環境があるので^^)。 VISUAL STUDIOを使って(コードはVBですが)DB接続してみても、GUIで簡単にできすぎて、余計に理解ができませんでした。 長くなりましてすみませんでした。 なにかアドバイスや参考になることでも構いませんので、よろしくお願いします。 どんなに長い回答でも必ず読ませて頂きます!むしろ歓迎です!

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数387
  • ありがとう数3

みんなの回答

  • 回答No.2
  • nda23
  • ベストアンサー率55% (773/1384)

アプリケーションには様々な形態があります。 Webアプリケーションの場合 (1)クライアントが要求をサーバに送る。 (2)サーバはクライアントに応答を返す。 ここで、サーバがDBを操作する必要があり、 しかも同じマシンでない場合はDBサーバへ 接続して操作します。 つまり、クライアント→サーバ→DBサーバ という感覚です。 クライアント/サーバの場合 クライアントは必要な資源をサーバから取得 します。情報はサーバから供給されますが、 実行するのはクライアント側プロセスです。 例えばAccessでDBサーバ上のテーブルを 参照するなどがその例で、以下の感じです。 クライアント→DBサーバ いずれにしても、DBを扱う場合はDBサーバに アクセスする訳です。 >何層だろうとサーバOSが、指定されているIPとDBを自動で判断し 違います。自動で判断できるOSやコンテナは ありません。必ず相手先アドレス、サービス名、 ユーザID、パスワードなどを記録しています。 例え、WebサーバとDBサーバが同一マシン だとしても指定が必要です。 >SQLSeverの設定でクライアントの許可をすればいいんだよ 「クライアントの許可」って何でしょう? 先程も言いましたけど、「???→DBサーバ」の 左側は接続可能であれば何でも良いのです。 実際の業務ではプログラム中に定数で接続先を 定義することは絶対にありません。 何故なら、環境が変わって、DBサーバのアドレスや サービス名が変わることを想定しなければならない からです。特に開発中のテストDBと本番のDBは 構成は同じでもIPアドレスは違います。 テストの完了したプログラムは1文字(例えコメント) でも修正できません。 Visual Studio では確かConfigファイルに接続文用の 文字列が記録されてた記憶があります。 プログラムではここの内容を読み出して接続している はずで、これならConfigを変更するだけで、接続先を 変えられます。

共感・感謝の気持ちを伝えよう!

  • 回答No.1
  • layy
  • ベストアンサー率23% (292/1222)

参考で。 業務では、本番環境とテスト環境とあるので、接続先を変えるその都度『ここ』を修正してコンパイルというのは非効率。なのでINIファイルを用意して変数で記述した切替をよくみます。ODBCも同じ感覚。プログラム本体を修正しなくてもいい使い方を考えるのも応用の1つです。

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • dbへの接続について

    dbへの接続について Visual Basic2008でVBを勉強中の者です。初心者です。 SQL serverと接続するやりかたを参考書を頼りにコーディングして接続などは問題ないのですが、 プロシージャごとに毎回DBへの接続文字列を指定して接続して、、とやっているのですが何か 無駄なことしている気がしてきました。(同じコードが各フォームの各プロシージャにあるので) DBサーバの情報が変わったときなどもコードを修正するのが大変だと思いました。 こういう場合、何かいい方法はありませんでしょうか?

  • Windows2008サーバーでODBC接続

    Windows2003サーバーからWindows2008サーバーにしたらODBC接続出来なくなりました。 Windows2003サーバーの時にはうまくいったいたので、いろいろ調べてみたのですが、 64ビットOSで 32bit版ODBC設定は、「C:\Windows\SysWOW64\odbcad32.exe」より行う。 と書いてあったので、そのようにしたのですが、 ODBCのシステムDSNの設定自体は認識しているようなのですが、 「指定された_DSN_には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています」 とIISのログに出ます。 ちなみにページのASPの部分に Set conn = Server.CreateObject("ADODB.Connection") Set rs_AP = Server.CreateObject("ADODB.Recordset") conn.open "DB001" と書いています。 データベースはAccess2003で作成したものです。 Access2003がダメなのかと思いAccess2007で作成したものを、Access2007以降のドライバーをダウンロードしてインストールし設定してやってみたのですが、同じ結果でした。 OSのインストールからIISの設定までに何か不備があるのでしょうか? 中途半端な初心者で申し訳ないのですが、手取足取り、ご教授願えないでしょうか? よろしく御願いします。

  • WebサーバーのDBサーバー

    どなたか、教えて下さい。 今回Webサーバーの構築を行なうのですが、それにあたって質問があります。 ものすごい単純なことなのかもしれませんが。教えて下さい。 Webサーバーを1台、DBサーバーを1台構築しようと考えています。 Webサーバーには、IISを導入しようとかんがえていますが、 DBサーバーって、何か、特別な、Webの物の設定て必要なのですか? 普通のDBサーバー(ファイル)で構わないのでしょうか? すいません。お教えください。 今回Webサーバーと、ファイルサーバー(DB)が違うマシンなのは、 はじめてなもので・・・・・

  • クライアントからサーバのDBに接続できない

    いつも参考にさせていただいております。 【質問内容】 サーバにMySQLをインストールして、そのDBにクライアントからAccessなどをフロントエンドとして使いたいと思っています。 しかしODBCの接続テストでエラーになってしまいます。 知識不足は否めませんが、何か指摘がございましたらお願いします。 【環境】 ■サーバ側 OS:Windows2000Server DBMS:MySQL4.0.21 ■クライアント OS:WindowsXPSP2 ODBC:MySQL ODBC 3.51.04

    • ベストアンサー
    • MySQL
  • DB接続ができなくなって困っています!

    いつも参考にさせていただいております。 今回、自宅のPCに構築した開発環境のDBに、急に接続できなくなりました。 ==================================== 【開発環境】※ASP環境 OS :windows 8 IIS:8.0 DB :(1)MySQL 5.5.32   ※「mysql-connector-odbc-5.2.5」もインストール済。  (2)Access2013 ==================================== 先日まで、問題なくDBに接続できていましたが、寝ぼけて何かの設定を変えてしまいました。 ※恥ずかしながら、気づいたら設定変更後で何の設定を変えたのか不明です。。。 すると、今まで正常に接続できていたMySQLとAccessが、以下のエラーで接続できなくなりました。 ==================================== 【MySQL接続】 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバーが見つかりません。 【Access接続】 Microsoft OLE DB Provider for ODBC Drivers エラー '80004005' [Microsoft][ODBC Driver Manager] 指定された DSN には、ドライバーとアプリケーションとのアーキテクチャの不一致が含まれています ==================================== なお、接続箇所のロジックは以下となります。 ==================================== 【MySQL接続】 Set oCn = Server.CreateObject("ADODB.Connection") oCn.Open UDL_FILE(※1), "", "" ※1 上記「UDL_FILE」は、以下の内容を設定しているUDLファイルを読み込んでいます。 ------------------------ [oledb] ; Everything after this line is an OLE DB initstring PROVIDER=MSDASQL;DRIVER={MySQL ODBC 5.2 Unicode Driver};SERVER=localhost;USER=hogeU;PASSWORD=hogeP;DATABASE=hoge; ------------------------ 【Access接続】 Set poCnMdb = Server.CreateObject("ADODB.Connection") poCnMdb.Open DNS(※2), "", "" ※2 上記「DNS」は、ODBCデータソース アドミニストレーター(32bit版)で登録したシステムDSNです。 ------------------------ ドライバー:Microsoft Access Driver(*.mdb) ------------------------ ==================================== MySQLやODBCドライバーの再インストールを試みましたが、上記エラーが解消されません。 自業自得なのは重々承知しておりますが、復旧できなくて大変困っています。 お忙しいところ申し訳ありませんが、復旧方法のご教授をお願いいたします。 以上です。

  • WEBサーバとDBサーバ

    お世話になっております。 WEBサーバは不特定多数が接続できる公開サーバです。 このサーバでIISを動かしASP.NETで構築するのですが、非公開のDBサーバとの通信をするわけですが、この時注意する点はないでしょうか。 イントラネットなどだと、VS2005や2008でのサーバエクスプローラで接続情報を作れますが、こういったことが公開サーバと非公開のDBサーバで間で簡単にできるものでしょうか? 実機には、まだ移せないのですが、前もってある程度予想される問題を知っておきたいので質問させて頂きました。 わかりづらい文章かとおもいますが、よろしくお願いいたします。

  • VB6.0とaccessのDBを接続する

    初めまして。 件名のようなことを実行する際、 以下のソースを参考にしようと思ったのですが、 ******************************************* Dim cn As New ADODB.Connection Dim rc As New ADODB.Recordset ' 接続を確立する cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\My Documents\db1.mdb;" ' テーブル名を指定してレコードセットを作成する rs.Open "Table1", cn, adOpenKeyset, adLockOptimistic ************************************* > cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _ > "Data Source=C:\My Documents\db1.mdb;" この部分の接続文字はどのようにしたら取得できるのでしょうか? SQLserverのときは、コンポーネントから Microsoft ADO Data Control 6.0(AP4)(OLEDB) を追加し、プロパティでOLE DBプロバイダを選択して接続文字を取得したのですが、accessに繋ぐのは初めてで、わかりません。 どなたか宜しくお願いいたします!!

  • VB6.0でDB接続する際に切断時の処理が遅い

    VB6.0のADOで社内LAN上のサーバー(共有PC)内のデータベースファイル(Accesss2003のmdbファイル)へ接続、データ登録を行なっていますが、接続を閉じる際にcn.Close以降の処理で30秒近い時間がかかっています。 昼休み等で接続するユーザーがいない場合も処理時間がかかっています。 テストの為、同じmdbファイルをコピーし、別名のファイルに接続するように変更した場合は 1秒程度で終了します。(下記ソースの(1)と(2)を入れ替え) データ数は約2000件、ファイル容量17MB 接続するユーザーは最多で10名程度、各クライアントのPCで下記コードのEXEファイルを実行して 接続、データ登録しています。 原因、対策案等をご教授ください。 ---------------------------------------- Public Sub DB_ACCESS() Dim cn As ADODB.Connection Dim RS As ADODB.Recordset Set cn = New ADODB.Connection Set RS = New ADODB.Recordset Debug.Print "TEST-1: ", Time Access_DB_Source_File = "\\PC-SERVER\DB\Data_File.mdb" ---------- (1) 'Access_DB_Source_File = "\\PC-SERVER\DB\Data_File_Test.mdb" ---------- (2) cn.ConnectionString = _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source = " & Access_DB_Source_File & _ ";Jet OLEDB:Database Password=otakast2061;" cn.Open 'この部分にデータ参照、登録等を行う処理が入る。 ' RS.Close Debug.Print "TEST-2: ", Time cn.Close Set RS = Nothing Set cn = Nothing Debug.Print "TEST-3: ", Time End Sub

  • VB(.NET)でサーバー上のDB(ACCESS)にInsert

    IIS5.0の導入されているサーバにACCESSのMDBがあります。 このデータベースにインターネットを介して、レコードの Insert・Updateを行いたいです。 クライアント側のアプリはVB(.net)を利用して作成する つもりでいるのですが、直接サーバ上のDBに接続する事は 可能な物でしょうか? それとも、サーバーサイドに待ち受けプログラムを常駐させ クライアントからはHTTP経由等で情報を投げて、insert・Update は、サーバーサイドプログラムが行う様な2段構えにしなければ ならないのでしょうか? ご存じの方おられましたら教えてください。

  • 2つの異なるサーバーのDBを扱う

    現在、Visual Studio 2005(BASIC) を使って、Aのサーバー(IIS)に画像データを貯めるWebプログラムを作成しようとしています。この管理にはMDB形式のDBを使用する予定です。 ところが、このサービスを利用できるユーザーの管理は、Bのサーバー(UNIX MySQL)のDBで管理されています。 このように、Aのサーバーで動作するWebプログラムからBのサーバーのDBに接続することは可能なのでしょうか?