要主張我的建議在交易中使用的命令,我寫了 此腳本:
Dim sAct : sAct = "trout"
If goWAN.Exists("a") Then sAct = goWAN("a")
Dim nRecs : nRecs = 10
If goWAN.Exists("n") Then nRecs = CLng(goWAN("n"))
Dim sMFSpec : sMFSpec = goFS.GetAbsolutePathName("..\data\ut.mdb")
Dim oConn : Set oConn = CreateObject("ADODB.Connection")
Dim oRs : Set oRs = CreateObject("ADODB.Recordset")
Dim nRec, oCmd, nRA, aData, oParm
oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sMFSpec
Set oRs.ActiveConnection = oConn
oConn.Execute("DELETE FROM tLines")
WScript.Echo "#Recs:", oConn.Execute("SELECT COUNT(SampleText) FROM tLines").Fields(0)
WScript.Echo sAct
Select Case sAct
Case "trout"
Case "bob"
oRs.CursorLocation = adUseClient
oRs.CursorType = adOpenKeySet
oRs.LockType = adLockBatchOptimistic
Case "eh"
End Select
WScript.Echo "oRs.CursorLocation: ", oRs.CursorLocation
WScript.Echo "oRs.CursorType: ", oRs.CursorType
WScript.Echo "oRs.LockType: ", oRs.LockType
Select Case sAct
Case "trout", "bob"
oRs.Open "tLines", oConn, , adLockBatchOptimistic
For nRec = 1 to nRecs
oRs.AddNew
oRs("SampleText") = "This is line " & nRec
Next
oRs.UpdateBatch
oRs.Close
Case "eh"
oConn.BeginTrans
Set oParm = CreateObject("ADODB.Parameter")
With oParm
.Name = "A"
.Type = adVarChar
.Value = ""
.Direction = adParamInput
.Size = 100
End With
Set oCmd = CreateObject("ADODB.Command")
With oCmd
Set .ActiveConnection = oConn
.CommandText = "INSERT INTO tLines (SampleText) VALUES (?)"
.CommandType = adCmdText
.Parameters.Append oParm
End With
ReDim aData(0)
For nRec = 1 to nRecs
aData(0) = "This is line " & nRec
oCmd.Execute nRA, aData, adExecuteNoRecords + adCmdText
Next
oConn.CommitTrans
End Select
WScript.Echo "#Recs:", oConn.Execute("SELECT COUNT(SampleText) FROM tLines").Fields(0)
WScript.Echo "First:", oConn.Execute("SELECT TOP 1 * FROM tLines").Fields(0)
oConn.Close
調用/ N:200和/ A:鱒魚它顯示:
#Recs: 0
trout
oRs.CursorLocation: 2
oRs.CursorType: 0
oRs.LockType: 1
... xpl.vbs(246, 11) Provider: Number of rows with pending changes exceeded the limit.
所以我認爲,我正確地重現了你的問題。對於/ A:鮑勃:
#Recs: 0
bob
oRs.CursorLocation: 3
oRs.CursorType: 1
oRs.LockType: 4
#Recs: 200
First: This is line 1
xpl.vbs: Erfolgreich beendet. (0) [ 19.74219 secs ]
所以設置
oRs.CursorLocation = adUseClient
oRs.CursorType = adOpenKeySet
oRs.LockType = adLockBatchOptimistic
鮑勃(微軟)諫是一個解決您的問題。爲了得到一些速度,我把一個 指令到交易:
oConn.BeginTrans
Set oCmd = CreateObject("ADODB.Command")
...
ReDim aData(0)
For nRec = 1 to nRecs
aData(0) = "This is line " & nRec
oCmd.Execute nRA, aData, adExecuteNoRecords + adCmdText
Next
oConn.CommitTrans
結果:
#Recs: 0
eh
oRs.CursorLocation: 2
oRs.CursorType: 0
oRs.LockType: 1
#Recs: 200
First: This is line 1
xpl.vbs: Erfolgreich beendet. (0) [ 1.47656 secs ]
月20日至2秒(不帶任何屬性擺弄)似乎沒有對我不好。
你從哪裏得到記錄?外部來源(文件?)?或者你在內存中生成它們? –
它們在內存中生成。如果你認爲這會有所幫助,我可以先將它們寫入一個文件,但這並不是解決這種問題的正確方法。 – Simon