3

通常は、Recordset.AddNew を使用してループするだけですが、大きなレコードセットを扱う場合、これは非常に遅くなります。もっと良い方法はありますか? おそらく 2 つの ADO 接続を使用して、Oracle から Access に移動するための挿入ステートメントを単純に記述する方法があることを望んでいましたが、私が見つけることができる唯一の例は VB.net (OleDbCommand を使用) にあります。オプション。これは単に VBScript の制限ですか?

ありがとう!

4

2 に答える 2

0

OracleではなくSQLServerを使用するVBScriptに関する注意事項をいくつか示しますが、非常によく似たものを使用できるはずです。

Const CreatePath = "Z:\docs\"
Const Provider = "Microsoft.ACE.OLEDB.12.0;"
''The easiest way to get this line is from the connect property of 
''a linked table
Const ServerInLine = "[ODBC;DRIVER=SQL Server;SERVER=server;Trusted_Connection=Yes;DATABASE=db]"
''Change this to the Oracle connection
Const ServerConnect = "Provider=sqloledb;Data Source=server;Initial Catalog=db;Integrated Security=SSPI;"

Dim cnSS ''As ADODB.Connection
Dim cnMSA ''As ADODB.Connection
Dim cat ''As New ADOX.Catalog

Set cat = CreateObject("ADOX.Catalog")

Set cnSS = CreateObject("ADODB.Connection")
Set cnMSA = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cnSS.Open ServerConnect

''Only the locations that exist. Assuming a location table
''with a description, Location
sSQL = "SELECT DISTINCT a.LocationID, b.Location FROM ATable a "
sSQL = sSQL & "INNER JOIN Location b ON a.LocationID = b.ID"

rs.Open sSQL, cnSS

Do While Not rs.EOF

    DBName = CreatePath & Trim(rs.Fields("Location")) & ".accdb"
    scn = "Provider=" & Provider & ";Data Source=" & DBName

    cat.Create scn

    cnMSA.Open scn

    sSQL = "SELECT * INTO " & Replace(Trim(rs.Fields("Location")), " ", "")
    sSQL = sSQL & " FROM " & ServerInLine & ".ATable"
    sSQL = sSQL & " WHERE LocationID=" & rs.Fields("LocationID")

    cnMSA.Execute sSQL, recs
    sMsg = sMsg & vbCrLf & DBName & " created " & recs

    rs.MoveNext
    cnMSA.Close
Loop

MsgBox sMsg
于 2012-07-12T17:01:30.683 に答える