次の方法で共有

AccessからADOでSQLServerのテーブルにアクセスする方法

Anonymous
2014-07-21T04:01:47+00:00

データベース:SQLServer 2008 R2 Express

フロントエンド:Access 2010

SQLServer上のテーブルをAccessでテーブルリンクしています。(「外部データ」→「ODBCデータベース」)

AccessからADOでSQLServerのテーブル(ex. 商品マスタ)を参照する方法として、

・リンクテーブルを使用する方法

   Set Cnn = CurrentProject.Connection

   rst.Open "SELECT * FROM dbo_商品マスタ WHERE ・・・", Cnn

・ODBCデータソースを使用する方法

   Set Cnn = As New ADODB.Connection

   Cnn.Open "DSN=DSN名;UID=aaa;PWD=bbb; ・・・"

   rst.Open "SELECT * FROM dbo.商品マスタ WHERE ・・・", Cnn

と大きく上記2通りの方法があるかと思いますが(いや、他にも色々な方法があるとは思いますが)、

技術的(アーキテクチャ?)にどう違うのか、「こういうケースではこちらがいい」というような事を知りたいのですが、

どなたかご教授いただけませんでしょうか。

もしくは、そのあたりの事について解説されているようなサイトをご存じでしたら教えていただけると有り難いです。

よろしくお願いいたします。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2014-07-21T21:44:42+00:00

MukkuMukuです。

SQL Server + Access で DAO か ADOか ということなのでしょうが、

DAO:ACE(Access Connectivity Engine) を経由してSQL Serverを参照

ADO:SQL Serverを直接参照できる

ということです。

排他制御などの詳細な管理にはADOを使用するほうが機能的にもよさそうなのですが、そもそもその機能すべてが必須なのか?ということもしくはDAOで充分ということも考えられます。

例えばSQLの記述については

DAO:Access SQL で記述 、またはパススルークエリの使用

ADO:T-SQLで記述

になりますから メリット/デメリット は使う人それぞれだから一概には言えないかなと。

例に出している、

・リンクテーブルを使用する方法

   Set Cnn = CurrentProject.Connection

   rst.Open "SELECT * FROM dbo_商品マスタ WHERE ・・・", Cnn

というのは、SQL Serverへの参照はACE経由(DAO)になっているので勿体ないかな。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2014-07-30T04:14:47+00:00

    まだまだ勉強しないといけないなと痛感しました。

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

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2014-07-22T14:43:45+00:00

    MukkuMukuです。

    質問内容にあるような環境(DBはSQLServer、フロントエンドはAccess)で、

    ・リンクテーブルを使用する方法

      ⇒ クライアント上で動作(一旦全レコードをローカルに取得) ・・・という事になるでしょうか?


    誤った情報をお持ちの方が多いですが、そのようなことはありません。

    ODBC リンク テーブルを使用する場合、条件に適合するレコードの主キーを取得し該当するレコードを取得するような動作をします。ポイントは主キーです。

    全レコードを取得しなければならないのは、例えば、条件がAccess独自の評価が必要な集計クエリなど。ですが回避する方法はあるでしょう。

    ・ODBCデータソースを使用する方法

      ⇒ SQLServer上でSQL文が実行される。 ・・・という事になるでしょうか


    Connection が SQL Serverへの接続であるならば、です。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2014-07-22T03:13:23+00:00

    MukkuMuku 様、ご返信ありがとうございました。

    リンクテーブルを使用する方法だと「SQL Serverへの参照はACE経由(DAO)になっている」のですね。

    それを理解していなかったので大変勉強になりました。

    ある会社様からプログラムの修正を依頼されまして、

    そのソースを開いてみたところ、質問した内容(2通りの方法でコーディングされている)になっておりました。

    複数人で作成したと思われ、意図があってそうしているのか、何も考えず各自がコーディングした結果そうなってしまったのか・・・。

    MukkuMuku様がおっしゃるように排他制御についても見てみたのですが、後者(ODBCデータソースを使用する方法、つまり、ADO)でコーディングされている箇所であっても排他制御を意識したコーディング(トランザクション処理)は行われておらずで・・・。

    あと、もし分かれば教えていただきたいのですが、

    Access(JET)はネットワークトラフィックが懸念される事がありますが、

    (データベースエンジンがクライアント上で動作するため一旦全レコードをローカルに取得する)、

    質問内容にあるような環境(DBはSQLServer、フロントエンドはAccess)で、

    ・リンクテーブルを使用する方法

      ⇒ クライアント上で動作(一旦全レコードをローカルに取得) ・・・という事になるでしょうか?

    ・ODBCデータソースを使用する方法

      ⇒ SQLServer上でSQL文が実行される。 ・・・という事になるでしょうか?

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません