.Save()
次の方法で、ADODB レコードセットのメソッドを使用して XML ファイルを作成しました。
dim res
dim objXML: Set objXML = Server.CreateObject("MSXML2.DOMDocument")
'This returns an ADODB recordset
set res = ExecuteReader("SELECT * from some_table)
With res
Call .Save(objXML, 1)
Call .Close()
End With
Set res = nothing
上記で生成された XML がファイルに保存されると仮定しましょう。
次のように XML をレコードセットに読み込むことができます。
dim res : set res = Server.CreateObject("ADODB.recordset")
res.open server.mappath("/admin/tbl_some_table.xml")
そして、問題なくレコードをループできます。
しかし、私が本当にやりたいことは、すべてのデータをres
まったく別のデータベースのテーブルに保存することです。some_table
この別のデータベースには既に存在し、XML を作成するために最初に照会したテーブルとまったく同じ構造を持っていると想定できます。
新しいレコードセットを作成し、新しいレコードセットにすべての行を追加するために使用することから始めましAddNew
たres
dim outRes : set outRes = Server.CreateObject("ADODB.recordset")
dim outConn : set outConn = Server.CreateObject("ADODB.Connection")
dim testConnStr : testConnStr = "DRIVER={SQL Server};SERVER=dev-windows\sql2000;UID=myuser;PWD=mypass;DATABASE=Testing"
outConn.open testConnStr
outRes.activeconnection = outConn
outRes.cursortype = adOpenDynamic
outRes.locktype = adLockOptimistic
outRes.source = "product_accessories"
outRes.open
while not res.eof
outRes.addnew
for i=0 to res.fields.count-1
outRes(res.fields(i).name) = res(res.fields(i).name)
next
outRes.movefirst
res.movenext
wend
outRes.updatebatch
res
しかし、これは私が最初に値を からに代入しようとしたときに爆発しoutRes
ます。
Microsoft OLE DB Provider for ODBC Drivers エラー '80040e21'
複数ステップの OLE DB 操作でエラーが発生しました。利用可能な場合は、各 OLE DB ステータス値を確認します。作業は行われませんでした。
XML からロードされたデータを別のデータベースにコピーするためのより良い方法を教えてください。
更新、部分的に解決
したがって、私のエラーは、Identityフィールドの値を設定しようとしたことが原因であることがわかりました。そのフィールドを ID に一時的に変更すると、すべてのデータが完全に挿入されます。
さて、フォローアップの質問
そのフィールドの Identity プロパティを一時的にオフにし、更新が完了したら再びオンにするにはどうすればよいですか?