[ASP/SQL] Toevoegen record soms dubbel :?

Pagina: 1
Acties:

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
Ik ben bezig met een asp-pagina die de inhoud van een form naar een sql2000 database moet schrijven.

De form bestaat uit een lijst met de groepen uit ons domain (<select name='domaingroups' multiple>). De asppagina die na een submit wordt gestart leest via een 'For Each' de domaingroups uit. Dit gaat gewoon goed maar wanneer er slechts 1 groep geselecteerd is komt die groep soms 2x voor in de db na het toevoegen. In de command object krijg ik echter terug dan er 1 is veranderd.

Hier even de twee stukjes code, doe allebei hetzelfde alleen de ene is via een recordset obj. en de andere via een command obj.

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
Sub Toevoegen()
   Dim sSelectedItem
   Dim sAddSQL
   Dim oAdd
        
   sAddSQL = "SELECT * FROM tbl_ApplicatiePermissies"
        
   Set oAdd = Server.CreateObject("ADODB.Recordset")
   oAdd.Open sAddSQL, strConnect, adOpenStatic,adLockOptimistic,adCmdText
            
   For Each sSelectedItem in Request.Form("domaingroups")
      With oAdd
         .AddNew
         .Fields("Groep") = sSelectedItem
         .Fields("ReadOnly") = True
         .Fields("ReadWrite") = False
         .Fields("FullControl") = False
         .Update
      End With
   Next

   ' oAdd.UpdateBatch           
   oAdd.Close
   Set oAdd = Nothing
End Sub


En

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub ToevoegenOud()
   Dim sSelectedItem
   Dim objInsertCmd
   Dim iCmdExe
   Dim sCmdQuery

   Set objInsertCmd = Server.CreateObject("ADODB.Command")
   objInsertCmd.ActiveConnection = sConnPermDB
   objInsertCmd.CommandType      = adCmdText

   For Each SelectedItem In Request.Form("domaingroups")
      sCmdQuery = _ 
         "INSERT INTO tbl_ApplicatiePermissies " & _
         "            (Groep, ReadOnly, ReadWrite, FullControl) " & _
         "VALUES      ('" & sSelectedItem & "', 1, 0, 0)"

         objInsertCmd.CommandText = sCmdQuery
         objInsertCmd.Execute iCmdExe   
   Next
   Set objInsertCmd = Nothing   
End Sub


Wanneer ik dus 1 groep wil toevoegen is de uitkomst van iCmdExe iedere keer 1 maar als ik dan kijk in de tabel zijn er twee toegevoegd en als ik een trace bekijk op de sql doos wordt er, wanneer het goed gaat er 1 bij geschrijven en als het niet goed gaat dus 2, terwijl de uitkomst van iCmdExe dus wel 1 is..

Iemand bekent met dit fenomeen ??

Het liefst gebruik ik de onderste of zijn er betere methodes bekend ??

[ Voor 13% gewijzigd door shades op 05-12-2002 11:26 ]

https://k1600gt.nl


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Geeft ICmdExe wel het aantal records terug of alleen een 0 of 1 bij failure/succes?
Kan je niet in de For loop iets anders laten loggen zodat je weet hoe vaak hij doorlopen wordt?

Trouwens wordt iCmdExe niet elke keer weer op 1 gezet. Ieder insert vindt immers via een aparte execute plaats. Eigenlijk zijn wij er geloof ik niet om te debuggen, maar toch maar even een reactie.

PS ik ken geen ASP, maar kan wel programmeren.

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
Goodielover schreef op 05 december 2002 @ 12:47:
Geeft ICmdExe wel het aantal records terug of alleen een 0 of 1 bij failure/succes?
Kan je niet in de For loop iets anders laten loggen zodat je weet hoe vaak hij doorlopen wordt?

Trouwens wordt iCmdExe niet elke keer weer op 1 gezet. Ieder insert vindt immers via een aparte execute plaats. Eigenlijk zijn wij er geloof ik niet om te debuggen, maar toch maar even een reactie.

PS ik ken geen ASP, maar kan wel programmeren.
In de var iCmdExe komt te staan hoeveel records 'affected'. In dit geval dus 0 of 1 omdat ik met een lus bezig ben die iedere keer 1tje invoegd.. maar als ik een UPDATE doe met bv een WHERE bla=bla dan geeft iCmdExe aan hoeveel records gewijzigd zijn al. Die update heeft niets met het probleem te maken overigens hoor.

[ Voor 5% gewijzigd door shades op 05-12-2002 14:12 ]

https://k1600gt.nl


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Probeer het zo eens dan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub ToevoegenOud()
   Dim sSelectedItem
   Dim objInsertCmd
   Dim sCmdQuery
   Dim lngCounter

   Set objInsertCmd = Server.CreateObject("ADODB.Command")
   objInsertCmd.ActiveConnection = sConnPermDB
   objInsertCmd.CommandType      = adCmdText

   lngCounter = 0
   For Each SelectedItem In Request.Form("domaingroups")
      sCmdQuery = _ 
         "INSERT INTO tbl_ApplicatiePermissies " & _
         "            (Groep, ReadOnly, ReadWrite, FullControl) " & _
         "VALUES      ('" & sSelectedItem & "', 1, 0, 0)"
         objInsertCmd.CommandText = sCmdQuery
         objInsertCmd.Execute
         lngCounter = lngCounter + 1
   Next
   Set objInsertCmd = Nothing   
   Response.Write lngCounter
End Sub

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
robjanssen schreef op 06 December 2002 @ 13:40:
Probeer het zo eens dan:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub ToevoegenOud()
   Dim sSelectedItem
   Dim objInsertCmd
   Dim sCmdQuery
   Dim lngCounter

   Set objInsertCmd = Server.CreateObject("ADODB.Command")
   objInsertCmd.ActiveConnection = sConnPermDB
   objInsertCmd.CommandType      = adCmdText

   lngCounter = 0
   For Each SelectedItem In Request.Form("domaingroups")
      sCmdQuery = _ 
         "INSERT INTO tbl_ApplicatiePermissies " & _
         "            (Groep, ReadOnly, ReadWrite, FullControl) " & _
         "VALUES      ('" & sSelectedItem & "', 1, 0, 0)"
         objInsertCmd.CommandText = sCmdQuery
         objInsertCmd.Execute
         lngCounter = lngCounter + 1
   Next
   Set objInsertCmd = Nothing   
   Response.Write lngCounter
End Sub
Ik heb het al met een counter geprobeert om er zo achter te komen hoeveel keer hij echt door de lus heen gaat maar dat geeft de counter het juiste aantal aan...
Maar in de trace van sql2000 zie ik twee keer een update :? Heel vreemd..

Er zijn twee dingen waaraan ik denk als ik stel dat mijn stukje code goed is..
* server bug (hoe kan ik zien wat het servicepacke versie is van de sql2000 doos ?
* index unique zetten op het 'Groep' veld. Dan moet ik de foutmelding via asp afhandelen..

Ik kan dit maandag pas proberen...

https://k1600gt.nl


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Kun je anders het stukje code posten waarin de functie voor het toevoegen wordt aangeroepen?

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
robjanssen schreef op 07 December 2002 @ 13:19:
Kun je anders het stukje code posten waarin de functie voor het toevoegen wordt aangeroepen?
Euhm.. het formulier dus ?

https://k1600gt.nl


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Ja het formulier.
Is dat ook ASP-code of alleen HTML?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

shades schreef op 07 December 2002 @ 11:54:
[...]
* server bug (hoe kan ik zien wat het servicepacke versie is van de sql2000 doos ?
mocht je het nog nodig hebben:
Q321185 HOW TO: Identify Your SQL Server Service Pack Version and Edition

Today's subliminal thought is:


  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
robjanssen schreef op 09 December 2002 @ 23:46:
Ja het formulier.
Is dat ook ASP-code of alleen HTML?
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
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
  <link rel="stylesheet" type="text/css" href="/_Css/huisstijl.css">
  <meta name="GENERATOR" content="Microsoft Visual Studio 6.0">
  <meta name="ProgId" content="FrontPage.Editor.Document">
  <title>Toegangsbeheer</title>

  <script type='text/javascript'>
    <!--
    
    function zetpermissie(pid,permissie) {
      /* permissie omzetten naar arrayid */
      var i;
      switch (permissie) {
        case 'ro': i = 0; break
        case 'rw': i = 1; break
        case 'fc': i = 2; break
        default:   i = 0;
      }
      /* staat van aangeklikte checkbox bekijken */
      var aanuit = document.MyForm['grpid' + pid][i].checked;
      var grpid = document.MyForm['grpid' + pid]
      /* checkboxen aanuit zetten */
      switch (aanuit) {
        case true:
          for (var icnt = 0; icnt <= i ; icnt++) { grpid[icnt].checked = true; }
          for (var icnt = i+1; icnt <= 2 ; icnt++) { grpid[icnt].checked = false; }
          break
          
        case false:
          for (var icnt = i+1; icnt <= 2 ; icnt++) { grpid[icnt].checked = false; }
          break
      }
      /* is de read uit gezet ? */
      if (i == 0 && aanuit == false) {
        if (document.MyForm.deletealert.value != '1') {
          alert('De groep of naam zal verwijderd worden omdat de lees-permissie is uitgeschakeld.\nHierdoor vervalt de toegang toegang tot de applicatie voor die groep.');
          document.MyForm.deletealert.value = '1';
        }
      }
    }
    
    
    function SubmitForm(wat){
      switch (wat) {
        case 'VoegGroepenToe':
          document.MyForm.action = 'ToegangsbeheerVerw.asp?actie=toevoegen';
          break
          
        case 'Toepassen':
          document.MyForm.action = 'ToegangsbeheerVerw.asp?actie=toepassen';
          break
      }
      document.MyForm.submit();
    }
    //-->
  </script>
</head>

<body bgcolor='#FFEAD5' background='../lib/img/bg/bgFrmHoofdTransKaderFull.gif' style='margin:3px'>
<!-- Tabel om in midden te zetten -->
<table class='kader' width='100%' border='0' cellspacing='0' cellpadding='0'>
  <tr><td valign='top' style='height:8px;font-size:8px;text-align:left;'>v1.0</td></tr>
  <tr>
    <!-- Linker cell -->
    <td align='center' valign='middle'>
    
      <form name='MyForm' method='post'>
        <!-- control boxen -->
        <input type='hidden' name='deletealert' value='0'>
        
        <!-- Tabel met permissie informatie -->
        <table class='kader' border='0' cellpadding='3' cellspacing='1'><!-- cellspacing=0 -->
          <!-- header -->
          <tr>
            <!--links -->
            <td colspan='2' class='colUnsorted'><b>Naam/Groep:</b></td>
            <td colspan='3' class='colUnsorted' align='center'><b>Permissie:&nbsp;</b></td>
            <td>&nbsp;<!-- tussen kolom --></td>
            <!-- rechts -->
            <td class='colUnsorted'><b>Beschikbare groepen</b></td>
          </tr>
          
          <tr>
            <!-- links -->
            <td colspan='2'>&nbsp;</td>
            <td valign='top'>&nbsp;<b>L</b></td>
            <td valign='top'>&nbsp;<b>S</b></td>
            <td valign='top'>&nbsp;<b>A</b></td>
            <td rowspan='4'>&nbsp;<!-- tussen kolom --></td>
            <!-- rechts -->
            <td rowspan='4' valign='top'>
              <!-- groepen, rowspan aanpassen -->
              <br>
              
              <select size='5' class='' name='domaingroups' multiple>
                <option value='(Onbekende gebruikers)'>(Onbekende gebruikers)</option>
                <option value='Decentraal Beheer'>Decentraal Beheer</option>
                <option value='Domain Admins'>Domain Admins</option>
                <option value='Domain Computers'>Domain Computers</option>
                <option value='Domain Controllers'>Domain Controllers</option>
                <option value='Domain Guests'>Domain Guests</option>
                <option value='Domain Users'>Domain Users</option>
                <option value='Enterprise Admins'>Enterprise Admins</option>
                <option value='FAB'>FAB</option>               
                <option value='Helpdesk'>Helpdesk</option>
                <option value='Schema Admins'>Schema Admins</option>
                <option value='SQLAdmins'>SQLAdmins</option>
                <option value='SQLusers'>SQLusers</option>
              </select>
            </td>
          </tr>
          
          <!-- test 
          <tr>
            <td colspan='2'>Test</td>
            <td><input class='knopRadio' type='checkbox' name='grpid1' value='ro' onClick=zetpermissie('1','ro');></td>
            <td><input class='knopRadio' type='checkbox' name='grpid1' value='rw' onClick=zetpermissie('1','rw');></td>
            <td><input class='knopRadio' type='checkbox' name='grpid1' value='fc' onClick=zetpermissie('1','fc');></td>
          </tr>-->
          
          
          <tr>
            <td class='mldlijn' colspan='2'>Decentraal Beheer</td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid1' value='ro' onClick=zetpermissie('1','ro'); checked></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid1' value='rw' onClick=zetpermissie('1','rw'); checked></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid1' value='fc' onClick=zetpermissie('1','fc');></td>
            <input type='hidden' name='grpid1' value='1'>
          </tr>
          <tr>
            <td class='mldlijn' colspan='2'>Domain Admins</td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid2' value='ro' onClick=zetpermissie('2','ro'); checked></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid2' value='rw' onClick=zetpermissie('2','rw'); checked></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid2' value='fc' onClick=zetpermissie('2','fc'); checked></td>
            <input type='hidden' name='grpid2' value='2'>
          </tr>
          <tr>
            <td class='mldlijn' colspan='2'>Domain Users</td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid3' value='ro' onClick=zetpermissie('3','ro'); checked></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid3' value='rw' onClick=zetpermissie('3','rw');></td>
            <td class='mldlijn'><input class='knopRadio' type='checkbox' name='grpid3' value='fc' onClick=zetpermissie('3','fc');></td>
            <input type='hidden' name='grpid3' value='3'>
          </tr>
          
          <tr>
            <td colspan='5'><hr></td>
            <td>&nbsp;</td>
            <td><hr></td>
          </tr>
          
          <tr>
            <!-- links -->
            <td colspan='5' align='center'>
              <input type='reset' value='Herstel' class='knoplang'>
              <input type='submit' value='Toepassen' class='knoplang' onclick="SubmitForm('Toepassen');">
            </td>
            
            <td>&nbsp;<!-- tussen --></td>
            
            <!-- rechts -->
            <td align='center'>
              <input class='knoplang' type='reset' name='WisLijst' value='Wissen'>
              <input class='knoplang' type='submit' name='VoegGroepenToe' value='Voegtoe' onclick="SubmitForm('VoegGroepenToe');">
            </td>
          </tr>

          
          <tr>
            <td colspan='5'><hr></td>
            <td>&nbsp;</td>
            <td><hr></td>
          </tr>
          
          <!-- Uitleg -->
          <tr>
            <td colspan='7'valign='top'>
              <b>L</b>&nbsp;-&nbsp;Lezen&nbsp;&nbsp;&nbsp;&nbsp;<b>S</b>&nbsp;-&nbsp;Lezen&nbsp;en&nbsp;schrijven&nbsp;&nbsp;&nbsp;&nbsp;<b>A</b>&nbsp;-&nbsp;Applicatiebeheer
            </td>
          </tr>
        </table>
      
      </form>
      
    </td>
        
  </tr>
</table>

</body>
</html>

https://k1600gt.nl


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Wordt het formulier niet 2x gesubmit?
1x door de form action
1x door de function submitform

Kun je het niet beter oplossen door
- beide submit buttons de naam btsubmit te geven
- in de ASP-pagina dmv Request.Form("btsubmit") controleren op welke submit button is gedrukt.

  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
robjanssen schreef op 10 december 2002 @ 19:16:
Wordt het formulier niet 2x gesubmit?
1x door de form action
1x door de function submitform

Kun je het niet beter oplossen door
- beide submit buttons de naam btsubmit te geven
- in de ASP-pagina dmv Request.Form("btsubmit") controleren op welke submit button is gedrukt.
2x gesubmit ?
Euh, nee toch...

Ik geloof dat ik het zie ja..
Bij de submit wordt eerst de onclick getriggerd, dat wordt de action gezet en uitgevoerd (dan wordt volgens mij de pagina al verlaten) en daarna wordt de submit knop uitgevoerd waardoor die er weer uitgevoerd wordt.. weird

Ik ga je oplossing morgen even proberen want ik zie er wel brood in. Nu dat ik begrijp waarom het niet helemaal werkt zou ik natuurlijk ook de button-type van submit in button (gewoon dus) kunnen veranderen.. ga ik ook even proberen.

https://k1600gt.nl


  • shades
  • Registratie: September 2001
  • Laatst online: 10-08 15:01
Rob, je oplossing werkt. _/-\o_

https://k1600gt.nl

Pagina: 1