Avatar billede tchami Nybegynder
04. september 2003 - 15:44 Der er 18 kommentarer og
1 løsning

Låse record?

Hej,

Indholdet på mit site ligger alt sammen i en tabel. De enkelte sider kan man via DHTML Editing komponentet fra Microsoft redigere i, nu er det så bare at jeg vil sikre mig mod at to brugere samtidigt redigerer i den samme side.

Jeg har prøvet at sætte LockType til adLockPessimistic, men der kunne andre brugere sagtens åbne recorden, så den ser ikke ud til at du.

Det er en MySQL db, så jeg kunne måske umiddelbart forestille mig at man kunne bruge LOCK TABLES, men er ikke helt sikker på den duer da jo kun er en enkelt record der skal låses og ikke hele tabellen.

En anden løsning var at lave et status felt i min content tabel og så sætte det til 0 når en bruger redigerer i en side, og derved forhindre andre i at åbne recorden hvis status feltet er 0, men så støder jeg ind i et problem hvis den brugers (der redigerer siden) session timer ud, for så er recorden jo låst, og det går ikke.

Nogen der har en god idé?
Avatar billede netro Nybegynder
04. september 2003 - 16:09 #1
Lock Tables Tabelnavn1 Locktype, Tabel2 Locktype

Locktype kan du sætte til enten read eller write.
På samme vis kan du gøre dem tilgængelige igen:

Unlock Tables
Avatar billede tchami Nybegynder
04. september 2003 - 17:04 #2
Jeg vil jo netop IKKE låse hele tabellen, men kun en enkelt record som jeg også skrev..
Avatar billede netro Nybegynder
04. september 2003 - 17:10 #3
Ja, men det kan du ikke, så ikke vidt jeg ved.
Avatar billede tchami Nybegynder
04. september 2003 - 17:12 #4
Så var det jo det du skulle ha' svaret ;)

Lader spørgsmålet stå og vente på svar.
Avatar billede netro Nybegynder
04. september 2003 - 17:41 #5
Du spørger, om nogen har en god idé, og eftersom det er min eneste idé, er det selvfølgelig også den bedste ;o)
Avatar billede hossein Nybegynder
04. september 2003 - 17:48 #6
Kan lægge koden for den del hvor du åbner din recordset? er der nogle felter i din tabel som er indexeret?
Avatar billede hossein Nybegynder
04. september 2003 - 17:49 #7
Ah: Kan lægge = kan du lægge
Avatar billede tchami Nybegynder
04. september 2003 - 17:52 #8
Der er ikke nogen der er indexeret nej, men det kan de da muligvis blive..

mmm, det er bare en simpel
strSelectContentSQL = "SELECT content.content FROM content WHERE id = " & intId & ""
Set objContentRS = Conn.Execute(strSelectContentSQL)
der åbner mit recordset (noget i den dur i hvert fald).
Avatar billede hossein Nybegynder
04. september 2003 - 18:01 #9
Brug dette efter at du har lavet en recordset:
RS.open strSQL, conn, adOpenKeySet, adLockOptimistic, adCmdTable
adOpenKeySet er afgørende her, det er en smage sag hvis du bruger adLockOptimistic eller adLockPessimistic.

Du skal ha et Autonummer felt som ikke accepter dubletter. Om det er primary key eller ej betyder intet.

så bruger du dette methode:
...
RS.AddNew
...
RS.Update

Dette virker med msAccess, har ikke prøvet MySQL engin.
Avatar billede tchami Nybegynder
04. september 2003 - 18:05 #10
Hmm, men så har brugeren jo ikke mulighed for at lave nogle ændringer? RS.AddNew og RS.Update vil jo blive kaldt før brugeren har lavet nogle ændringer og trykket gem..
Avatar billede hossein Nybegynder
04. september 2003 - 18:06 #11
nej det skal være dit tabel navn i sted for strSQL:
RS.open DitTabelNavn, conn, adOpenKeySet, adLockOptimistic, adCmdTable
Avatar billede hossein Nybegynder
04. september 2003 - 18:07 #12
Hvis du vil brug den for update så fjerner du RS.AddNew. Hvis du vil tilføje noget så skal den være.
Avatar billede tchami Nybegynder
08. september 2003 - 17:56 #13
Lukker spørgsmålet da jeg selv fandt en anden løsning.
Avatar billede gliczynski Nybegynder
11. januar 2007 - 21:44 #14
ja, og hvad var løsningen.. det er lidt skidt at du skriver at du fandt en anden løsning, når man som jeg har brug for en løsning
Avatar billede netro Nybegynder
11. januar 2007 - 22:05 #15
Det var da en oldgammel tråd.
Avatar billede gliczynski Nybegynder
12. januar 2007 - 07:31 #16
det er da lige meget - hvis bare der bliver svaret med en løsning ... det var sådan mere generelt for spørgsmål her på eksperten.dk ...
Avatar billede netro Nybegynder
12. januar 2007 - 08:45 #17
Bare en konstatering. Jeg er helt enig med dig.
Avatar billede tchami Nybegynder
12. januar 2007 - 11:35 #18
I har begge helt ret, men hvis alle indlæg (selv dem der er små 4 år gamle) skal punkes for evt. fejl.

Hvis du nu derimod spurgte pænt kunne det jo være jeg kunne huske løsningen..

Nuvel, det var vist noget i retning af følgende procedure:

- Den record der skal redigeres låses ved at sætte et felt til 1 (0 = åben, 1 = låst)
- I en anden tabel indsættes en record der angiver hvornår rækken blev låst
- Når en bruger efterfølgende prøver at redigere recorden checkes om den er låst, og hvis ja, hvornår den blev låst. Hvis det er over X-antal minutter siden låses den automatisk op.
- Ud over dette kan man brugerne også tvinge en record åben.

Ikke en fool-proof metode, men den virkede da.
Avatar billede tchami Nybegynder
12. januar 2007 - 11:35 #19
Edit: I har begge helt ret, men hvis alle indlæg (selv dem der er små 4 år gamle) skal punkes for evt. fejl får du små travlt..
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
Kurser inden for grundlæggende programmering

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