プロが教えるわが家の防犯対策術!

VB初心者質問です。
開発環境 VB6 SP6
WIN2000 
VB6を使用しテーブルをコピーしようと思っています。
サイトが見つけられませんのでどなたかアドバイスお願います。
(内容)
a.mdbとb.mdbの2つがあり、それぞれaaaテーブル
があります。(構造は同一です)
a.mdbのaaaテーブルをb.mdbのaaaテーブルに上書きコピーするにはどのようにすればよろしいですか?
よろしくお願いします。

A 回答 (4件)

b.mdb上にa.mdbのリンクテーブルlinkaaaを作ってよいならば、


ADOでコネクションを作って
connection.execute "DELETE FROM aaa;"
connection.execute "INSERT INTO aaa SELECT * FROM linkaaa;"
が簡単かなと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。接続はADOで結構ですが残念ながらリンクテーブルの設定は出来ない状況です。

お礼日時:2006/06/28 16:14

マクロの中に「オブジェクトのコピー」というのがあります。



それを、VBAに変換してみました。
DoCmd.CopyObject "C:\コピー先.mdb", "コピー先での名前", acTable, "コピー元の名前"



またはSQL文で、テーブル作成クエリのようなことも出来ます。
Dim l_strSQL As String
l_strSQL = ""
l_strSQL = l_strSQL & "SELECT * " & vbCrLf
l_strSQL = l_strSQL & "INTO [MS Access; DATABASE=C:\コピー先.mdb].コピー先での名前" & vbCrLf
l_strSQL = l_strSQL & "FROM コピー元の名前" & vbCrLf

CurrentProject.Connection.Execute (l_strSQL)
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
この回答ってACCESSのVBAではないかと
思いますがいかがでしょうか?
当方、VB6での処理で考えています。
はずしていましたらお許しください。

お礼日時:2006/06/28 16:24

>ACCESSのVBAではないかと思いますがいかがでしょうか?


>当方、VB6での処理で考えています。

※DoCmdについて
VB6であれば、その前にアクセスアプリケーション.DoCmdにするだけです。

※ADOについて
VB6であれば、独自にコネクションを張って、それに仕事をさせるだけです。


Sub アクセス利用()
  Dim accObj As Object
  Set accObj = CreateObject("Access.Application")
  accObj.OpenCurrentDatabase "C:\コピー元.mdb"
  accObj.DoCmd.CopyObject "C:\コピー先.mdb", "コピー先での名前", 0, "コピー元の名前"
  
  accObj.Quit
  Set accObj = Nothing
End Sub

Sub ADOでの方法()
  Dim l_strSQL  As String
  Dim l_adoCnn  As Object
  Set l_adoCnn = CreateObject("ADODB.Connection")
  
  l_adoCnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\コピー元.mdb"
  
  l_strSQL = ""
  l_strSQL = l_strSQL & "SELECT * " & vbCrLf
  l_strSQL = l_strSQL & "INTO [MS Access; DATABASE=C:\コピー先.mdb].コピー先の名前" & vbCrLf
  l_strSQL = l_strSQL & "FROM コピー元の名前" & vbCrLf
  
  l_adoCnn.Execute (l_strSQL)
  
  l_adoCnn.Close
  Set l_adoCnn = Nothing
End Sub
    • good
    • 0
この回答へのお礼

大変失礼しました。
丁寧なアドバイスありがとうございます。
早速試してみます。

お礼日時:2006/06/28 17:03

すいません。

訂正です。

>a.mdbとb.mdbの2つがあり、それぞれaaaテーブルがあります。(構造は同一です)
これを読み飛ばしておりました。

私の方法は、コピー先にテーブルを作成する方法です。
以下に、訂正を記します。


※ADOでの方法()メソッドにおいて
↓この部分は不要
>l_strSQL = ""
>l_strSQL = l_strSQL & "SELECT * " & vbCrLf
>l_strSQL = l_strSQL & "INTO [MS Access; DATABASE=C:\コピー先.mdb].コピー先の名前" & vbCrLf
>l_strSQL = l_strSQL & "FROM コピー元の名前" & vbCrLf
>l_adoCnn.Execute (l_strSQL)


んで、こっちを利用してください。
内容は#1の16AugustさんのSQL文と、ほぼ一緒です。
違いは、クエリを利用しないだけです。

l_strSQL = ""
l_strSQL = l_strSQL & "DELETE * FROM [MS Access; DATABASE=C:\コピー先.mdb].aaa" & vbCrLf
l_adoCnn.Execute (l_strSQL)

l_strSQL = ""
l_strSQL = l_strSQL & "INSERT INTO [MS Access; DATABASE=C:\コピー先.mdb].aaa" & vbCrLf
l_strSQL = l_strSQL & "SELECT *" & vbCrLf
l_strSQL = l_strSQL & "FROM aaa" & vbCrLf
l_adoCnn.Execute (l_strSQL)
    • good
    • 0
この回答へのお礼

おかげさまで問題解決しました。
本当にありがとうございました。

お礼日時:2006/06/29 11:49

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