Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 11 Home : Excel 2021)
ExcelからAccessにADOで接続するときのOpenでエラー
投稿日時: 25/02/10 12:55:32
投稿者: suekunx

お世話になっております。
ExcelからADOでAccessに接続しているのですが
ローカル(同じPC内)では正常に動作するのですが
Accessを別PCに置いて共有フォルダにして処理すると
RecordsetのOpenでエラーになってしまいます。
何が原因でしょうか?
よろしくお願い申し上げます。
 
    'データベースとの接続
    Call DataBaseOpen(DatabaseConnect, DatabaseProvider, DatabaseFile)
'----
    '構成_Mのデータを取得
    With DatabaseRecordSet
         
        'テーブルを開く
        .Source = "T_機種マスター"
        .ActiveConnection = DatabaseConnect
        .CursorLocation = adUseClient
        .Open  ←ここでエラー
        .Sort = "機種ID ASC"
         
    End With
エラー内容:
実行時エラー'-2147217900(80040e14)'
SQLステートメントが正しくありません。'DELETE'、'INSERT'、'PROCEDURE'、
'SELECT'、または'UPDATE'を使用してください。

投稿日時: 25/02/10 14:51:11
投稿者: suekunx

DataBaseOpenの引数は、下記の通りです。
DatabaseConnect:
Provider=Microsoft.ACE.OLEDB.16.0;User ID=Admin;Data Source=\\10.101.40.74\test\入庫出庫システム_サンプル.accdb;Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=6;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;Jet OLEDB:Support Complex Data=False;Jet OLEDB:Bypass UserInfo Validation=False;Jet OLEDB:Limited DB Caching=False;Jet OLEDB:Bypass ChoiceField Validation=False;
 
DatabaseProvider:
microsoft.ace.oledb.16.0
DatabaseFile:
\\10.101.40.74\test\入庫出庫システム_サンプル.accdb

回答
投稿日時: 25/02/10 17:49:58
投稿者: Suzu

DataBaseOpen(DatabaseConnect プロシージャの 実際の動作内容が判らないので
確信は持てませんが
 

引用:
SQLステートメントが正しくありません。'DELETE'、'INSERT'、'PROCEDURE'、
'SELECT'、または'UPDATE'を使用してください。

このメッセージを見る限り、
引用:
.Source = "T_機種マスター"

ここで指定している T_機種マスター が テーブル名として認識されていない と思われます。
 
メッセージの通り Sorce に SELECT句を指定したらどうなのでしょうか?
 SELECT * FROM T_機種マスター
 
或いは、Recordset の Openメソッド
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/open-method-ado-recordset
の Option に CommandTypeEnum の
https://learn.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/commandtypeenum
adCmdTable は 指定できますか?
指定しても、エラーになるのではありませんか? その場合、 T_機種マスター リンクテーブルではありませんか?
普通、テーブルを直接開き、並べ替えを有効にするなら、Index を使います。
それを使わずに Sort を使っていると言う事も、リンクテーブルであると推測しますがいかがでしょうか?
(外部に対してのリンクテーブルは、クエリと同じ扱いになります)
 
何にしても、Accessファイルを開き、
そのAccessから更に別のAccessのテーブルを参照するにはリンクテーブル又は、IN句を使います。
その場合、SELECT が必須になります。

投稿日時: 25/02/12 06:52:13
投稿者: suekunx

Suzuさん
ご連絡誠にありがとうございます。
 

Suzu さんの引用:

メッセージの通り Sorce に SELECT句を指定したらどうなのでしょうか?
 SELECT * FROM T_機種マスター

 
これでうまく読込が出来るようになりました。
ありがとうございます。
 
※ローカルで処理している場合は、Source="機種マスター"でも問題なく動くのですが
これは、たまたまということでしょうか?