LoginSignup
pbatour
@pbatour

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

VBAにてリンクテーブルを作成する方法について

解決したいこと

ACCESSにてODBC経由でORACLEに接続してリンクテーブルを作成しています。
ACCESSを開き直すたびにODBCのリンクが切れてしまうという事象が発生しております。

以下のいずれかの方法についてご存じの方がいらっしゃいましたら教えていただけないでしょうか。
・ACCESSを開き直すたびにODBCの接続が切れてしまうという事象自体を改善する方法
・VBAでリンクテーブルを作成する方法(できればソースもいただきたい。)

[使用環境]
Windows10
ACCESSバージョン14(32bit)
ORACLE Client 11.2.0(32bit)

発生している問題・エラー

ODBC--'ODBC名'への接続が失敗しました。

ACCESSファイルを開き直したあとにリンクテーブルを開こうとすると
上記のエラーが表示されます。

自分で試したこと

以下いずれかの方法を行うと改善します。
1.適当になにか1つのテーブルのリンクを生成する。
2.リンクテーブルマネージャーからリンクを更新する
すべてのテーブルで行う必要はなくどれか1つのテーブルのリンクを生成もしくは更新
すると改善されます。

0

4Answer

「ACCESSの起動時に最後に使用したDBを開く」という設定があるようですが、これでいけませんかね?

1

Comments

  1. @pbatour

    Questioner

    試してみましたが、だめでした。

Comments

  1. @pbatour

    Questioner

    はい。保存しています。

  2. リフレッシュで回復するなら

    Dim Dbs As Database
    Set Dbs = CurrentDb
    Dbs.TableDefs.Refresh
    
  3. すべてのODBCリンクのリフレッシュなら

    Dim Dbs As Database
    Set Dbs = CurrentDb
    For Each Tdf In Dbs.TableDefs
        If Tdf.Connect Like "ODBC;*" Then
            Tdf.RefreshLink
            Tdf.Fields.Refresh
        End If
        DoEvents
    Next Tdf
    Dbs.TableDefs.Refresh
    
  4. @pbatour

    Questioner

    やってみたんですが、データソース選択画面が表示されてしまいます。
    VBAで接続先のODBCを設定することはできないですか。

  5. Tdf.ConnectにODBCの接続文字列を指定します。

    Dim Dbs As Database
    Set Dbs = CurrentDb
    For Each Tdf In Dbs.TableDefs
        If Tdf.Connect Like "ODBC;*" Then
            Tdf.Connect = "ODBC;DRIVER=xxxx;UID=xx;PWD=xx;DATABASE=xx;SERVER=xxx;"
            Tdf.RefreshLink
            Tdf.Fields.Refresh
        End If
        DoEvents
    Next Tdf
    Dbs.TableDefs.Refresh
    
  6. @pbatour

    Questioner

    ご回答ありがとうございます。
    うまく接続できないので接続情報を確認させてください。
    以下で設定はあってますよね?
    DRIVER={Oracle in OraDb11g_home1}
    DATABASE=(TNSサービス名を設定※)
     ※TNSNAMES.oraでいうところのSERVICE_NAMEに設定している文字列)
    SERVER=(DBサーバーのIPを設定)

  7. すでに書かれているデータソースに指定している接続文字列と同じだと思います。

  8. @pbatour

    Questioner

    >すでに書かれているデータソースに指定している接続文字列と同じだと思います。
    となるとデータソースに書かれれいる接続文字列のどこがどの値にあたりますか。
    DATABASEとSERVERの設定値はデータソースのどの項目の値を設定するのでしょうか。

  9. @pbatour

    Questioner

    たとえば現在この設定だった場合にDATABASEとSERVERにはどの値を設定すればよいですか。
    [データソースの設定値]
    ODBCデータソース名:AAA
    TNSサービス名:BBB
    ユーザーID:CCC
    パスワード:DDD
    [NET MANAGER(TNSNAMES.ora)の設定値]
    ホスト名:192.168.1.10
    サービス名:EEE

.RefreshLinkですが、MDBにしか有効じゃない感じがします。
ODBCのリンクでも使えますか。

0

Your answer might help someone💌