Microsoft.Ass.OLEDB.12.0 Aktuelle Recordset unterstützt keine Aktualisierung-Fehler empfangen, wenn Sie versuchen zu aktualisieren, Zugriff
Ich habe eine ASP Seite, wo ein Benutzer laden Sie eine excel-Datei. Nachdem die Datei erfolgreich hochgeladen ist, will ich die Zeilen, die in der REGION Registerkarte und legen Sie Sie in eine MS-Access-2007-Tabelle. Unten ist der code, den ich verwendet, und ich bin immer diese Fehlermeldung. Kann ich den recordset aktualisieren mit dem Microsoft.Ass.OLEB.12.0 Anbieter? Gibt es einen besseren Weg, dies zu tun?
ADODB.Recordset-Fehler '800a0cb3'
Aktuelle Recordset unterstützt keine Aktualisierung. Dies kann eine Einschränkung des providers oder des gewählten locktypes.
Set cnnExcel = Server.CreateObject("ADODB.Connection")
cnnExcel.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & strExcelFile & ";" & _
"Extended Properties=" & Chr(34) & "Excel 12.0 Xml;HDR=Yes;IMEX=1" & Chr(34) & ";"
Response.Write "Excel connection opened<BR>"
' Load ADO Recordset with Excel Data
Set rstExcel = Server.CreateObject("ADODB.Recordset")
rstExcel.Open "Select * from [REGION$]", cnnExcel, adOpenStatic
Response.Write "Excel Recordset loaded<BR>"
' Open Access Connection
Set cnnAccess = Server.CreateObject("ADODB.Connection")
cnnAccess.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strAccessFile & ";Persist Security Info=False;"
Response.Write "Access connection opened<BR>"
Const adOpenStatic = 1
Const adLockOptimistic = 3
Const adCmdText = &H0001
' Load ADO Recordset with Access Data
Set rstAccess = Server.CreateObject("ADODB.Recordset")
rstAccess.Open "REGION", cnnAccess, adOpenStatic, adLockOptimistic, adCmdTable
Response.Write "Access Recordset loaded<BR>"
' Synchronize Recordsets and Batch Update
Do Until rstExcel.EOF
' .AddNew
For each field in rstExcel.Fields
If field.Name = "% Over/Under" Then
rstAccess.AddNew field.Name,0
Else
rstAccess.AddNew field.Name,field.Value
End If
Next
rstExcel.MoveNext
Loop
rstAccess.UpdateBatch
- Ich habe gerade bemerkt, dass man "server". Haben Sie überprüft, die Berechtigungen auf den Ordner?
- Auch ist es Ihre Absicht, dass Sie sollten einen neuen Datensatz für jedes Feld? Wenn nicht, müssen Sie eine AddNew -, Feld-Schleife und eine update. Was immer Sie auch tun, loszuwerden, BatchUpdate. Ich glaube nicht, dass Sie tut, was Sie denken.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Danke Hans, Tim und Remou. Ich folgte diesem Beispiel Mit INSERT INTO schreiben von Daten in access-Datenbank
IN
möglich war...Müssen Sie einen anderen cursor-Typ - adOpenStatic unterstützt keine updates.
http://www.w3schools.com/ado/prop_rs_cursortype.asp
rstAccess.UpdateBatch
da die Datensätze sind alreadt Hinzugefügt.Sagte Sie, " ... ich möchte die Zeilen, die in der REGION Registerkarte und legen Sie Sie in eine MS-Access-2007 Tabelle".
Obwohl ich nicht vollständig verstehen, Ihre Beispielcode, Sie scheinen sich zu öffnen ein recordset für die Tabelle und eine für die Excel-Arbeitsblatt, dann bewegt sich durch die Excel-recordset und einfügen (etwas für) jede Zeile in der Access-recordset.
Wenn der Access recordset wurde bearbeitbar (also nicht nur Lesen), könnten Sie einfügen etwas. Aber selbst wenn Sie es geschafft habe, würden Sie immer noch Links mit einer RBAR (Zeile Durch Quälende Zeile) Ansatz. Es wäre besser, verwenden Sie einen set-basierten Ansatz, so dass Sie alle importieren das Arbeitsblatt Zeilen als eine einzelne operation.
Hier ist eine Access-Abfrage, die nachahmt, was ich denke, Sie versuchen zu tun. Meine
Region
Arbeitsblatt hat 4 Spalten von Daten:% Over/Under
;fld2
;fld3
; undfld4
. Der ZugangREGION
Tabelle hat die gleichen 4 Spalten mit kompatiblen Datentypen.Wenn Sie können eine ähnliche Abfrage arbeiten in Ihrer Access-Datenbank, ändern Sie Ihre ASP-zum öffnen der ADO-Verbindung zu Ihrem Access-db, dann nutzen Sie die Verbindung zu
Execute
IhreINSERT
- Anweisung. ASP-code wäre viel einfacher als das, was Sie jetzt haben, und sollten die arbeiten deutlich schneller.