土曜の昼、学校帰りの昼メシの思い出

ACCESSでリンクしたテーブルを DoCmd.CopyObject でカレントのmdbにコピーすると、テーブル本体ではなく、リンク情報がコピーされてしまいます。
リンクされたテーブルの本体をコピーするにはどうすれば良いのでしょうか。
データ用のmdbとプログラム用のmdbを分けていて、プログラム側からテーブルをバックアップしたいので、このような方法をとっていますが、他に良い方法があれば教えてください。

A 回答 (2件)

DAOを使用した方法ですが...


適当なフォームにコンボボックスとコマンドボタンを配置して下さい

下記コードによって、掲題の事は可能だと思われます
アレンジすれば、リンクテーブルの作成とかも可能です

※参照設定にて「Micorosoft DAO *.* Object Library」をチェックして下さい
'-------------------------------------------------
Private Sub Form_Open(Cancel As Integer)
  
  Dim Dbs     As DAO.Database
  Dim Tdf     As DAO.TableDef
  Dim strTbls   As String
  
  Set Dbs = CurrentDb
  
  'リンクテーブル一覧作成
  strTbls = ""
  For Each Tdf In Dbs.TableDefs
    If Left(Tdf.Name, 4) <> "MSys" And Tdf.Connect <> "" Then
      strTbls = strTbls & Tdf.Name & ";"
    End If
  Next
  
  Set Dbs = Nothing
  
  'コンボボックスにリンクテーブルを設定
  Me.cmbTableName.RowSourceType = "Value List"
  Me.cmbTableName.RowSource = strTbls
  
End Sub

Private Sub cmdInportTable_Click()
  
  Dim Dbs     As DAO.Database
  Dim Tdf     As DAO.TableDef
  Dim strSrcDbs  As String
  Dim strSrcTbl  As String
  Dim strCpyTbl  As String
  
  'テーブルが指定されなければ抜ける
  If IsNull(Me.cmbTableName.Value) = True Then Exit Sub
  
  '対象テーブル設定
  Set Dbs = CurrentDb
  Set Tdf = Dbs.TableDefs(Me.cmbTableName.Value)
  
  'リンク先DB、リンクテーブル、インポート後の名前指定
  strSrcDbs = Mid(Tdf.Connect, 11)
  strSrcTbl = Tdf.SourceTableName
  strCpyTbl = Tdf.SourceTableName
  
  '対象リンクテーブルをインポート
  Dbs.TableDefs.Refresh
  DoCmd.TransferDatabase _
          acImport, _
          "Microsoft Access", _
          strSrcDbs, _
          acTable, _
          strSrcTbl, _
          strCpyTbl
  
  '完了メッセージ
  MsgBox "[" & Tdf.Name & "] をインポートしました"
  
  Set Tdf = Nothing
  Set Dbs = Nothing
  
End Sub
    • good
    • 0

本体って、データの内容をコピーしたいってことですよね?



テーブル作成クエリーを使用します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A