webForumDet fria alternativet

Access 2000 FileSharingLock

3 svar · 283 visningar · startad av behm

behmMedlem sedan feb. 200123 inlägg
#1

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
#2

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
#3

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
#4

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

259 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
125 ms — hämta statistik (db)
132 ms — hämta tråd, inlägg och bilagor (db)