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

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

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

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

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Access

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

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

Q&A

2回答

387閲覧

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

safai

総合スコア1

VBA

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

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Access

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

Oracle Database 11g

Oracle DatabaseはRDBMSの商品です。具体的な発売商品として知られているのが、 Oracle9i、Oracle10g、Oracle 11gとOracle 12cです。

0グッド

0クリップ

投稿2024/05/09 09:03

実現したいこと

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

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

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

発生している問題・分からないこと

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

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

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

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

補足

特になし

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

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

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

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

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

guest

回答2

0

ACCESSを開き直すたびにODBCのリンクが切れてしまう

Access2021 他のPCでの実行時エラー'-2147467259(80004005)が解決できない

基本的には上記の件と同じ問題。

  1. DAO.TableDef オブジェクトにより任意のリンクテーブルを参照し、その Connect プロパティに Oracle データベースへの接続に必要なパラメータを記述したODBC接続文字列を渡す。

  2. その DAO.TableDef オブジェクトの RefreshLink メソッドを呼び出す。

以上の処理を実行する Function プロシージャを作成し、AutoExec マクロ、またはスタートアップフォームの Open イベントから呼び出すようになさればよろしいでしょう。

投稿2024/05/10 01:51

編集2024/05/10 01:59
sk.exe

総合スコア894

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

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

safai

2024/05/10 03:45

試しに以下のようなソースでやってみたのですが、再接続時にデータソース選択画面が表示されて そこからODBCに接続し直さないといけないようです。 データソース選択画面を表示させずに自動的に設定した接続方法で接続する方法はないでしょうか。 Dim dbs As Database Dim tdf As TableDef Dim dbPath As String dbPath = "c:\test.accdb" Set dbs = CurrentDb '全テーブルの探索ループ For Each tdf In dbs.TableDefs With tdf .Connect = ";DATABASE=" & dbPath .RefreshLink End With Next tdf End Sub
sk.exe

2024/05/10 04:19

> dbPath = "c:\test.accdb" > .Connect = ";DATABASE=" & dbPath それは Access データベース( .mdb / .accdb ファイル)をリンク先とする場合の接続文字列の書き方です。 設定すべき接続文字列は、リンク先となるデータソースの種類や接続に使用するドライバー/プロバイダーによって異なります。またユーザーIDとパスワードの指定も必要です。 既に Oracle データベースをリンク先とするリンクテーブルが存在する場合は、とりあえずイミディエイトウィンドウから次のようなコードを実行し、出力された文字列を参考に接続文字列を構成するようにして下さい。 ----------------------------------------------------------- ? CurrentDb.TableDefs("リンクテーブル名").Connect -----------------------------------------------------------
safai

2024/05/10 05:08

やはり実行するとデータソース選択画面が表示されてしまうようです。 接続する際にVBAで接続先を指定するようにはできないでしょうか。
sk.exe

2024/05/10 05:30 編集

> やはり実行するとデータソース選択画面が表示されてしまうようです。 具体的にどのようなプロシージャを作成されたのか、具体的にどのような接続文字列を Connect プロパティに代入なさろうとされているのか、そのプロシージャをどのタイミングで呼び出そうとされているのかが不明ですので、現時点ではお答えのしようがありません。 仮に「『リンクテーブルのリンクの再更新を実行するプロシージャ』自体は正常に動作するが、それを呼び出す前にデータソース選択画面が表示されてしまう」ということであれば、呼び出すタイミングか呼び出す方法に問題がある可能性があります。 > ? CurrentDb.TableDefs("リンクテーブル名").Connect 「上記のコードをイミディエイトウィンドウから実行しようとした時点でデータソース選択画面が表示された」という意味でおっしゃっているのであれば、そのまま認証を行って Oracle データベースとの接続を確立した上で Connect プロパティの値を確認して下さい。
guest

0

vba

1' iUser ORACLE に接続するユーザ名(テーブルが存在するスキーマ名を兼ねます) 2' iPassword ORACLE に接続するパスワード 3' iDSN ORACLE に接続する DSN 4' iTableName テーブル名 5Sub CreateLinkTable(ByVal iUser As String, ByVal iPassword As String, ByVal iDSN As String, ByVal iTableName As String) 6Dim strConnect As String 7Dim attatchName As String 8Dim db As Database 9Dim tdf As TableDef 10 11 strConnect = "ODBC;DSN=" & iDSN & ";Uid=" & iUser & ";Pwd=" & iPassword 12 attatchName = iUser & "_" & iTableName 13 14 Set db = CurrentDb 15 16 On Error Resume Next 17 db.TableDefs.Delete attatchName 18 On Error GoTo 0 19 20 Set tdf = db.CreateTableDef(attatchName) 21 tdf.Connect = strConnect 22 tdf.SourceTableName = iUser & "." & iTableName 23 tdf.Attributes = tdf.Attributes Or dbAttachSavePWD 24 db.TableDefs.Append tdf 25End Sub

DSN は ODBC アドミニストレータで定義しますが、32bit/64bit に注意してください。

投稿2024/05/09 13:49

編集2024/05/10 10:34
KOZ6.0

総合スコア2668

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

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

safai

2024/05/10 03:10

うまく動きませんでした。 Set pAttachTBL = iMyDb.CreateTableDef(pAttachName) のところで実行エラー'424' オブジェクトが必要です。 というエラーが表示されます。 設定する変数値はODBC設定に以下の項目であっていますか。 iDestDB=ODBC名 iMyDb=TNSサービス名 iUser =ユーザーID またiTablenameはリンクを作成したいテーブル名であっていますか。
KOZ6.0

2024/05/10 04:12 編集

引数はソースのコメントにあるとおりです。 現在どのようにリンクテーブルを作成しているんでしょうか?
safai

2024/05/10 05:12

コメントに書いてある言葉の意味がよくわからないのです。 WindowsにてODBC設定時にODBC名、TNSサービス名、ユーザーID、パスワードを設定しますが、 設定するのはここに設定している設定値ではないのですか? ODBCデータソースからODBC経由でリンクを作成しています。 このような答えで的を射ていますか?
KOZ6.0

2024/05/10 10:30 編集

回答を書き換えます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問