Avatar billede likedon Nybegynder
25. juli 2002 - 12:34 Der er 7 kommentarer og
1 løsning

Application.Lock

Da det jo er lidt svært at teste om det virker så spørger jeg lige om det her er rigtigt med hensyn til Application.Lock/Unlock...


Application.Lock

Set Forbindelse = Server.CreateObject("ADODB.Connection")
Forbindelse.Open "DBQ="& Server.MapPath("../database/database.mdb")&";Driver={Microsoft Access Driver (*.mdb)};"
Set kundeRs = Server.CreateObject("ADODB.Recordset")
Query = "SELECT * FROM tblannonce order by id_annonce"
kundeRs.Open Query, Forbindelse, adOpenStatic, adLockOptimistic
kundeRs.AddNew
kundeRs("overskrift") = Upload.Form("overskrift")
kundeRs("id_annoncetype") = Upload.Form("id_annoncetype")
kundeRs("id_underkategori") = Upload.Form("id_underkategori")
kundeRs("id_underunderkategori") = Upload.Form("id_underunderkategori")
kundeRs("tekst") = Upload.Form("tekst")
kundeRs("id_bruger") = session("chrbruger")
kundeRs("dato") = Date()
kundeRs("dato_udloeb") = Date+100
kundeRs.Update
kundeRs.Close


Set kundeRs2 = Server.CreateObject("ADODB.Recordset")
Query2 = "SELECT * FROM tblannonce ORDER BY id_annonce DESC"
kundeRs2.Open Query2, Forbindelse, adOpenStatic, adLockOptimistic

id_a = kundeRs2("id_annonce")

Application.Unlock

Set kundeRs = Nothing
Avatar billede neteffect Nybegynder
25. juli 2002 - 12:48 #1
Næ, der er så vidt jeg kan se ingen grund til application.lock i dit eksempel. Du har kun brug for den, når du opdaterer application variabler, fx:

application.lock
application("minVariabel")="et eller andet"
application.unlock
Avatar billede likedon Nybegynder
25. juli 2002 - 12:51 #2
kan der ikke skrives imellem de 2 hvis jeg ikke bruger application.lock:

Query = "SELECT * FROM tblannonce order by id_annonce"

og

Query2 = "SELECT * FROM tblannonce ORDER BY id_annonce DESC"

Hvorved at jeg ikke får det rigtige id_a = kundeRs2("id_annonce")

som jeg skal bruge videre i flere sql'er
Avatar billede tmceu Praktikant
25. juli 2002 - 13:07 #3
Application.Lock betyder at der ikke kan laves noget andet på serveren imens, hvilket er meget ineffektivt og i sidste ende kan give dig rigtig mange utilfredse brugere, hvis det anvendes meget.

Der findes dog andre måder at få fat på sidste ID i databasen på, end ovenstående. Ser lige om jeg kan finde et link til dig...
Avatar billede tmceu Praktikant
25. juli 2002 - 13:21 #4
Prøv med nedenstående som skulle give dig samme resultat, uden brug af Application.Lock. Det er vigtigt at du ikke lukker forbindelsen mellem de 2 recordsets.


Set Forbindelse = Server.CreateObject("ADODB.Connection")
Forbindelse.Open "PROVIDER=Microsoft.jet.OLEDB.4.0;DATA SOURCE=" & Server.MapPath("../database/database.mdb")&";"


Set kundeRs = Server.CreateObject("ADODB.Recordset")

Query = "SELECT * FROM tblannonce order by id_annonce"

kundeRs.Open Query, Forbindelse, adOpenStatic, adLockOptimistic
kundeRs.AddNew
kundeRs("overskrift") = Upload.Form("overskrift")
kundeRs("id_annoncetype") = Upload.Form("id_annoncetype")
kundeRs("id_underkategori") = Upload.Form("id_underkategori")
kundeRs("id_underunderkategori") = Upload.Form("id_underunderkategori")
kundeRs("tekst") = Upload.Form("tekst")
kundeRs("id_bruger") = session("chrbruger")
kundeRs("dato") = Date()
kundeRs("dato_udloeb") = Date+100
kundeRs.Update
kundeRs.Close

Set kundeRs2 = Server.CreateObject("ADODB.Recordset")
Query2 = "SELECT @@IDENTITY"
kundeRs2.Open Query2, Forbindelse, adOpenStatic, adLockOptimistic

id_a = kundeRs2("id_annonce")

Set kundeRs = Nothing

Hvis dette ikke virker, er der et andet forslag i dette spørgsmål: http://www.eksperten.dk/spm/228657
Avatar billede likedon Nybegynder
26. juli 2002 - 09:33 #5
tmceu:- jeg kunne ikke få @@IDENTITY til at virke, men linket til
http://www.kamath.com/tutorials/tut004_autonum.asp

ser ud til at fungere, hvis jeg har forstået det rigtig, så er det ikke muligt for 2 bruger at "forvirre" access så den kommmer til at udlevere det forkerte "id" og det var jo det jeg ville opnå med application.lock

Er der nogen mulighed for at teste denne stress situation eller må bare vente på at den opstår og der er nogle brugere der klager???
Avatar billede tmceu Praktikant
26. juli 2002 - 09:41 #6
Det er korrekt antaget. Når du udfører din INSERT, returnerer databasen ID'et til din connection. Jeg har aldrig testet dette i stort format, da Access ikke har noget at gøre i sådan et scenarie.

Hvis du vil teste det, kan du jo eks. invitere et par venner til at hjælpe med at lave en stress af systemet. Aftal eks. en 10 min. periode hvor I opretter på livet løs. Jeg har tidligere skrevet deciderede test applikationer for et par virksomheder i VB, men kan desværre ikke udlevere hverken applikation eller source code.
Avatar billede likedon Nybegynder
26. juli 2002 - 10:11 #7
jammen så siger jeg tak, og databasen skal nu heller ikke bruges i stor format da det kun er til et pilotprojekt, hvis den tid kommer hvor der vil være mange bruger vil den selvfølgelig blive flyttet..
Avatar billede tmceu Praktikant
26. juli 2002 - 10:16 #8
Det var så lidt :-)
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