Toon posts:

Procedure in asp alleen uitvoeren nadat op button gedrukt is

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo,

Ik wil graag een record toevoegen in mijn databank zodra een gebruiker op opslaan drukt.

Nu dacht ik dat ik dat kon doen met het aanroepen van een procedure die dit voor me zou doen.

Echter hij voert deze al direct uit bij het laden van de pagina, en dit mag niet aangezien dan nog niet de juiste waardes in het formulier staan.

Daarom ben ik gebruik gaan maken van een boolean en zet ik bij mijn button onclick = "<% call opslaan ("true")%">

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dim buitvoeren
buitvoeren = False

sub save (uitvoeren)

buitvoeren = uitvoeren
if buitvoeren = True then 
de query 
buitvoeren = false

else
blabla
end if

end sub


Maar ook dit werkte niet, want lijkt erop dat de onclick ook aangeroepen wordt bij laden van de pagina.

Iemand een andere oplossing voor dit probleem, of is dit wel mogelijk wat ik wil doen.

Ik kan trouwens niet gewoon het formulier submit doen, omdat als de gebruiker in een lijst een andere waarde selecteerd er gegevens worden geladen in sommige tekstvelden

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik denk dat je client side en serverside code door elkaar haalt. Je kunt niet met een druk op de knop, zonder een formulier te submitten een insert in een database doen. Nou ja kan niet, met asynchrone javascripts kun je een eind komen, maar in principe werkt dat niet Je zult dus wel een formulier moeten submitten.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 10:34

Basszje

Reisvaap!]

Ik neem aan dat je die procedure probeert uit te voeren aan de client kant? Hoe kan je via die manier dan connectie maken met de database? Dat gaat volgens mij heel moeilijk worden!

Waarom kan je het niet via een form submit oplossen? Die waardes in andere tekstvelden kan je dan ook bij het opbouwen van de pagina goed laden. Ik vrees dat je toch aan zoiets moet gaan denken

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


Verwijderd

Topicstarter
Ik wil het volgende bereiken!

Ik heb een record dat regelmatig aangepast moet worden. Hiervoor heb ik een combobox gemaakt met alle nummers van de meldingen.

Een gebruiker selecteerd nu in de combox de juiste melding. Op dat moment doe ik een Document.formulier.submit.();. Mij code ziet dat het document een submit heeft gehad aangezien request.form niet meer leeg is.

Nu leest hij voor deze record de gegevens uit de databank en vult de tekstvelden met de juiste waarde's.

De gebruiker heeft de mogelijkheid dit aan te passen en zodra dit klaar is wil ik graag de gegevens opslaan.

Ik weet dus niet hoe ik nu kan achterhalen of de submit van het opzoeken komt of omdat men op de button heeft gedrukt. Enige oplossing die ik zou kunnen bedenken hiervoor is een checkbox te maken met opslaan ja/nee en op moment dat er een submit komt met opslaan - ja dat ie dan het if statment uitvoert. Maar ik hoopte eigenlijk dat er een mooie manier is om dit te programmeren.

En volgens mij moet ik dit toch op de server uit laten voeren aangezien ik moet schrijven in een databank. Oke aan de client maak ik de gegevens klaar stuur de na de server en deze voert het script uit. Of zie ik dat nu fout ?

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op maandag 17 oktober 2005 @ 08:40:
Ik wil het volgende bereiken!

Ik heb een record dat regelmatig aangepast moet worden. Hiervoor heb ik een combobox gemaakt met alle nummers van de meldingen.

Een gebruiker selecteerd nu in de combox de juiste melding. Op dat moment doe ik een Document.formulier.submit.();. Mij code ziet dat het document een submit heeft gehad aangezien request.form niet meer leeg is.

Nu leest hij voor deze record de gegevens uit de databank en vult de tekstvelden met de juiste waarde's.

De gebruiker heeft de mogelijkheid dit aan te passen en zodra dit klaar is wil ik graag de gegevens opslaan.

Ik weet dus niet hoe ik nu kan achterhalen of de submit van het opzoeken komt of omdat men op de button heeft gedrukt. Enige oplossing die ik zou kunnen bedenken hiervoor is een checkbox te maken met opslaan ja/nee en op moment dat er een submit komt met opslaan - ja dat ie dan het if statment uitvoert. Maar ik hoopte eigenlijk dat er een mooie manier is om dit te programmeren.
Hier zijn verschillende mogelijkheden voor. Je kunt in een verborgen veld een status bijhouden, in een sessie variabele, verschillende knopnamen gebruiken en uitlezen welke button gebruikt is om het formulier te verzenden, verschillende formulieren etc. Je moet zelf bepalen wat het beste past in jouw geval.
En volgens mij moet ik dit toch op de server uit laten voeren aangezien ik moet schrijven in een databank. Oke aan de client maak ik de gegevens klaar stuur de na de server en deze voert het script uit. Of zie ik dat nu fout ?
Nee, dit klopt.

Oops! Google Chrome could not find www.rijks%20museum.nl


Verwijderd

Topicstarter
Dankje _/-\o_

Heb het denk ik wel gevonden

http://www.aspnl.com/aspnl/nl/artikelen/calendar.asp

Moet nu wel lukken

Stom dat ik zelf niet aan die mogelijkheid had gedacht, is net als met een actionlistener in java, je kijkt gewoon welke knop ingedrukt is en voert dan de methode uit.

zal dus ongeveer zo worden

code:
1
2
3
4
5
6
7
<%
If Request.Form("cmdSubmit") = "voer in" Then
   'verwerk
Else
   'schrijf <FORM>
End If
%>


Ga het eens proberen maar moet lukken ;)

  • Basszje
  • Registratie: Augustus 2000
  • Laatst online: 10:34

Basszje

Reisvaap!]

Ik zou daarvoor wel oppassen met welke namen je checkt of eventueel een lijstje met nummers - constanten gebruiken. Checks met strings en spaties zijn niet altijd even betrouwbaar :)

Beware of listening to the imposter; you are undone if you once forget that the fruits of the earth belong to us all, and the earth itself to nobody.


  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Je kunt natuurlijk checken of de pagina dmv een post opgevraagd word.

code:
1
2
3
If Request.ServerVariables("CONTENT_LENGTH") <> 0 Then
  'hier kun je checken van welke knop het afkomstig is 
End If

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 24-04 15:13

sopsop

[v] [;,,;] [v]

of als je eventueel specifiek wilt kijken welke button is gebruikt:
Visual Basic:
1
2
3
if len(trim(request.form("cmdVoerIn")))>0 then
   ...
end if

Verwijderd

Topicstarter
Is gelukt :-D.

En heb hem de naam Invoer gegegeven!.

Maar nu kom ik direct met nog een probleempje, weet niet of ik dat hier ook mag vragen of dat ik beter een nieuwe topic moet openen. Maar misschien weten jullie het wel en mag het in deze topic ;)

Ik wil dus dat formulier ook correct locken, dus op het moment dat ik melding 617 selecteer wil ik eigenlijk dat er een slot komt op deze record, zodat alleen die client die dat heeft opgevraagt deze mag editen, de andere clients mogen alle records zien en edit behalve deze!

Nu gebruikte ik hiervoor eerst locktype.readonly maar dan kan maar 1 persoon tegelijk editen.
Met adLockPessimistic hoopte ik dit te kunnen bereiken, maar dat werkt ook niet. De verschillende clients kunnen elkaars gegevens overschrijven.

Ik vermoedt dat het te maken heeft met de momenten waarop ik de recordset open en sluit, denk dat het hiermee mis gaat maar weet niet goed welke regels hiervoor zijn. Of Op welke manier je moet open en sluiten zodat dit netjes gebeurd. Dus zo minmogelijk onodige locks.

ik gebruik de volgende code
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
.style1 {
    font-size: xx-large;
    font-weight: bold;
}
.style4 {font-family: Arial, Helvetica, sans-serif; font-weight: bold; }
body {
    
}
-->
</style>

<%
Dim Rs
Set Rs = Server.CreateObject("ADODB.Recordset")
With Rs
.CursorType = 3
.LockType = 3
End With

Dim Rs2
Set Rs2 = Server.CreateObject("ADODB.Recordset")
With Rs2
.CursorType = 3
.LockType = 2
End With



Dim buitvoeren
buitvoeren = False









Set db=Server.CreateObject("ADODB.connection")

path=server.MapPath("DataStore.mdb")
driver="provider=Microsoft.Jet.OLEDB.4.0;"
strcon=driver & ";Data Source="& path &";User id=admin;Password=;"
db.Open(strcon)%>
<%
sub Opslaan()
if request.form("ID")<>"" then
sql = "Select * FROM TBLGEGEVENS WHERE ID ="&request.Form("ID")&";"
else
sql ="Select * FROM TBLGEGEVENS WHERE ID =617;" 
end if

call Rs2.open(sql,db)
if Request.Form("invoer") = "Opslaan" then
''updateQuery ="UPDATE TBLGEGEVENS SET Datum=#"& request.form("Datum")& "#, Gap ='"&request.Form("Gap")&"' , Shift ='"& request.form("Shift")& "', Naam ='"&request.form("Naam")&"', Huidige_situatie ='" & Request.Form("Huidige_situatie")&"' WHERE ID=" & request.form("ID") & ";"
    Rs2.Close
    call Rs2.open(sql,db)
    Rs2("Datum")= request.Form("Datum")
    Rs2("Gap")= request.Form("Gap")
    Rs2("Shift")= request.Form("Shift")
    Rs2("Naam")=Request.Form("Naam")
    Rs2("Huidige_situatie")= request.Form("Huidige_situatie")
    Rs2("Oplossing")= request.Form("Oplossing")
    Rs2("Opmerking")= request.Form("Opmerking")
    Rs2("Resp")= request.Form("Resp")
    Rs2("Onderwerp")= request.Form("Onderwerp")
    Rs2("Status")= request.Form("Status")
    Rs2.Update
    Rs2.Close

    
else
Response.Write("Dacht het niet he")
end if



    
    
end sub%>


</head>

<body>
 <p class="style1">Idee Wijzige</p>
 <hr noshade>
 <form name="form1" method="post" action="">
   <table width="904" border="0">
     <tr>
       <td width="122" height="38" class="style4">ID</td>
       <td width="20">&nbsp;</td>
       <td width="144">
       <select name="ID" onChange="document.form1.submit();">
      
        <%sql="SELECT DISTINCT ID FROM TBLGEGEVENS WHERE ID LIKE '%';"
        
        call Rs.open(sql,db) %>
        <%do while not Rs.eof %>
         <option selected='selected'>
            <%response.Write(Rs(0))%>
        </option>
        
                
        <%Rs.movenext 
        loop %>
        <%Rs.Close%>
        <% if request.form("ID")<>"" then sql="SELECT DISTINCT ID FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT ID FROM TBLGEGEVENS;" end if%>
        <%call Rs.open(sql,db) %>
        <option selected='selected'><%response.Write(Rs(0))%></option>
        <%Rs.close %>
    
       </select></td>
       <td width="85">&nbsp;</td>
       <td width="132">&nbsp;</td>
       <td width="48" rowspan="2">&nbsp;</td>
       <td width="62"><input type="submit" name="invoer" value="Opslaan" onClick="<% call Opslaan%>"></td>
       <td width="49" rowspan="2">&nbsp;</td>
       <td width="44" rowspan="2">&nbsp;</td>
       <td width="44" rowspan="2">&nbsp;</td>
       <td width="44" rowspan="2">&nbsp;</td>
       <td width="60" rowspan="2">&nbsp;</td>
     </tr>
     <tr>
       <td><span class="style4">Datum</span></td>
       <td width="20">&nbsp;</td>
       <td width="144">
        <%if request.form("ID")<> "" then sql="SELECT DISTINCT DATUM FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else sql="SELECT DISTINCT DATUM FROM TBLGEGEVENS;" end if%>
        
        <%call Rs.open(sql,db) %>
    
            <input name="Datum" type="text" id="Datum" value=<%response.Write(Rs(0))%>>
            </input>

       <% Rs.close%></td>
       <td width="85"><span class="style4">Shift</span></td>
       <td width="132">    <select name="Shift" id="Shift">
         <option>A</option>
         <option>B</option>
         <option>C </option>
        <%if request.form("ID")<> "" then sql="SELECT DISTINCT Shift FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else sql="SELECT DISTINCT SHIFT FROM TBLGEGEVENS;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       
       </select></td>
       <td width="62"></td>
     </tr>
     <tr>
       <td rowspan="2" class="style4">Gap
    </td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">    
       <select name="Gap" id="Gap">
            <%sql="SELECT Gap FROM TBLGAP;" %>
                <%call Rs.open(sql,db) %>
                    <%do while not Rs.eof %>
                        <option>
                            <%response.Write(Rs(0))%>
                        </option>
                    <%Rs.movenext 
                    loop %>
                <%Rs.close%>
        
        <% if request.form("ID")<>"" then sql="SELECT DISTINCT GAP FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT GAP FROM TBLGEGEVENS;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       </select></td>
       <td rowspan="2"><span class="style4">Naam</span></td>
       <td rowspan="2">
       <select name="Naam" id="Naam">
       <%sql="SELECT Naam FROM TBLNAAM;" %>
                <%call Rs.open(sql,db) %>
                    <%do while not Rs.eof %>
                        <option>
                            <%response.Write(Rs(0))%>
                        </option>
                    <%Rs.movenext 
                    loop %>
                <%Rs.close%>
                
     <% if request.form("ID")<>"" then sql="SELECT DISTINCT Naam FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT Naam FROM TBLNAAM;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       </select></td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
       <td rowspan="2">&nbsp;</td>
     </tr>
     <tr> </tr>
     <tr>
       <td><span class="style4">Huidige Situatie </span></td>
       <td>&nbsp;</td>
       <td colspan="3"><textarea name="Huidige_situatie" cols="55" rows="5" id="Huidige_situatie"><% if request.form("ID")<>"" then sql="SELECT DISTINCT Huidige_Situatie FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT Huidige_Situatie FROM TBLGEGEVENS;" end if%>
            <%call Rs.open(sql,db) %>
                <%response.Write(Rs(0))%>
            <%Rs.close %></textarea></td>

       <td>&nbsp;</td>
     </tr>
     <tr>
       <td><span class="style4">Oplossing</span></td>
       <td>&nbsp;</td>
       <td colspan="3"><textarea name="Oplossing" cols="55" rows="5" id="Oplossing"><% if request.form("ID")<>"" then sql="SELECT Oplossing FROM TBLGEGEVENS WHERE ID Like '"& request.Form("ID") & "';" else  sql="SELECT Oplossing FROM TBLGEGEVENS WHERE ID Like'%';" end if%>
            <%call Rs.open(sql,db) %><%response.Write(Rs(0))%><%Rs.close%>

            </textarea></td>
       <td>&nbsp;</td>
       <td>&nbsp;</td>

       <td>&nbsp;</td>
     </tr>
     <tr>
       <td><span class="style4">Opmerking</span></td>
       <td>&nbsp;</td>
       <td colspan="3"><textarea name="Opmerking" cols="55" rows="5" id="Opmerking"><% if request.form("ID")<>"" then sql="SELECT Opmerking FROM TBLGEGEVENS WHERE ID Like '"& request.Form("ID") & "';" else  sql="SELECT Opmerking FROM TBLGEGEVENS WHERE ID Like'%';" end if%>
            <%call Rs.open(sql,db) %><%response.Write(Rs(0))%><%Rs.close%>

       </textarea></td>
       <td>&nbsp;</td>

     </tr>
     <tr>
       <td><span class="style4">Responsible</span></td>
       <td>&nbsp;</td>
       <td><select name="Resp" id="Resp">
       <%sql="SELECT Resp FROM TBLResp;" %>
                <%call Rs.open(sql,db) %>
                    <%do while not Rs.eof %>
                        <option>
                            <%response.Write(Rs(0))%>
                        </option>
                    <%Rs.movenext 
                    loop %>
                <%Rs.close%>
         <% if request.form("ID")<>"" then sql="SELECT DISTINCT Resp FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT Resp FROM TBLResp;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       </select></td>
       <td><span class="style4">Onderwerp</span></td>
       <td><select name="Onderwerp" id="Onderwerp">
       
       <%sql="SELECT Onderwerp FROM TBLONDERWERP;" %>
                <%call Rs.open(sql,db) %>
                    <%do while not Rs.eof %>
                        <option>
                            <%response.Write(Rs(0))%>
                        </option>
                    <%Rs.movenext 
                    loop %>
                <%Rs.close%>
         <% if request.form("ID")<>"" then sql="SELECT DISTINCT ONDERWERP FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT ONDERWERP FROM TBLONDERWERP;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       </select></td>
       <td>&nbsp;</td>

     </tr>
     <tr>
       <td><span class="style4">Status</span></td>
       <td>&nbsp;</td>
       <td colspan="3"><select name="status" id="status">
       
       <%sql="SELECT Status FROM TBLSTATUS;" %>
                <%call Rs.open(sql,db) %>
                    <%do while not Rs.eof %>
                        <option>
                            <%response.Write(Rs(0))%>
                        </option>
                    <%Rs.movenext 
                    loop %>
                <%Rs.close%>
                
                <% if request.form("ID")<>"" then sql="SELECT DISTINCT Status FROM TBLGEGEVENS WHERE ID LIKE '"& request.Form("ID") & "';" else  sql="SELECT DISTINCT Status FROM TBLSTATUS;" end if%>
            <%call Rs.open(sql,db) %>
                <option selected='selected'><%response.Write(Rs(0))%></option>
            <%Rs.close %>
       </select></td>
            </tr>
   </table>
 </form>
 <p>&nbsp; </p>
</body>
</html>


Wat zijn nu de ideale momenten om een lock aan te vragen en vrij te geven. Ik gebruik voor de update een recordset met de naam Rs2 omdat ik dacht dat dat misschien handig is om een aparte lock te verkrijgen gedeurende de volledige update. Maar via Rs wel nog andere gegevens kan opvragen.

Heeft iemand misschien een goed voorbeeld of een link naar een site waarin ze dit probleem behandelen

Verwijderd

@Ticcy: Ik zou je best willen helpen, maar ik ga die lap code van 300 regels echt niet doorlezen... Post dus daarom even de code voor het locken en unlocken, dan praten we verder :).

  • 4of9
  • Registratie: Maart 2000
  • Laatst online: 15-04 15:52
Ik ga je code ook niet doorspitten maar kan wel 2 manieren verzinnen om dit voor elkaar te krijgen.

Bijvoorbeeld je recordsets via een application var te laten lopen en op je applicatie vars locking toe te passen.

Of met transacties gaan werken. (hoewel dit waarschijnlijk niet gaat werken met access)

[ Voor 11% gewijzigd door 4of9 op 17-10-2005 13:35 ]

Aspirant Got Pappa Lid | De toekomst is niet meer wat het geweest is...


  • sopsop
  • Registratie: Januari 2002
  • Laatst online: 24-04 15:13

sopsop

[v] [;,,;] [v]

Uhm. Ik krijg een beetje de indruk dat de basisbeginselen van ASP/ADO je niet helemaal duidelijk zijn.
Een lock op een recordset geld alleen als je die recordset open hebt. Zodra je die pagina van je hebt gegenereerd wordt die recordset weer vrijgegeven. Die lock op je recordset heeft alleen nut als er nog iemand dezelfde recordset wil openen/wijzigen. Je zult dus zelf bij moeten houden of iets gelocked is of niet. d.m.v. applicatie vars of door dat bij te houden met een statusbitje in je recordset.

Verder nog iets: in die lap code die ik even snel doorgescrolled ben, zie ik nergens dat je je objecten opruimt. dat doe je zo:
ASP:
1
2
3
if NOT(rs is Nothing) then set rs=nothing
if NOT(rs2 is Nothing) then set rs2=nothing
if NOT(db is Nothing) then set db=nothing

Verwijderd

4of9 schreef op maandag 17 oktober 2005 @ 13:34:
Ik ga je code ook niet doorspitten maar kan wel 2 manieren verzinnen om dit voor elkaar te krijgen.

Bijvoorbeeld je recordsets via een application var te laten lopen en op je applicatie vars locking toe te passen.

Of met transacties gaan werken. (hoewel dit waarschijnlijk niet gaat werken met access)
Zoiets heb ik een keer gevonden ergens (ben de url kwijt), zo doe ik het (wel in C#).

Aparte static klasse RecordLock

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
public class RecordLocks 
{
    public static bool LockRecord(string primaryKey) 
    {
        ArrayList recordLocks;
        // Referentie naar pagina opvragen
        HttpApplication context = HttpContext.Current.ApplicationInstance;
        if (context == null) 
        {
            //throw new exception("Must run in a valid HTTP context");
        }
            
        // Elke sessie mag lock op 1 record tegelijk
        string recordLock = context.Session["RecordLock"] as string;
        if (recordLock != "") 
        {
            UnlockRecord();
        }
        // Alleenrecht op Application object
        context.Application.Lock();
        // Huidige locks opvragen
        Object o = context.Application["RecordLocks"];
        if (o == null) 
        {
            // Nog geen locks, dus toevoegen
            recordLocks = new ArrayList();
            recordLocks.Add(primaryKey);
        }
        else 
        {
            recordLocks = (ArrayList) context.Application["RecordLocks"];
            if (recordLocks.IndexOf(primaryKey) > -1) 
            {
                // Record al in gebruik
                context.Application.UnLock();
                return false; // Lock mislukt
            }
            else 
            {
                // Record nog niet in gebruik, dus toevoegen
                recordLocks.Add(primaryKey);
            }
        }
        // Locks opslaan en Application object vrijgeven
        context.Application["RecordLocks"] = recordLocks;
        context.Application.UnLock();
        // Lock toekennen aan deze sessie;
        context.Session["RecordLock"] = primaryKey;
        return true; // Lock gelukt
    }
    public static void UnlockRecord() 
    {
        ArrayList recordLocks;
        // Referentie naar pagina opvragen
        HttpContext context = HttpContext.Current;
        if (context == null) 
        {
            throw new Exception("Must run in a valid HTTP context");
        }
        // Alleenrecht op Application object
        context.Application.Lock();

        // Huidige locks opvragen, stoppen als locks leeg zijn
        Object o = context.Application["RecordLocks"];
        if (o == null) 
        {
            context.Application.UnLock();
            return;
        }
        
        // Lock verwijderen
        recordLocks = (ArrayList) context.Application["RecordLocks"];
        recordLocks.Remove(context.Session["RecordLock"]);
        // Locks opslaan, Application object vrijgeven, en lock verwijderen uit sessie
        context.Application["RecordLocks"] = recordLocks;
        context.Application.UnLock();
        context.Session["RecordLock"] = "";
    }
}

Succes ermee, bij mij werkt dit prima!

  • farlane
  • Registratie: Maart 2000
  • Nu online
Heb het vermoeden dat TS met classic ASP werkt

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

farlane schreef op maandag 17 oktober 2005 @ 14:43:
[...]


Heb het vermoeden dat TS met classic ASP werkt
Oh ja, niet gezien. Geen ervaring mee, weet niet of het dan nog werkt. Maar ik had dit binnen 5 minuten gevonden via google, dus het zal er ook wel voor classic asp zijn :).

Verwijderd

Topicstarter
Was even weg!

Maar zie dus dat ik moet gaan zoeken in een applicatie lock en niet in een lock op de Recordset omdat deze gesloten wordt op moment dat de pagina geladen is.

Ook al sluit ik deze dan niet in de code?

Ga vanavond eens aan puzzelen

Verwijderd

Verwijderd schreef op maandag 17 oktober 2005 @ 15:12:
Was even weg!

Maar zie dus dat ik moet gaan zoeken in een applicatie lock en niet in een lock op de Recordset omdat deze gesloten wordt op moment dat de pagina geladen is.

Ook al sluit ik deze dan niet in de code?

Ga vanavond eens aan puzzelen
De recordlock wordt automatisch gesloten na het laden van de pagina. Je moet het inderdaad zoeken in een app. lock, misschien heb je iets aan mijn code.
Pagina: 1