OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

VBの質問です

  • すぐに回答を!
  • 質問No.163962
  • 閲覧数176
  • ありがとう数0
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 0% (0/16)

VB6を使って開発をしています。
AとB2つのMDBがあってAの全テーブルのデータをBの全テーブルにデータをコピーしたいのですがプログラムでどうやるのかがわかりません。
どなたかわかるかた私に教えてください。お願いします。
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル12

ベストアンサー率 65% (276/422)

サンプルです。

データレコード1件づつやらないでもできます。
CopyTableに二つのファイルパス(元、先)を指定してください。


Private Const CONNECTCONST    As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="

Sub Main()
  Call CopyTable("c:\A.mdb", "c:\B.mdb")
End Sub

Sub CopyTable(inSrcDB As String, inDstDB As String)
  Dim Cnn As ADODB.Connection
  Dim Cat As ADOX.Catalog
  Dim wkTbl  As ADOX.Table
  Dim strConnect As String
  
  Dim strTblName As String
  
  Dim strSQL   As String
  
  'まず初期化
  Set Cnn = New ADODB.Connection
  Set Cat = New ADOX.Catalog
  
  'DBの接続文字
  strConnect = CONNECTCONST & inSrcDB & ";"
  '接続
  Cnn.Open strConnect
  'カタログ作成
  Cat.ActiveConnection = Cnn
  
  'カタログの中から、システムテーブル以外のものについて処理を行います。
  For Each wkTbl In Cat.Tables
    If wkTbl.Type = "TABLE" Then
      'テーブル名を取得
      strTblName = wkTbl.Name
      
      'コピー先のテーブルデータを削除するSQL文の実行
      strSQL = "delete from [" & inDstDB & "]." & strTblName
      Cnn.Execute strSQL
      
      'コピー元をコピー先へデータをコピーするSQL文の実行
      strSQL = "insert into [" & inDstDB & "]." & strTblName & _
        " select * from " & strTblName
      Cnn.Execute strSQL
      
    End If
  Next wkTbl
  
  Cnn.Close
  Set Cnn = Nothing
End Sub
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル11

ベストアンサー率 30% (72/239)

AとBはまったく同じ構造のDBであると仮定して…。 初歩的なフローとしてはテーブル毎に、 1.AのDBから1レコード取得する。 2.BのDBに1レコード書き込む。 をAのレコード件数分ループして行う。 という感じですね。 ひょっとしてフローではなくてコーディング方法やDBの操作方法が知りたいのでしょうか? ...続きを読む
AとBはまったく同じ構造のDBであると仮定して…。

初歩的なフローとしてはテーブル毎に、
1.AのDBから1レコード取得する。
2.BのDBに1レコード書き込む。
をAのレコード件数分ループして行う。

という感じですね。
ひょっとしてフローではなくてコーディング方法やDBの操作方法が知りたいのでしょうか?
補足コメント
bzpooh

お礼率 0% (0/16)

あまりにもレコード数もテーブル数も多いのでループすると処理時間がかかってしまいます。もっと早く処理する方法はありますか??
投稿日時 - 2001-11-06 14:42:24
  • 回答No.2
レベル12

ベストアンサー率 65% (276/422)

必要な情報が載ってません。 1.DBの接続方式は?ADOとかDAOなどがありますよね。 2.Aに元のテーブルがあるんですよね。Bにも同じテーブルが存在してるのですか?テーブルの作成から行うのですか? 2-1.もしテーブルの作成から行うのであれば、キーとかの情報も全てコピーするのですか? 2-2.もしテーブルの作成を行わないのであれば、すでにBに入っているデータは消去するのですか? ...続きを読む
必要な情報が載ってません。

1.DBの接続方式は?ADOとかDAOなどがありますよね。
2.Aに元のテーブルがあるんですよね。Bにも同じテーブルが存在してるのですか?テーブルの作成から行うのですか?
2-1.もしテーブルの作成から行うのであれば、キーとかの情報も全てコピーするのですか?
2-2.もしテーブルの作成を行わないのであれば、すでにBに入っているデータは消去するのですか?
補足コメント
bzpooh

お礼率 0% (0/16)

DBの接続はADOです。テーブルはまったく同じものです。しかしテーブルは複数あり全部同じです。
2 テーブルの作成はしないです。テーブルの中味のデータだけをコピーしたいです。
2-2 Bには行っているテーブルは消去します。
すいません補足させていただきます。
投稿日時 - 2001-11-06 14:37:39
  • 回答No.3
レベル11

ベストアンサー率 30% (72/239)

詳細な用途がわからないのでなんとも回答が難しいです。 DBのまるごとバックアップなのか、追記でもよいのか。 スピードを優先されたい様ですが、 BのDB自体を一旦削除し、 AのDBをBとしてリネーム(又はコピー)するっていうのはいかがですか? ...続きを読む
詳細な用途がわからないのでなんとも回答が難しいです。
DBのまるごとバックアップなのか、追記でもよいのか。

スピードを優先されたい様ですが、
BのDB自体を一旦削除し、
AのDBをBとしてリネーム(又はコピー)するっていうのはいかがですか?
補足コメント
bzpooh

お礼率 0% (0/16)

練習用のDBと本番用のDBと内容がまったく同じであるのですが、帳票を使っているため帳票用のテーブルはコピーはできないみたいなので全部で約20テーブルくらいのテーブルの中味だけをコピーしたいです。
やっぱり1レコードづつループでまわすしかないでしょうか??
投稿日時 - 2001-11-06 15:44:42
  • 回答No.4
レベル12

ベストアンサー率 65% (276/422)

全く同意見です。 単なるMDBのバックアップなら、 Kill B.mdb FileCopy A.mdb, B.mdb で良いのでは? もしかして、B.mdbは削除してはいけないテーブルも存在してるのですか? ...続きを読む
全く同意見です。

単なるMDBのバックアップなら、
Kill B.mdb
FileCopy A.mdb, B.mdb
で良いのでは?

もしかして、B.mdbは削除してはいけないテーブルも存在してるのですか?
補足コメント
bzpooh

お礼率 0% (0/16)

何回も補足してすいません。
Bのmdbにはけせないテーブルがあるんです。
mdbじたいもODBCでつないでいるものです。
投稿日時 - 2001-11-06 16:00:49
  • 回答No.5
レベル11

ベストアンサー率 30% (72/239)

まとめますと…。 1.デバッグ用DB(A)、本番用DB(B)があり、  BへAのレコードをテーブル毎に移行(コピー?)したい。  (どっちが本番用かは?です) 2.Bの帳票テーブルには削除できないレコードがある為、  帳票テーブルについては追記を行いたい。  ⇒主キーが重なる場合は移行は行わない。 ※ここで問題となるのがその他のテーブルで、  Bの既存レコードはどうするのでしょ ...続きを読む
まとめますと…。

1.デバッグ用DB(A)、本番用DB(B)があり、
 BへAのレコードをテーブル毎に移行(コピー?)したい。
 (どっちが本番用かは?です)

2.Bの帳票テーブルには削除できないレコードがある為、
 帳票テーブルについては追記を行いたい。
 ⇒主キーが重なる場合は移行は行わない。

※ここで問題となるのがその他のテーブルで、
 Bの既存レコードはどうするのでしょう?
 (1)テーブルの内容をクリアしてまったくAと同じにするのでしょうか?
 (2)もしくは追記を行い主キーが重なった場合は上書きとするのでしょうか?

こんな感じでしょうか?補足お願い致します。

P.S.
VBでDBバックアップツールを開発していらっしゃるのでしょうか?
補足コメント
bzpooh

お礼率 0% (0/16)

Bの中にあるレコードの中味は消去します。
あるテーブルだけ残してほかのテーブルの中味を全部いれたいのです。

私は普通のVBでのシステムを開発しています。バックアップはやっていないです。

本当に話がわかりずらい文章ですいません。
投稿日時 - 2001-11-06 16:28:39
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ