
お世話になります。
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
上記の最終行のところで「クエリが複雑すぎます」でエラーになります。
すべてのクエリの重複しないデータを取得する方法はないでしょうか?
よろしくお願い致します。
No.4ベストアンサー
- 回答日時:
うーんんn
当方の環境(Office2010 Pro)では
C:\Program Files (x86)\Common Files\System\ado\msjro.dll
にファイルが有り(これがJro.JetEngineの実体です)
参照設定のリストでも
Microsoft Jet and Replication Objects 2.6Library として選択できるのですが
なぜ、そちらでオブジェクト作成失敗のエラーになるのか・・・
力不足ですみません。
もっとも、作成に成功していたとしても当初の問題が解決できる保証もなく・・・。
この辺が私の限界です。
ご回答ありがとうございます。こちらのPCにもJro.JetEngineの実体のファイルはあるのですが。。詳しく調べていきたいと思います。大変勉強になりました。ありがとうございました。
No.3
- 回答日時:
ひとつずつ実行して行くと問題ない。
クエリの連投をしているようなのでキャッシュの問題かも?
オブジェクトの宣言を行って
Dim JE As Object
Set JE = CreateObject("JRO.JetEngine")
・・・・
JE.RefreshCache dbCon 'キャッシュの更新
dbRes.Open sql, dbCon, adOpenStatic, adLockPessimistic
Set JE=nothing '解放
のようにキャッシュの更新を挟み込んでみるとどうでしょう?
位置が適切なのか、一か所で十分なのかは残念ながら不明です。
ご回答頂き、ありがとうございます。
現在、標準モジュールにAccess接続・データ取得用のものを作成し、渡したSQL文を処理させる構造にしているため、そのモジュールの最初の部分に教えて頂いたオブジェクト宣言を記載し、実行してみました。Set JE = CreateObject("JRO.JetEngine")のところで「ActiveXコンポーネントはオブジェクトを作成できません」のエラーが表示されます。原因がわからない状態でおります。もしよろしければ教えて頂けないでしょうか?
No.2
- 回答日時:
では
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接続でも同様かと?
ご回答ありがとうございます。
SQLビューに貼り付け実行したところ、クエリが複雑すぎますとエラーがでました。教えて頂いた不適切な文字の使用がないか確認してみました。作成したクエリを一つずつ実行するとシートビューに切り替えられるようです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel VBA セルの値がおかしいです
-
VBA セル間のリンク修正につい...
-
WindowsのOutlook を VBA から...
-
【ExcelVBA】値を変更しながら...
-
ExcelのVBAコードについて教え...
-
VBAでCOPYを繰り返すと、処理が...
-
マクロの記録を使用したマクロ...
-
vba textboxへの入力について教...
-
複数のExcelファイルをマージす...
-
Vba Array関数について教えてく...
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
【マクロ】開いているブックの...
-
Excelのマクロについて教えてく...
-
Vba WorkBooks.Openについて教...
-
VBAから書き込んだ条件付き初期...
-
Vba 型が一致しません(エラー1...
-
【ExcelVBA】5万行以上のデー...
-
[Excel VBA]特定の条件で文字を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Pro*Cの構文エラー
-
JAVA SQLServerException 列名 ...
-
<VB.NET>INSERT文でDBにデータ...
-
insert1つの処理でもトランザ...
-
ResultSetインターフェイスでの...
-
VBA ACCESS SQL...
-
MySQL 複数の同じような命令が...
-
ASPでSQL文を使う場合に。
-
VB勉強中
-
PHPからデータベースに接続した...
-
VB.NET エラーになる箇...
-
SQLインジェクション対策
-
sqliteの構造体
-
Q&Aサイトを作成していてURLの...
-
データベースに存在するデータ...
-
C#でDBの特定列をUpdate
-
エクセルVBAのデータベース接続...
-
チェックボックスからの複数検...
-
SQL文の連結が、うまくいきません
-
CakePHPでquery()を使うときに...
おすすめ情報