人に聞けない痔の悩み、これでスッキリ >>

お世話になります。
Excel2010でAccess2007へのデータ接続をしています。
検索内容毎に基本のクエリから必要なデータをクエリとして作成し、その結果を取得したいと思っております。複数作成したクエリは名前の頭に「”出力用”+連番」で設定し、データが0のものは削除済みです。

Set dbCon = New ADODB.Connection
Set dbRes = New ADODB.Recordset
Set dbCmd = New ADODB.Command
Set dbCat = New ADOX.Catalog

~この間でクエリを作成、また0件のクエリは削除の処理~

dbCat.ActiveConnection ="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ”データベースのパス”
For Each obj In dbCat.Views
If InStr(obj.Name, "出力用") <> 0 Then
If sql = "" Then
sql = "SELECT DISTINCT * FROM " & obj.Name
Else
sql = sql & ", " & obj.Name
End If
Next obj
Set dbRes = New ADODB.Recordset
dbRes.Open sql, dbCon, adOpenStatic, adLockPessimistic

上記の最終行のところで「クエリが複雑すぎます」でエラーになります。
すべてのクエリの重複しないデータを取得する方法はないでしょうか?
よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

うーんんn


当方の環境(Office2010 Pro)では
C:\Program Files (x86)\Common Files\System\ado\msjro.dll
にファイルが有り(これがJro.JetEngineの実体です)
参照設定のリストでも
Microsoft Jet and Replication Objects 2.6Library として選択できるのですが
なぜ、そちらでオブジェクト作成失敗のエラーになるのか・・・
力不足ですみません。
もっとも、作成に成功していたとしても当初の問題が解決できる保証もなく・・・。
この辺が私の限界です。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。こちらのPCにもJro.JetEngineの実体のファイルはあるのですが。。詳しく調べていきたいと思います。大変勉強になりました。ありがとうございました。

お礼日時:2015/08/08 11:26

ひとつずつ実行して行くと問題ない。


クエリの連投をしているようなのでキャッシュの問題かも?

オブジェクトの宣言を行って
Dim JE As Object
Set JE = CreateObject("JRO.JetEngine")
・・・・
JE.RefreshCache dbCon 'キャッシュの更新
dbRes.Open sql, dbCon, adOpenStatic, adLockPessimistic

Set JE=nothing '解放

のようにキャッシュの更新を挟み込んでみるとどうでしょう?
位置が適切なのか、一か所で十分なのかは残念ながら不明です。
    • good
    • 0
この回答へのお礼

ご回答頂き、ありがとうございます。
現在、標準モジュールにAccess接続・データ取得用のものを作成し、渡したSQL文を処理させる構造にしているため、そのモジュールの最初の部分に教えて頂いたオブジェクト宣言を記載し、実行してみました。Set JE = CreateObject("JRO.JetEngine")のところで「ActiveXコンポーネントはオブジェクトを作成できません」のエラーが表示されます。原因がわからない状態でおります。もしよろしければ教えて頂けないでしょうか?

お礼日時:2015/08/07 16:19

では


Debug.print sql
Set dbRes = New ADODB.Recordset
dbRes.Open sql, dbCon, adOpenStatic, adLockPessimistic
として
sqlの値の確認。
次に、Accessをお持ちでしょうからそのsqlをクエリのSQLビューに張り付けてシートビューに切り替えられるか確認。

obj.Name はクエリ名が入るのかな?
モノによっては一時テーブルに書き出してからでないと上手く行かなかったり、
フィールド名などに半角スペースが含まれていたり不適切な文字
https://support.microsoft.com/ja-jp/kb/826763
が有る場合にもエラーになる可能性があります。多分ですがADO接続でも同様かと?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
SQLビューに貼り付け実行したところ、クエリが複雑すぎますとエラーがでました。教えて頂いた不適切な文字の使用がないか確認してみました。作成したクエリを一つずつ実行するとシートビューに切り替えられるようです。

お礼日時:2015/08/05 08:56

投稿時のタイプミス?


DISTINCT *
に全角スペースが入っているのが気になります。
    • good
    • 0
この回答へのお礼

nicotinismmさん、ご指摘ありがとうございます。
タイプミスでした。すみません。
半角スペースで行ってみても同じエラー内容でした。
宜しくお願い致します。

お礼日時:2015/08/04 17:19

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q.VBSだとADODBのプロバイダが見つからない件

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateObject("ADODB.Connection")
dbCon.Open ADO_CONNECT & MDBName & ";"
strSQL = "命令文"
dbCon.Execute (strSQL)

'ここまで

プロバイダーの場所、バージョン、32/64ビット、あたりに問題がのかもしれませんが、調べてもよくわかりません。エクセルVBAでは動作するので、参照設定?の違いなのかもしれません。どのように解決したら良いでしょうか。

Win 7 Pro 64bit
MS Accessなし
Excel 2007 あり

こんばんは

.vbsファイルからデータベースを操作しようとして躓いています。
エクセルvbaでは動いているのに、.vbsに移植するとエラーが出てしまいます。
エラーの内容は「プロバイダーが見つかりません。正しくインストールされていない可能性があります。」です。

次のスクリプトです。

'ここから
Dim ADO_CONNECT
Dim MDBName
Dim dbCon
Dim strSQL

ADO_CONNECT = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
MDBName = WScript.Arguments(0) 'エクセルVBAの場合はハードコード
Set dbCon = CreateOb...続きを読む

Aベストアンサー

スクリプトを32bit版ファイラーから試すと問題ありませんでした。
が、Explorer (64bitで動作)から試すと同じエラーになりました。
Explorer 64bit で動作

Wscript も64bitが呼ばれる

ADODB の64bit版は存在しないのでエラー発生の流れかと思います。
(Win7 64bit & Office 2010 64bit でもほんの少しだけ確認)

なので、
http://d.hatena.ne.jp/KenKens/20140312/1394641831
の中ほどにあるように32bit版で起動しなおすようにすれば解決するものと思われます。

QEXCEL VBAでACCESSに接続時にエラーが出ます

自分のPCの場合は、EXCEL VBAでACCESSにADOで接続時してデータを抽出することが出来ますが、他PCより同じマクロを動かすと「実行時エラー'3706'、プロバイダーが見つかりません。正しくインスツールされていない可能性があります。」のエラーメッセージが出ます。
ACCESSのデータは、EXCEL VBAで自分のPCからのみOPEN出来るようになっているようですが、他のPCからもEXCEL VBAでOPEN出来るようにするにはどうしたら良いのでしょうか。
ACCESSの事は良く分からないので教えてください。
ちなみに、他のPCで直接ACCESSデータを起動するとOPEN出来ます。
宜しく、お願いします。

Aベストアンサー

コネクションの文字列が提示されていないので何とも言えません。
{みだりに公開もできないものではありますが}
コネクションの文字列に問題があるように思います。
つながるPCとつながらないPCで「UDL」をつくって見たらどうでしょう。
空のファイルをEditorで作ってtest.udlという名前で保存
それをダブルクリックすると接続を確立するためのプログラムが立ち上がりますから
そこでプロバイダーなどを選んで「接続テスト」がOKになるようにします。
保存したあとそのファイルをEditorでみると接続文字列が分かると思います。
ウイザード代わりに使うということです。
その後でそれぞれのUDLの内容を比較したら何らかの回答が得られるのではないかと思います。

Qデータソース名および指定された既定のドライバが見つかりません。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

Try
cn.Open()
MsgBox("Connected")
Catch ex As Exception
MsgBox("NG")
Debug.Print(ex.Message, "Error") ←(A)
Finally
cn.Close()
End Try

(A)で「ERROR [IM002] [Microsoft][ODBC Driver Manager] データ ソース名および指定された既定のドライバが見つかりません。」

のメッセージが出ます。
VB2005の「ツール」-「サーバの接続」では接続確認が取れているのですが、
コードで書くとエラーになってします。

何か書き忘れているのでしょうか。。。
すみませんがよろしくお願いいたします。

データソース名および指定された既定のドライバが見つかりません。
オラクルに接続したのですが、上記のエラーが出て接続出来ません。
どなたか力を貸してください。

<環境>
WinXP
VS2005 Ver8.0.50727.42
Windowsアプリケーション
VB言語でオラクルに接続したいと思っています。

こちら(http://support.microsoft.com/kb/310985/ja)を参考に
オラクルに接続しようとしています。

Dim cn As OdbcConnection
cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
...続きを読む

Aベストアンサー

>cn = New OdbcConnection("Driver = {Microsoft ODBC for Oracle};" & _
>"Data Source=ORA_TEST;uid=UID_TEST;pwd=PWD_TEST")

自分の環境に合わせないとね?????

これの意味はインポートしているんですよね? スクリプトはVBSの事ですかね。VBA? VBですよね?

Imports System.Data
Imports Microsoft.Data.ODBC


それと見るHPがちょこと違う。
http://msdn.microsoft.com/ja-jp/library/system.data.oracleclient.oraclelob.aspx


人気Q&Aランキング