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

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

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

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

Access

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

Q&A

解決済

2回答

33851閲覧

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

nekomura

総合スコア132

VBA

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

Access

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

0グッド

1クリップ

投稿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)':
ストアドプロシージャ’テーブル名(またはクエリ名)’が見つかりませんでした。]

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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においてあります。 しかし、顧客マスタ以外はクエリです。 コードの中にコメントとして書いていただけなので、早速本文も編集します。 ありがとうございました。
guest

回答2

0

ベストアンサー

せっかくソースコードをかけているので、その意味を考えることで解決しましょう。

VBA

1 Set db = CurrentDb() 2 Set rs1 = db.OpenRecordset("顧客マスタ") //Accessテーブル

この意味は理解できているんですよね。
これと、

VBA

1 cn.Open strConnectionString 2 rs1.Open "顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly //リンクテーブル

を対比して考えましょう。
「db」はなんですか。
「cn」はなんですか。
おまじないとしてではなく、言葉でそれを考えてみると、どうすればいいか、には辿り着くと思います。

まずそこからいってみましょう。


##(2016/05/12 14:07 のコメントの続きです。)

1つのソースコードの中でSQLServerにもAccessにも接続したいのか、SQLServerへの接続はAccessのリンクテーブルを通じて行うのかで回答が変わりますが、仮に後者の場合、

ADOのコードに
Set cn = CurrentProject.Connection

が正解です。
元のソースコードの

VBA

1Dim cn As New ADODB.Connection 2 3Dim strConnectionString As String 'SQLServer接続文字列 4 5strConnectionString = CStr(DLookup("connectionString", "接続文字列テーブル", "ID= 2")) 6 7cn.Open strConnectionString

が、

VBA

1Dim cn As ADODB.Connection 2 3Set cn = CurrentProject.Connection

に置き換えれば動作するでしょう。


##(2016/05/12 18:57 のコメントの続きです。)

変数の「参照渡し」と「値渡し」を知っていますか

javaの資格を取る際に、勉強したので意味としてはわかります。

↓の2つのコードの違いを理解できますか。

 Dim cn As New ADODB.Connection
Dim cn As ADODB.Connection

実はこれは以前から気になっていたのですが、ネットなどでサンプルコードをみると、
Dim cn As ADODB.Connection
の方は、後ほど変数にNEWを代入してインスタンス化していますが、
Dim cn As New ADODB.Connection
と初めから宣言しているとその後のインスタンス化は不要なのかなぁ…と、
ぼんやりとしかわからないので気になっていました。

あ、じゃあ説明はしやすいですね。

VBAの場合、大前提として Dim は変数の定義です。
その際、オブジェクト型の変数の場合、 New をつけることで同時にインスタンス化されます。

細かいことを抜きにして、

VBA

1Dim obj as New object ' 型宣言とインスタンス化を同時に行う

VBA

1Dim obj as object ' 型宣言 2Set obj = New Object ' インスタンス化

は同義です。

オブジェクト型以外のほとんどの変数の場合、VBAでは変数の代入は値渡しで行われるのですが、オブジェクト型の場合は参照渡しで行われます。

VBA

1Dim obj1 As Object 2Dim obj2 As Object 3 4Set obj1 = New Object 5Set obj2 = obj1

この場合、変数 obj2 は obj1 への参照となります。
つまり obj2 への操作は obj1 にも影響します。

VBA

1Dim obj1 As Object 2Dim obj2 As Object 3 4Set obj1 = New Object 5Set obj2 = New Object 6 7Set obj2 = obj1

この場合、動作は結局一緒なのですが、obj2 として生成されたインスタンスは、obj1 への参照に上書きされ消えます。
(実動上は無駄なだけなはず)

で 2016/05/12 14:57 のコメントにあった下記のソースの

VBA

1Dim cn As New ADODB.Connection 'SQLserverへの接続  2● Dim cn2 As New ADODB.Connection 'Accessへの接続 3Dim rs1 As New ADODB.Recordset 4Dim rs2 As New ADODB.Recordset 5Dim rs3 As New ADODB.Recordset 6 7Dim strConnectionString As String 'SQLServer接続文字列 8 9strConnectionString = CStr(DLookup("connectionString", "接続文字列テーブル", "ID= 2")) 10●Set cn2 = CurrentProject.Connection 11 12cn.Open strConnectionString 13●’cn2.Open ←ここでは実行時エラー'3705'「オブジェクトが開いている場合は、操作は許可されません」とエラーが出る為一旦コメントアウト中です。 14        この記述は、不要もしくは違う箇所に書かなければなりませんか?ご教示いただければ幸いです。 15 16rs1.Open "顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly //エラー 17● rs2.Open "Q売上", cn2, adOpenForwardOnly, adLockReadOnly 18● rs3.Open "Q売上明細", cn2, adOpenForwardOnly, adLockReadOnly

cn2.Open でエラーが出る理由は、Dim cn2 As New ADODB.Connection としてインスタンスを生成したものの、その後で Set cn2 = CurrentProject.Connection をすることにより、cn2 はCurrentProject.Connection への参照となっています。

つまりいま開いているAccessファイルへの接続なので、さらにOpenはできないため、エラーが出ます。

Dim cn2 As ADODB.Connection Set cn2 = CurrentProject.Connection

で、cn2 は既に開いたAccessDBへの接続になっているわけです。

という事でほぼ理解上は解決するのではないでしょうか。

投稿2016/05/12 03:40

編集2016/05/12 10:15
kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/05/12 04:32

Suenaga様 いつもお世話になっております。 毎回ためになるご回答に、感謝しております。 db は、Access上の現在のデータベース、 cn は、他のデータベースに繋ぎにいく為の設定…?といったところでしょうか。 まだ経験値が浅い為、うまく言えませんがすみません。。 DAOのほうのコードと比べて思ったのですが、 ADOのコードに Set cn = CurrentProject.Connection というコードを追加する…などでしょうか。 初心者の試行錯誤にお付き合いさせて申し訳ありませんが、今一度の お教えを頂けないでしょうか。 どうぞよろしくお願いいたします。
kaz.Suenaga

2016/05/12 05:07

ほぼ正解ですね。 簡単に言えば、db も cn もつないでいるデータベース自体を示しています。 そのデータベースに対して、SQLやテーブル名を指定することでレコードセットを取得する、ということを、DAOのソースコードの方では db 、ADOのソースコードでは cn を使ってやろうとしています。 ADOの方、いまの cn は SQLServer への接続になっています。 そのため、SQLServerにあるデータに対するSQLを発行し、レコードセットを取得することになります。 この状態から、さらにAccessのDBからもレコードセットを取得したい場合、 cn とは別の ADODB.Connection オブジェクトを利用し、Accessへの接続を作る必要があります。 続きは回答を編集します。
nekomura

2016/05/12 05:57 編集

Suenaga様 お世話になっております。 アドバイスに従い下記の様に追記いたしました。 ●がついている箇所が、追記した部分です。 Accessへの接続は、無事出来ました(ありがとうございます!)が、コーディングが正しいのか不安な為 何か気になるところがございましたらご教示いただけると幸甚です。 また、コード内に直接疑問をコメントしているcn2.Open部分についても教えを頂けばありがたいです。 SQLserverへの接続は未だうまくいかず、エラー内容は本質問の時と変わらず同じメッセージがでます。 接続文字列はあっているはずなのですが…。 ```ここに言語を入力 Dim cn As New ADODB.Connection 'SQLserverへの接続  ● Dim cn2 As New ADODB.Connection 'Accessへの接続 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")) ●Set cn2 = CurrentProject.Connection cn.Open strConnectionString ●’cn2.Open ←ここでは実行時エラー'3705'「オブジェクトが開いている場合は、操作は許可されません」とエラーが出る為一旦コメントアウト中です。         この記述は、不要もしくは違う箇所に書かなければなりませんか?ご教示いただければ幸いです。 rs1.Open "顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly //エラー ● rs2.Open "Q売上", cn2, adOpenForwardOnly, adLockReadOnly ● rs3.Open "Q売上明細", cn2, adOpenForwardOnly, adLockReadOnly ``` どうぞよろしくお願いいたします。
kaz.Suenaga

2016/05/12 06:45

rs1で取得するデータはどうしてもSQLServerから取得したいんでしょうか。 その場合、ちょっと今出てきている情報ではホントは足らないのですが、 rs1.Open "顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly ↓ rs1.Open "dbo.顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly もしくは rs1.Open "SELECT * FROM dbo.顧客マスタ", cn, adOpenForwardOnly, adLockReadOnly とするといいかもしれません。 ただ、AccessからSQLServerへリンクテーブルをはっているのであれば、Accessへの接続でデータは取得できるので、rs1.Open の cn もcn2 でできるはずです。 その場合、cn は不要になります。 --- で、見せていただいたソースコードに関してですが、その前に知識をいくつか確認です。 - 変数の「参照渡し」と「値渡し」を知っていますか - ↓の2つのコードの違いを理解できますか。  Dim cn As New ADODB.Connection  Dim cn As ADODB.Connection それによって説明が必要な範囲が変わりそうですので、ひとまず質問です。
nekomura

2016/05/12 08:06

Suenaga様 お世話になっております。 14:07 のコメントの続きで、ひとまずうまくいきそうです! 取り急ぎお礼まで。 >rs1で取得するデータはどうしてもSQLServerから取得したいんでしょうか。 現在、上長よりヒントのキーワードのみを受けてサンプルコードを書いています。 次回から私が参加するシステム開発プロジェクトの前に、勉強しておくようにとの意図からです。詳細内容は聞かされていないのですが、その開発で使用するスキルに対し理解しておくべきキーワードが、 ・ODBC接続 ・リンクテーブル ・SQL認証接続文字列 です。 この3つとADO、DAOの関係がいまいち整理が出来ず、ここで質問をしていましたが、 本日のSuenaga様とttyp03様のやり取りの中で、 >AccessからSQLServerへリンクテーブルをはっているのであれば、Accessへの接続でデータは取得できるので、rs1.Open の cn もcn2 でできるはずです。 など意味がわかってきました。 なので、どうしても直接SQLServerから取得したいというわけでは今は無いのですが、 上長からのキーワードのひとつに接続文字列があったため、本題のようなコードを書いていました。 >変数の「参照渡し」と「値渡し」を知っていますか javaの資格を取る際に、勉強したので意味としてはわかります。 >↓の2つのコードの違いを理解できますか。  Dim cn As New ADODB.Connection  Dim cn As ADODB.Connection 実はこれは以前から気になっていたのですが、ネットなどでサンプルコードをみると、  Dim cn As ADODB.Connection  の方は、後ほど変数にNEWを代入してインスタンス化していますが、  Dim cn As New ADODB.Connection と初めから宣言しているとその後のインスタンス化は不要なのかなぁ…と、 ぼんやりとしかわからないので気になっていました。 是非、よければSuenaga様からご教示いただきたく存じます。 本日は何度もすみません。 今日一日で、何日もわからなかったことがどんどん知ることが出来てきています。
kaz.Suenaga

2016/05/12 09:57

事前学習という事であれば、AccessとSQLServerそれぞれに接続してそれぞれからデータを取得する、という事をやっておいたほうがいいかもしれませんね。 また、リンクテーブルの利用は便利ではあるんですが大きな問題があり、例えば、 - 顧客テーブル がSQLServerにある - そのテーブルに対してAccessでリンクテーブルを作る(仮にその名前を「リンク_顧客テーブル」) とした際に、 SELECT * FROM リンク_顧客テーブル WHERE id = 1 といったクエリを発行すると、 - 1度SQLServerからAccessが顧客テーブルの全データを取得(つまり リンク_顧客テーブル に相当するデータを取得) - その上で WHERE句の解釈 という動作をするため、顧客テーブルが大きくなればなるほど構造的に重く・遅くなることになります。 そのあたりを踏まえて、 - どこにデータがあるのか - この処理に必要なデータはどれか - 処理のプロセスで不必要にデータが大きくならないか といったことを検討した設計をすべきでしょう。 参照渡しやnew のあたりの話はコメントだと重いので回答を編集します。
nekomura

2016/05/12 13:26 編集

Suenaga様 たくさんのご教示、本当にありがとうございます!!! 今日は、とても勉強になりました。 長い間、本日教えていただいたことの理解が出来ず、 周りには質問することが出来ない状況だった為に本当に助かりました。 ネットのやりとりでこんなにわかやすかったのは初めてで、感激です。 たくさんのご回答、勉強しながら何度も読み返しております。 本当にありがとうございます。 >特にプロバイダの意味をわかると、ADOが汎用的、とか、ODBCとの関係、とか、接続文字列の意味、とか色々つながるかと思います。 ばらばらだったこれらの、解決の糸口が見つかりとてもうれしいです!
guest

0

すみません、上の所だと改行できないのでこちらで再確認させていただきます。
質問内容を読み取ると、構成としては、

<SQLServer>
顧客マスタ
<Access>
顧客マスタ(SQLServerへのリンクテーブル)
Q売上(Access
Q売上明細

こんな感じでしょうか。
だとすると、

rs2.Open "Q売上", cn, adOpenForwardOnly, adLockReadOnly //リンクテーブルで作ったクエリ rs3.Open "Q売上明細", cn, adOpenForwardOnly, adLockReadOnly //Accessクエリ

この2つはできませんよね。
SQLServer上には存在しませんから。
顧客マスタに関してはSQLServerに「顧客マスタ」としてテーブルが存在し、接続文字列がきちんとSQLServerを指しているのなら問題ないように思えますが。

投稿2016/05/12 02:35

ttyp03

総合スコア17000

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nekomura

2016/05/12 03:05

ttyp03様 何度もありがとうございます。 質問内容がわかりづらくご迷惑をおかけしてすみません。 <SQLServer> 顧客マスタ <Access> 顧客マスタ(SQLServerへのリンクテーブル) Q売上(Access Q売上明細 ↑はい、まさにその通りです。 ご指摘を元に、二点ご教示をいただきたく存じます。 まず、SQLServer上には存在しない下記2つ↓ rs2.Open "Q売上", cn, adOpenForwardOnly, adLockReadOnly //リンクテーブルで作ったクエリ rs3.Open "Q売上明細", cn, adOpenForwardOnly, adLockReadOnly //Accessクエリ は、どのように取得すればよいのでしょうか…。 元のコードのように、DAOで取得するのでしょうか。 その場合は、一つのコードにDAOとADOが混在しますが、それは正しいやり方になりますか? もう一点ですが、 >顧客マスタに関してはSQLServerに「顧客マスタ」としてテーブルが存在し、 >接続文字列がきちんとSQLServerを指しているのなら問題ないように思えますが。 ADOのコーディングは私が書いたものが、ttyp03様から見て正しいという認識でよろしいでしょうか。 度々申し訳ありませんが、再度お教えを頂ければ幸甚です。
ttyp03

2016/05/12 04:04

> SQLServer上には存在しない下記2つは、どのように取得すればよいのでしょうか…。 ODBCでSQLServerを参照したいという目的なのに、Accessの情報を参照したいというのが何やら矛盾していませんかね。 SQLServerには存在しないのですから、ないものはない、できないものはできない、としか言えません。 それとも今Access上に構築しているリンクテーブルやクエリは全く使わず、SQLServerの情報だけを使うようにしたい、という要求でしょうか。 そうであるなら、Accessのクエリに代わるものをSQLServer上に作成することになると思います。 具体的にはVIEWを作る感じでしょうか。 > ADOのコーディングは私が書いたものが、ttyp03様から見て正しいという認識でよろしいでしょうか。 こちらは前回の質問と同じ回答になってしまいますが、接続文字列が正しいのであれば問題ないようには思えます。 こちらに環境がなく検証ができないので断言できなく申し訳ないです。
nekomura

2016/05/12 04:24 編集

ttyp03様 ご返信に感謝いたします。 >ODBCでSQLServerを参照したいという目的なのに、Accessの情報を参照したいというのが何やら矛盾していませんかね。 まだ経験が浅い為、とんちんかんな質問をしたようでもうしわけございません。 DA0のほうのコードで出来たように、 ・顧客マスタ(SQLServerへのリンクテーブルですが) ・Q売上(クエリ) ・Q売上明細(クエリ) の3つの内容が、これから作りたいロジックには必要なので、どれか一つだけ取得というわけにはいかなかったのです…すみません。 >それとも今Access上に構築しているリンクテーブルやクエリは全く使わず、SQLServerの情報だけを使うようにしたい、という要求でしょうか いいえ、違います。 ODBCでSQLServerを参照したテーブル、Accessの情報を参照したリンク双方のデータが必要です。 これらをを同じプロシージャ内で取得するのは無理ということでしょうか? このような問題は、ネットで調べてもわからないため度々の質問ですが今一度ご教示頂けないでしょうか。 >こちらに環境がなく検証ができないので断言できなく申し訳ないです。 とんでもありません。 とても助かっています。ありごとうざいます。
ttyp03

2016/05/12 04:33

> ODBCでSQLServerを参照したテーブル、Accessの情報を参照したリンク双方のデータが必要です。 ここでいう「SQLServerを参照したテーブル」は顧客マスタですよね。 「Accessの情報を参照したリンク」は、顧客マスタのリンクテーブルですよね。 ということは、どちらも同じところを参照しているわけですから、SQLServerへの接続とAccess内のDBへの接続を混在させる必要性はないです。 リンクテーブルを参照すれば自ずとSQLServerのテーブルを参照していることになります。 DAOの方のコードは実績があるわけですから、これが正しい姿だと思います。 リンクテーブルを使わずに直接SQLServerを参照しないといけない理由があるのでしょうか?
ttyp03

2016/05/12 04:53

少し勘違いしていました。 DAOでの接続はできたので、ADOに変えたいということがそもそもの目的でしたね。 とすると、現在のADOのコードだと、接続先がSQLServerに向いてしまっているので、それをAccessに向くようにすればよさそうです。 これについてはkaz.Suenagaさんとのやり取りのほうで解決できそうですね。
nekomura

2016/05/12 05:01 編集

>ttyp03様 何度もお答え頂きありがとうございます。 以下、長文となりますがご了承願います。 >リンクテーブルを使わずに直接SQLServerを参照しないといけない理由があるのでしょうか? 言葉足らずで申し訳ありません。 上司から次に作るシステムは、ODBCで作ったリンクテーブルと、クエリを使用したものを作ることになるので すぐにとりかかれるようにロジックを考えておくように言われており、現在作っているのは、私なりに考えたサンプルのコードです。 サンプルの為、Accessのテーブル「顧客マスタ」と同内容のテーブルを作り、リンクテーブルで参照しています。 Accessテーブル名と、SQLServerを参照したテーブル名(つまりリンクテーブルの顧客マスタ)が同じな為、わかりづらくてすみません。 私自身の解釈として、 ・DAOはAccessのjetDB?に接続 ・ADOは外部のDBに接続 という認識があったため、ADOを使用しなければいけないのかと思っておりこのようなコードを書いていました。 ですが、Accessにあるクエリも同時に使いたい為、どのように記述すればよいのかわからなかったところ、ttyp03様のご指摘どおりクエリは rs3.Open "クエリ名", cn, adOpenForwardOnly, adLockReadOnly では取得できないということがわかり、どのようにすれば良いのかがわからなくなっておりました。 >リンクテーブルを参照すれば自ずとSQLServerのテーブルを参照していることになります。 >DAOの方のコードは実績があるわけですから、これが正しい姿だと思います。 つまり、リンクテーブルでSQLServerを参照しているので接続文字列や、ADOは必要ないという事ですよね? ネットで調べるだけではその辺りが不明瞭で、お手わずらいをさせてすみません。
nekomura

2016/05/12 05:12

ttyp03様 >DAOでの接続はできたので、ADOに変えたいということがそもそもの目的でしたね。 すみません、こちらの3つ目のお返事時気づかず先ほどのコメントを投稿しました(ttyp03様の二つ目のご回答に対してです。) お二方のおかげで、少しずつ先が見えてきて楽しいです。 ttyp03様とのやりとりは、とても有意義で自身で試行錯誤する力もつき、大変ためになります。 ありがとうございます。
ttyp03

2016/05/12 05:32

実の所、DAOとADOの違いを私自身良く知らなかったので改めて調べてみると、DAOの方が歴史は古く、ADOの方が新しい。但し、どちらでもAccessのDBへはアクセス可能であり、長所短所ともに一長一短といったところでしょうか。 という感じのことが書いてあるサイトがありましたので紹介しておきます。 http://tsware.jp/labo/labo_23.htm それぞれでのローカルDBへ接続するサンプルも載っていますので参考になるのではと思います。 現状でDAOでの接続はできているのでそれでも良いと思いますが、せっかくなのでADOでの接続も実現させ、どちらが自分にとって使いやすいか検証してみるのがいいですね。
kaz.Suenaga

2016/05/12 05:38

多少語弊もあるんですが、DAOとADO、役割として、ローカルファイルへのアクセスを前提としたDAOと、リモート接続を前提としたADO、といったイメージです。 DAOの場合はJetDB(昔のAccessの mdb ファイル形式のもの)への接続専用、ADOの場合は接続文字列で汎用的に接続可能、という感じです。
ttyp03

2016/05/12 05:42

kaz.Suenagaさん> 解説ありがとうございます。為になります。 ADOの方が汎用的に使えるとなると、将来的にもADOを使っておいた方が融通が利きそうですね。
nekomura

2016/05/12 05:54

ttyp03様 Suenaga様 なるほど…。 とても為になります。 ttyp03様、参考URLもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問