- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
CopyObject 使う手もあります。 DoCmd.CopyObject , "新しいテーブル名", acTable, "コピー元のテーブル名"
その他の回答 (1)
- maruru01
- ベストアンサー率51% (1179/2272)
こんにちは。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
お礼
上記以外にもいろいろな方法があるみたいですね。 ありがとうございました。
お礼
ありがとうございました。 非常に簡単にできました。