2009-09-02 9 views
0

VB 6とAccess 2003の使用あるデータベースから他のデータベースにテーブルをコピーする方法は?

あるデータベースから別のデータベースにテーブルをコピーしたいとします。

Database1を

Table1 
Table2 

データベース2

Table3 

は、上記の、私はコードを書くためにどのようにDatabase1を

Expected Output 

Table1 
Table2 
Table3 

に表3をコピーしたいですか?

VB6コードヘルプが必要です。

+0

テーブルスキーマだけをコピーするか、テーブルスキーマ*とそのデータを必要とするかは言及していません。 –

答えて

4

ADOXを使用してデータの構造をコピーすると、おそらく最も簡単な方法になります。

Dim sourceCat As New ADOX.Catalog 
Dim targetCat As New ADOX.Catalog 

Set sourceCat.ActiveConnection = connSource 
targetCat.ActiveConnection = connTarget 

Dim sourceTable As ADOX.Table 
Set sourceTable = sourceCat.Tables("TableName") 

Dim newTable As New ADOX.Table 
Set newTable.ParentCatalog = targetCat 
newTable.Name = sourceTable.Name 

Dim sourceCol As ADOX.Column 
Dim newCol As ADOX.Column 

For Each sourceCol In sourceTable.Columns 
    Set newCol = New ADOX.Column 
    newCol.Name = sourceCol.Name 
    newCol.Type = sourceCol.Type 
    newCol.DefinedSize = sourceCol.DefinedSize 
    newCol.ParentCatalog = targetCat 

    newTable.Columns.Append newCol 
Next sourceCol 

targetCat.Tables.Append newTable 

これはかなり基本的な例であり、それはすべてのインデックス と(例えば、自動インクリメントのような)列プロパティを無視します。

もっと完全な例はhereです。

+0

ADOXへの参照を追加する必要があることに注意してください。 –

0

ADO(CHECKの制約、WITH COMPRESSIONなど)とACEDAO(複雑なデータ型などに必要なもの)の両方を使用している場合でも、テーブルのスキーマをすべて抽出したことを確認できないことに注意してください。

ここでそのような表の例は次のとおり

Sub CantGetCheck() 

    On Error Resume Next 
    Kill Environ$("temp") & "\DropMe.mdb" 
    On Error GoTo 0 

    Dim cat 
    Set cat = CreateObject("ADOX.Catalog") 

    With cat 

    .Create _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "Data Source=" & _ 
     Environ$("temp") & "\DropMe.mdb" 

    With .ActiveConnection 

     Dim Sql As String 
     Sql = _ 
     "CREATE TABLE Test " & _ 
     "(" & _ 
     " data_col INTEGER NOT NULL, " & _ 
     " CONSTRAINT data_col__be_positive " & _ 
     " CHECK (data_col >= 0), " & _ 
     " CONSTRAINT data_col__values " & _ 
     " CHECK (" & _ 
     "   data_col = 0 OR data_col = 1 OR data_col = 2 " & _ 
     "   OR data_col = 3 OR data_col = 4 OR data_col = 5 " & _ 
     "   OR data_col = 6 OR data_col = 7 OR data_col = 8 " & _ 
     "   OR data_col = 9 OR data_col = 10 OR data_col = 11 " & _ 
     "   OR data_col = 12 OR data_col = 13 OR data_col = 14 " & _ 
     "   OR data_col = 15 OR data_col = 16 OR data_col = 17 " & _ 
     "   OR data_col = 18 OR data_col = 19 OR data_col = 20 " & _ 
     "   ) " & _ 
     ");" 
     .Execute Sql 

     Dim rs 

     ' 5 = adSchemaCheckConstraints 
     Set rs = .OpenSchema(5) 

     MsgBox rs.GetString 

    End With 

    Set .ActiveConnection = Nothing 
    End With 

End Sub 

出力は示していdata_col__be_positive指定された制約の定義が実際に抽出することができるが、data_col__values定義できない(それは255文字を超えているため)。

本当に解決策は、作成してその後テーブルを変更する際に使用したコードを常に保持することです。私のために、目的のためにSQL DDLスクリプトを使用することは非常に意味があります(私はDDLを介して作成できないいくつかの機能は必要ありません)。

関連する問題