behmMedlem sedan feb. 200123 inlägg Har Access 2000 & Win 98 (version 2).
När jag i ett recordset öppnar en tabell innehållande cirka 300000 poster där en post i taget uppdateras för att sedan läsas tillbaka får jag efter att ha gått igenom 9495 poster följande felmeddelande:
"File Sharing Lock Count exceeded"
"Increase MaxLocksPerFile registry entry."
I Regedit är MaxLocksPerFile satt till 9500, men det ska väl inte inverka då posterna återläses innan nästa läses in?
Kod följer nedan:
Option Compare Database
Option Explicit
Public MoveRs As Recordset
Public MoveSql As String
Public Sub X_CalculateCrossingTime()
On Error GoTo Err_X_CalculateCrossingTime
MoveSql = "SELECT TblClientPlaceMoves.Distance, TblClientPlaceMoves.CrossingTime FROM TblClientPlaceMoves;"
Set MoveRs = CurrentDb.OpenRecordset(MoveSql)
With MoveRs
.MoveFirst
Do Until .EOF
.Edit
!CrossingTime = 10
.Update
.MoveNext
Loop
.Close
End With
Exit_X_CalculateCrossingTime:
Exit Sub
Err_X_CalculateCrossingTime:
MsgBox Err.Description
Resume Exit_X_CalculateCrossingTime
End Sub
/E Behm
------------------
Behm
LarsGMedlem sedan dec. 200012 464 inlägg Det är bättre att använda en update-sats direkt. Då slipper du att loopa ockå.
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
MoveSql = "update TblClientPlaceMoves set crossingTime = 10"
och sedan gör man execute. (Nu vet jag inte hur det ser ut i den miöjö du har. Är det DAO du använder?)
------------------
essentitia preter non sans multiplicandum
[Redigerat av LarsG den 15 nov 2001]
behmMedlem sedan feb. 200123 inlägg Hej
Jag glömde lägga till att jag gör tilldelningen av 10 bara för att testa koden i övrigt. Jag kommer att göra mer beräkningar men dessa är ännu ej inlagda.
Jag kör med:
Visual Basic for Applications
Microsoft Access 9.0 object library,
OLE automation,
Utility,
Microsoft DAO 3.6 object library,
Microsoft Visual Basic for Applications Extensibility 5.3
------------------
Behm
LarsGMedlem sedan dec. 200012 464 inlägg Det går att lägga in beräkningar i sql-satsen också.
Du kan också referera befintliga värden
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
update t set c1 = c1 + 10, c2 = c3+3,
c3 = iif(c3 = 1, 10,20)
den sista innebär att beroende på det befintliga värdet i kolumn så gör man olika uppdateringar, så jag tror nog att det går att åstadkomma med hjälp av SQL.
------------------
essentitia preter non sans multiplicandum