質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

解決済

Access DAO→ADO接続に変更 ADO接続の正しいロジックを教えてください。

nekomura
nekomura

総合スコア132

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

2回答

0評価

1クリップ

29901閲覧

投稿2016/05/12 01:58

編集2016/05/12 02:28

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

Accessで、テーブルデータやクエリを取得して使用するプログラムを作っています。
元のコードは、自身のテーブルデータやクエリからDAOを使用してデータを取得しています。
同様の内容を、
・Access自身のテーブル→SQLserverからのリンクテーブル(ODBC)
・DAO接続→ADO接続

と、書き換えたいのですが、ADO接続の方のコードの書き方が合っているか調べてもピンとこないのと、
エラーが出る為困っています。

元のコードは以下です。

Dim db As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim rs3 As DAO.Recordset Set db = CurrentDb() Set rs1 = db.OpenRecordset("顧客マスタ") //Accessテーブル Set rs2 = db.OpenRecordset("Q売上") //Accessクエリ Set rs3 = db.OpenRecordset("Q売上明細") //Accessクエリ '-- いろんな処理

上記のコーディングで、問題なく目的のデータを取得できます。

同内容を、テーブルはSQLserverからのリンクテーブル(ODBC)を作り、ADO接続を用いて
同じようにデータを取得したいのですが、うまくいきません。

問題のADO接続のコードは以下です。
※追記(下記ADO接続コードにおける各テーブルとクエリの説明)
・顧客マスタ→SQLserverにあるテーブル。Accessにあるテーブルと同名のテーブル(顧客マスタ)。
リンクテーブルとしてAccessにおいてあります。
・Q売上→上記リンクテーブルを使用して作ったクエリ
・Q売上明細→通常のAccessのクエリ

Dim cn As New ADODB.Connection Dim rs1 As New ADODB.Recordset Dim rs2 As New ADODB.Recordset Dim rs3 As New ADODB.Recordset Dim strConnectionString As String 'SQLServer接続文字列 strConnectionString = CStr(DLookup("connectionString", "接続文字列テーブル", "ID= 2")) //Access自身の"接続文字テーブル"に、SQLserverの接続文字列を格納し、取得しています。 //このロジックで接続文字列は問題なく変数に代入されています。 cn.Open strConnectionString rs1.Open "顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly //リンクテーブル rs2.Open "Q売上", cn, adOpenForwardOnly, adLockReadOnly //リンクテーブルで作ったクエリ rs3.Open "Q売上明細", cn, adOpenForwardOnly, adLockReadOnly //Accessクエリ //上記の3行、レコードセット.Openのところがデバックでカーソルのあたる箇所 '-- いろんな処理

・エラー箇所は一番下の3行、レコードセット.Openのところで、
・[実行時エラー'2147217900(80040e14)':
ストアドプロシージャ’テーブル名(またはクエリ名)’が見つかりませんでした。]

と、エラーメッセージが出ました。
また、接続文字列に誤りはありません。

コーディングの仕方に問題があるのかと思い、ここで相談させていただきました。
有職者の皆様方、どうかご教示のほどをよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

ttyp03

2016/05/12 02:07

以前の質問と同様かと思いますが、確認です。 SQLServerには、Accessにあるテーブルと同名のテーブル(顧客マスタ、Q売上、Q売上明細)があり、それらのテーブルをAccessのVBAから参照したい、ということで正しいですか?
nekomura

2016/05/12 02:13

ttyp03様 ご指摘ありがとうございます。 >SQLServerには、Accessにあるテーブルと同名のテーブル(顧客マスタ、Q売上、Q売上明細)があり、それらのテーブルをAccessのVBAから参照したい はい。実際にSQLserverにはそのテーブルがあり、リンクテーブルとしてAccessにおいてあります。 しかし、顧客マスタ以外はクエリです。 コードの中にコメントとして書いていただけなので、早速本文も編集します。 ありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。