• ベストアンサー

ADOXによるテーブルのコピー

Access2000を勉強中のものです。 ADOXによってテーブルをコピーしたいのですが、 下記のようなソースを書いてもうまくいきません。 どのようにすればコピーできるのでしょうか? -------------------------------------------- Function テーブルのコピー() Dim cl As New ADOX.Catalog Dim tb As New ADOX.Table Dim sb As New ADOX.Table cl.ActiveConnection = CurrentProject.Connection Set tb = cl.Tables!コピー元のテーブル Set sb = tb 'コピーしたテーブルの名前を設定 sb.Name = "新しいテーブル" 'テーブルを追加する 'cl.Tables.Append sb MsgBox (sb.Name & "を作成しました。") End Function

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

CopyObject 使う手もあります。 DoCmd.CopyObject , "新しいテーブル名", acTable, "コピー元のテーブル名"

mojiraa
質問者

お礼

ありがとうございました。 非常に簡単にできました。

その他の回答 (1)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 Setでは、参照を代入するだけで、コピーすることは出来ません。 Set sb = tb はテーブル自体をコピーするのではなく、tbの参照先をsbの参照先としてコピーするだけです。 つまり、sbもコピー元のテーブルを参照することになります。 テーブルを別名でコピーするのだったら、以下のようにTransferDatabaseメソッドを使用すれば出来ます。 TransferDatabaseメソッドについては、ヘルプを参照して下さい。 Function テーブルのコピー() As Long   Dim tempFileName As String 'このAccessファイルのフルパスファイル名   'このAccessファイルのフルパスファイル名を取得する   tempFileName = Application.CurrentProject.path   If Right(tempFileName, 1) <> "\" Then     tempFileName = tempFileName & "\"   End If   tempFileName = tempFileName & Application.CurrentProject.Name   '自分自身からコピー元のテーブルを別名でインポートする   DoCmd.TransferDatabase acImport, "Microsoft Access", tempFileName, acTable, "コピー元のテーブル名", "新しいテーブル名" End Function

mojiraa
質問者

お礼

上記以外にもいろいろな方法があるみたいですね。 ありがとうございました。

関連するQ&A