Access (VBA)

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

 
(Windows 10 Home : Access 2010)
テーブルをリンクさせる(?)
投稿日時: 21/10/10 12:21:59
投稿者: mmiwa

いつもありがとうございます
 
教えてください
 
DoCmd.TransferDatabase acLink, "Microsoft Access"…
 
を利用して
現在のデータベース内にあるテーブルをリンク元
外部のデータベースをリンク先
として
リンクを作成する方法が分かりません
 
一般的には
外部のデータベースをリンク元
現在のデータベースをリンク先
としているようですが
逆にリンクさせたいと考えています
 
但し、外部のデータベースにプロシージャは置きたくありません
 
よろしくお願いいたします

回答
投稿日時: 21/10/10 15:35:51
投稿者: Moko

こんな感じ。
 

Sub Sample()
    Dim Acc As Access.Application
    
    Set Acc = New Access.Application
    Acc.OpenCurrentDatabase "C:\Sample\SampleDB.accdb"
    Acc.DoCmd.TransferDatabase acLink, "Microsoft Access", _
        CurrentDb.Name, acTable, "テーブル1", "リンクテーブル1"
    Acc.Quit
    Set Acc = Nothing
End Sub

投稿日時: 21/10/10 16:44:18
投稿者: mmiwa

Mokoさん
 
ありがとうございました
 
なるほど
一旦リンク先のアクセスをAccへ格納して
そちらからTransferDatabaseでリンクさせる
ということですね
 
DatabaseName
Source
Destination
を工夫して
リンク元(CurrentDb)からのTransferDatabaseで
リンクさせるのは不可能と考えて良いでしょうか

回答
投稿日時: 21/10/11 02:06:17
投稿者: Moko

mmiwa さんの引用:
DatabaseName
Source
Destination
を工夫して
リンク元(CurrentDb)からのTransferDatabaseで
リンクさせるのは不可能と考えて良いでしょうか

そうですね。
 
こちら、ちょっとハッキリしませんが。
https://docs.microsoft.com/ja-jp/office/vba/api/access.docmd.transferdatabase?f1url=%3FappId%3DDev11IDEF1%26l%3Dja-JP%26k%3Dk(vbaac10.chm4188);k(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue#parameters
 
こちらでは
https://hatenachips.blog.fc2.com/blog-entry-373.html
> インポート、エクスポートでは、他から自分へ取り込むか、自分から他へ出力するか、しかできません。
と仰っています。
 
まあ、20年ほど Access をやっていて、一度もそういう記述を見たことがないので
出来ないのはほぼ間違いないと思っています。
 
こんな方法ではいかがでしょうか?
Sub Sample2()
    DoCmd.TransferDatabase acLink, "Microsoft Access", _
        CurrentDb.Name, acTable, "テーブル2", "tmp"
    DoCmd.TransferDatabase acExport, "Microsoft Access", _
        "C:\Sample\SampleDB.accdb", acTable, "tmp", "リンクテーブル2", True
    DoCmd.DeleteObject acTable, "tmp"
End Sub

 

投稿日時: 21/10/11 09:37:40
投稿者: mmiwa

Moko さん
 
こんな手もあるんですね
 
一旦リンクテーブルを作成して
それをexport
その後、tmpを削除するんですね
 
恐れ入りました
非常に勉強になりました
 
いろいろご丁寧にありがとうございました
 
また困ったことが発生した場合には
よろしくお願いいたします