Avatar billede Slettet bruger
17. august 2006 - 00:15 Der er 2 kommentarer og
1 løsning

Access bryde/undgå lock af rækker

Hej,

Hvordan sætte man lock timeout på en connection? jeg har prøver med connection_object.properties("Jet OLEDB: Lock delay") = 100, men får fejlen "item cannot be found in the collection corresponding to the requested name or ordinal" (err# 3265).

min connection ser således ud:
set connection_object = new adodb.connection
connection_object.provider = "microsoft.jet.OLEDB.4.0"
connection_object.open path

Jeg arbejder på Excel/VBA platform.


Baggrunden for mit spørgsmål:
Jeg har problemer med at mine records bliver låst og ikke kan låses op igen (efter 5 min lader det dog til at de bliver låst op igen).
Jeg regner ikke med at kunne komme uden om fejlen "could not update currently locked" (err#-2147467259), men at jeg bliver nødt til at lave en workaround (beskrevet senere)
Jeg er ikke interesseret i at de bliver låst overhovedet, men det kan vist ikke undgås :-( - det har jeg læst mig til i denne artikel:

http://www.expresscomputeronline.com/20030210/techspace1.shtml

Jeg har fra samme artikel fundet dette afsnit:

"Now, if you want to know if something is locked, and you try to lock it, you are taking the risk of getting blocked, if the original lock is not released quickly. This waiting is ENDLESS. Because the default value of Lock Timeout is -1, that means no timeout period—wait endlessly.

If you put some value for lock timeout property, the blocked connection will be released after that period elapses. The blocked connection is now free to do something else."

Jeg går ud fra jeg skal lave en loop der bliver ved med at sende queryen indtil den går igennem.
For at jeg ikke skal låse rækken med lock timeout = -1 (og dermed lave en uendelig løkke samtidig med jeg ikke får updateret rækken) må jeg nødvendigvis sætte lock time != -1.

Jeg har også set lidt på disse kommentarer - den første beskriver hvordan man kan fjerne db lock ved at sende en fejl-query, men har ikke fået det til at virke (er ellers mod mine principper at lave et sådant hack, men hvis det er den eneste løsning...):
http://www.blogextra.com/backblog/feedback.asp?user=610&entry=90387257&blogname=CFMXPLUS%20http://cfmxplus.blogspot.com/2003_02_23_cfmxplus_archive.html~~90387257

^^kommentarerne er til denne side, hvis det skulle have nogen interesse:
http://cfmxplus.blogspot.com/2003/02/could-not-update-currently-locked-by.html

Håber i kan/vil hjælpe mig.

Vh Mathias.
Avatar billede Slettet bruger
17. august 2006 - 00:19 #1
Skal måske også nævnes hvad jeg har prøvet i mit tidligere spm.
http://www.eksperten.dk/spm/724099
Avatar billede Slettet bruger
17. august 2006 - 14:46 #2
Jeg har lavet en function der kører min sql med error handler:

Men den ser ud til at gå i endless lock som beskrevet i den artikel jeg postede. Nogen forslag til, hvordan jeg får sat timeoutlock på, så jeg jeg slipper for at låse rækken i flere minutter af gangen?

Function query_sql(ByVal sql As String)
    Dim timestamp As Date
    On Error GoTo error_handler
    rs.Open sql, connection_object
    Exit Function
error_handler:
    MsgBox (connection_object.Errors(0).SqlState)
    If connection_object.Errors(0).SqlState = 3218 Then
        timestamp = Now
        Do While DateDiff("s", timestamp, Now) < 2
            DoEvents
        Loop
        If MsgBox("Currently locked - Would you like to retry?", vbYesNo) = vbYes Then
            Resume
        End If
    Else
        MsgBox ("Another error :(")
    End If
End Function

/1.
Avatar billede Slettet bruger
30. januar 2007 - 10:57 #3
Og lukker..

Er ved at konvertere til mysql så jeg slipper for dette problem.

/1
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester