• ベストアンサー

ExcelVBAからADOで複数のDBへの接続

いつもお世話になっています。 ExcelVBAの初心者ですが、Oracle、Access、ExcelデータへADO接続してデータを表示するものをExcelかACCESSで作ろうとしています。 それぞれのデータは社内ネットワークのバラバラ位置にあるのですが、 ADOとは下記のイメージでいいでしょうか? 1.インポートする手間がない。 2.それぞれのDBが更新されたら、その前までのデータで表示される 3.3つのDBを同時に接続しても問題はない・・・ まだイメージが固まっていないのですが、上3つが気になっています。 また自宅でネットワーク環境になくても練習できるものでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>1.インポートする手間がない。 はい >>2.それぞれのDBが更新されたら、その前までのデータで表示される 基本的に、手元にデータを保存しているなら、直前のデータが表示される。 接続して、DBのデータを表示すれば、その時点での最新が表示される。 と思っておけばいいと思います。 >>3.3つのDBを同時に接続しても問題はない・・・ 基本は問題ないですね。ただ、それぞれのDBを接続して更新するなどの処理をすると、やっかいな問題が起こるかもしれません。 でも、参照するだけなら、問題ないと思います。 >>また自宅でネットワーク環境になくても練習できるものでしょうか? 自分のPCにDBサーバを入れてしまえば、練習できると思います。 なお、最近は、「社内システムを各部署が勝手に開発するのは、業務統制上好ましくない(不正・誤りの原因になる)」という理由で、「エクセルでの業務禁止!」という話を目にしたこともあります。まあ、現実実があまりない話だとは思うのですが・・・。 質問者さんの会社では、そんなことはないと思いますけどね。

okwv-first
質問者

お礼

早速の回答、ありがとうございました。 >>>基本は問題ないですね。ただ、それぞれのDBを接続して更新するなどの処理をすると、やっかいな問題が起こるかもしれません。 各DBを更新することはないので、大丈夫だと思っています。 >>>自分のPCにDBサーバを入れてしまえば、練習できると思います。 なるほど~、DBサーバですか? WEBサーバとかは聞いたことがあるのですが、初耳です。探してみます。 >>>なお、最近は、「社内システムを各部署が勝手に開発するのは、業務統制上好ましくない(不正・誤りの原因になる)」という理由で、「エクセルでの業務禁止!」という話を目にしたこともあります。まあ、現実実があまりない話だとは思うのですが・・・。 まだそこまでの規制はないようです。 各部署でおのおのDBを作っているようで、それを利用して自分の部署で検索をデータ表示させたいと考えています。 疑問が解決できて、安心しました。ありがとうございました。 またよろしくお願いします。

関連するQ&A

  • ADO接続の共有

    ACCESS2007をフロントにしてDBをSQL-Server2005Expressにして開発を 行おうとしています。 できる限りネットワークの負荷を減らそうと、ADO接続/ADOレコードセットと フォーム連結で開発したいのですが、ネットで検索するとADO接続を各画面で 行わなければならないような記述しか見あたりません。  ・検索キーワード:ADO 接続 共有 できれば、ADO接続はプログラム起動時1回で、DBデータを表示する 画面等を開く場合は、起動時に取得した接続を使い回したいのですが、 当該方法が記載されたいるようなURL等をご教示願えないでしょうか?  ・他mdbのテーブルをリンクテーブルとして使用したいため、   AccessProject(.adp)の使用は断念しました。 上記よろしくお願いします。

  • AppletからDB接続について

    いつもお世話になっております。 現在、Appletから直接、DB(Oracle9.2)に接続するPGを作っています。 しかし、appletviewerだと、表示できるのですが、dbサーバに置いて、クライアントからブラウザで表示しようとすると、以下のエラーが発生してしまいます。 「access denied(java.util.PropertyPermission oracle.jserver.version read)」 Appletではセキュリティの関係で、DB接続などができないと聞きますが、それが原因なのでしょうか? 環境ですが、 Java:J2SDK1.4.09、 DB:Oracle9.2、 JDBC:ojdbc14.jar を使っています。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • MACにインストールしたExcelからADO接続

    WindowsServer2008にSqlServer2008R2ExpressEditionをインストールしてクライアントPCのExcelからADO接続でDB参照を行っています。 これまではWindows7や8などのクライアントPCはWindowsのみでしたが、MacOSにインストールしたExcelからADO接続すると、接続できません。 そもそもMacOSから接続はできないのか、特殊な方法を使えばできるのか、わかる方がいらっしゃいましたら教えてください。 宜しくお願い致します。

    • ベストアンサー
    • Mac
  • ADO.NETでOracleへの接続について

    ADO.NET(VB2005)でoracle9iに接続したいのですが、 標準データプロバイダのSystem.Fata.OracleClientが 出てきません。 何か、特別な参照をさせる必要があるのでしょうか? ちなみに、SQLサーバー用のSystem.Data.SqlClientは 出ています。 宜しく御願いします。

  • EXCELやACCESSでDBに接続して色々な資料を作成したい。

    EXCELやACCESSに付いているVBAを使って基幹システム(DB)に接続して内容を変更したりできますか? 現在外部データーベースへの接続(EXCEL)や、 データベースのインポートやリンク(ACCESS)で接続してデータの閲覧は出来るようになったのですが、更新作業が出来ません。 それとEXCELやACCESSのVBAの勉強をしたいのですがお勧めの書籍としてはどのようなものがありますか? 自分としては「EXCEL VBA 入門」とか「ACCESS VBA 入門」とかよりも、まずはVB自体の勉強をした方がいいのかな?と思っています。 ところがVB6.0とか、VB.NETとか色々なバージョンがあるようです。 お勧めの勉強法というか、順序などありましたら教えて下さい。 宜しくお願いします。

  • EXCELをレンタルサーバーに置いて使いたい

    EXCEL2007/ACCESS2007 ACCESSのデータをADO接続して読み込むEXCELがあります。 これを社内と社外で共有して使いたいのですが、何か良い方法は ありませんでしょうか? 今HP用に借りているGMOクラウドのサーバーにEXCEL&ACCESSファイルを アップロードしてみたところ、うまくいきませんでした。 どなたか良い案を教えてください。 よろしくお願いします。

  • EXCEL VBAで複数人でのADO接続について

    環境はEXCEL2003です。 EXCELからCSVファイルを読込み、 それに対して処理を加え一覧表示するVBAを組んでいます。 CSVファイルの読込みにはADOを使用しており、 指定しているプロバイダはMicrosoft.Jet.OLEDB.4.0、 複数の人が同時に実行する可能性があるプログラムです。 ここで問題なのですが、 Dim con As New ADODB.Connection '入力ファイル接続用コネクション Dim connectionString As String 'コネクション接続用文字列 (中略) Set rs = con.Execute(SQL) とSQLを実行する際に、 複数のユーザが同時に実行すると、 一人を除いて添付のようなエラーが発生してしまいます。 調べてみたところ、 http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200401/04010032.txt こちらのエラーが近いのかと思いますが、 >JET経由でのADOでDBをオープンする場合、必ず、1ファイル >1コネクションで行って下さい。 と記載があるところを見ると、 CSV読み込みの場合も複数人での接続は無理なのかな…と思いつつあります。 ※ファイルは、読取り専用で開ければ良いのですが、  ファイルに読取り専用属性を設定したりしても効果ありませんでした。   ですが一つのデータファイルを、複数の人が利用する、 というのは普通にある処理だと思うのですが、 こういうのはどうしたら良いのでしょうか? 根本的にADO接続でいければ万事解決ですが、 この手の処理方法で上手い方法があれば教えてください。 (普通のCSV読取りではなくADOを使っているのは、 SQLの条件指定で処理がかなり簡略化出来る仕様が背景にあります。)

  • Excel → Access データをインポート

    OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

  • ADOを使いDBへ読み書きしたい

    VB初心者です。よろしくお願いします。 今、VBのActiveXドキュメントを使い、ブラウザ上で利用できるシステムを作ろうと思っています。その際、Textboxに入力されたデータをADOを使いAccess2003に格納したいのですが、うまくいきません。DAOではうまくいきました。 コードは以下の通りです。 Private Sub Command1_Click() Dim db As ADODB.Connection Dim rst1 As ADODB.Recordset Set db = New ADODB.Connection db.ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source = 'データへのパス'\zaseki3.mdb" db.Open MsgBox ("接続成功") Set rst1 = New ADODB.Recordset ☆☆rst1.Open "T-利用者", db,adOpenForwardOnly,adLockOptimistic   With rst1 .AddNew .Fields("氏名") = Text1 .Update End With rst1.Close db.Close Set db = Nothing Set rst1 = Nothing End Sub ☆☆のところでエラーが発生します。エラー内容は次の通りです。  実行時エラー'-2147217900(80040e14)': SQLステートメントが正しくありません。'DELETE'などを使用してく ださい。 環境は Windows XP, VB6.0, Access2003  です。 よろしくお願いします。

  • 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