Avatar billede canedo Nybegynder
25. februar 2005 - 21:38 Der er 20 kommentarer og
1 løsning

Hjælp til kompliceret slettefunktion

Jeg sender en streng vha en formular med nogle ID'er og den kan f.eks se sådan ud: "234,15,34,154"

Jeg har så to felter i en database, som består af data som sådan her:

ekstra2: ",154,784,135,34"
ekstra3: ",256,864,135,12"

Det som jeg så skal have gjort er, at slette de ID'er som sendes med strengen, og som matcher værdierne i de to felter.

Hvordan gør jeg?
Avatar billede eagleeye Praktikant
25. februar 2005 - 21:59 #1
Hvilken type database er det? Er det Access må man lave det sådan at den henter alle poster og findes id'et fjernes det og der laves en update SQL sætning som opdater posten med det nye indhold af ekstra2 og ekstra3 hvor ID er lig den post der undersøges.

Her er eks på koden:



SQL = "select * from tabelnavn"
Set rs=Conn.Execute(SQL)

idStr = "234,15,34,154

idArr = Split(idstr,",")  'laver et array med de id'er der skal fjernes
do while not rs.EOF
  ekstra2=rs("ekstra2")
  ekstra3=rs("ekstra3")
  for i=0 to ubound(idArr)
    if inStr(1,","&ekstra2&",",","&idArr(i)&",",1)>0 then
      ekstra2 = replace(ekstra2&",",","&idArr(i)&",",",")
      ekstra2 = replace(ekstra2,",,",",")
    end if
    if inStr(1,","&ekstra3&",",","&idArr(i)&",",1)>0 then
      ekstra3 = replace(ekstra3&",",","&idArr(i)&",",",")
      ekstra3 = replace(ekstra3,",,",",")
    end if
  next
  if ekstra2<>rs("ekstra2") or ekstra3<>rs("ekstra3") then
    if len(ekstra2)>1 and right(ekstra2,1)="," then ekstra2=left(ekstra2,len(ekstra2)-1)
    if len(ekstra3)>1 and right(ekstra3,1)="," then ekstra3=left(ekstra3,len(ekstra2)-1)
      SQL = "update tabelnavn set ektra2 = '" & ekstra2 & "', ekstra3 = '" & ekstra3 & "' where id =" & rs("id")
      Conn.Execute(SQL)
    end if

  rs.Movenext
loop
Avatar billede canedo Nybegynder
25. februar 2005 - 22:08 #2
hmm... det virker ikke. Der sker ikke rigtigt noget. Jeg har ændret lidt i koden, for at få det til at passe ind. Skal jeg lige poste koden her?
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:11 #3
Ja og evt. om du får fejl eller hvad der sker.
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:12 #4
Er der mellemrum imellem tallene ?
Avatar billede canedo Nybegynder
25. februar 2005 - 22:15 #5
Der sker slet ingenting... den redirecter bare uden at gøre noget. Der er ikke mellemrum mellem tallene.

Sender lige koden:

<%



'///finder ud af hvilken knap der er trykket på i formularen
Dim IsGem, IsSlet
IsGem = False
IsSlet = False

If Request.Form("gem") <> "" Then
      IsGem = True
    Else If Request.Form("sletven") <> "" Then
      IsSlet = True
    End If
End If


If IsGem = True then
      Set rs = Server.CreateObject("ADODB.Recordset")
      sql = "SELECT * FROM brugere WHERE brugerID=" & session("BrugerID")
      rs.Open sql, Connect, 1, 2     
           
            strSelectedCheckedBoxes = replace(Request.Form("favorit"), " ", "")
      rs("ekstra3")= "," & strSelectedCheckedBoxes
      rs.update
End If





If IsSlet = True then

strSelectedCheckedBoxes = replace(Request.Form("slet"), " ", "")

SQL = "select * from brugere WHERE brugerID=" & session("BrugerID")
Set rs=Conn.Execute(SQL)

idStr = strSelectedCheckedBoxes

idArr = Split(idstr,",")  'laver et array med de id'er der skal fjernes
do while not rs.EOF
  ekstra2=rs("ekstra2")
  ekstra3=rs("ekstra3")
  for i=0 to ubound(idArr)
    if inStr(1,","&ekstra2&",",","&idArr(i)&",",1)>0 then
      ekstra2 = replace(ekstra2&",",","&idArr(i)&",",",")
      ekstra2 = replace(ekstra2,",,",",")
    end if
    if inStr(1,","&ekstra3&",",","&idArr(i)&",",1)>0 then
      ekstra3 = replace(ekstra3&",",","&idArr(i)&",",",")
      ekstra3 = replace(ekstra3,",,",",")
    end if
  next
  if ekstra2<>rs("ekstra2") or ekstra3<>rs("ekstra3") then
    if len(ekstra2)>1 and right(ekstra2,1)="," then ekstra2=left(ekstra2,len(ekstra2)-1)
    if len(ekstra3)>1 and right(ekstra3,1)="," then ekstra3=left(ekstra3,len(ekstra2)-1)
      SQL = "update tabelnavn set ektra2 = '" & ekstra2 & "', ekstra3 = '" & ekstra3 & "' where id =" & rs("id")
      Conn.Execute(SQL)
    end if

  rs.Movenext
loop



End If

  Connect.close
      response.redirect "003j.asp"

%>
Avatar billede canedo Nybegynder
25. februar 2005 - 22:17 #6
NB: scriptet som opdaterer ekstra3 i det script som ligger ovenover det du sendte virker fint.
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:20 #7
ok, jeg har skreve kolonnenavnet som ektra2 uden s i SQL sætningen som opdater men det nok ikke derfor..


Er  IsSlet = True  ?  Hvis ikke kommer den ikke ind i loopet.

Har du prøve at udskrive en linje inde i loop som test af den kommer helt ind i loopet?

do while not rs.EOF
Response.Write "LOOP" 'udskriver den LOOP kommer den ind i loopet-
  ekstra2=rs("ekstra2")
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:22 #8
men jeg har også lavet en anden skrive fejl ser jeg lige denne linje:
    if len(ekstra3)>1 and right(ekstra3,1)="," then ekstra3=left(ekstra3,len(ekstra2)-1)

Skal være:

    if len(ekstra3)>1 and right(ekstra3,1)="," then ekstra3=left(ekstra3,len(ekstra3)-1)
Avatar billede canedo Nybegynder
25. februar 2005 - 22:30 #9
Jeg trykker på knappen i formularen, knappen ser sådan ud:
<input class="submitVen" type="submit" name="sletven" value="Slet">

Øv, - den sætter ikke IsSlet til true, - men jeg kan ikke forstå hvorfor, når jeg jo skriver sådan:

If Request.Form("sletven") <> "" Then
IsSlet = True
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:36 #10
Ja så skulle den sætte isSlet.
Det ikke sådan isGem bliver sat true?
Avatar billede canedo Nybegynder
25. februar 2005 - 22:38 #11
Jeg har lige testet ved at tilføje

do while not rs.EOF
Response.Write "LOOP"

Men den hopper over loopet og direkte til redirect...
Avatar billede canedo Nybegynder
25. februar 2005 - 22:39 #12
Nej, IsGem sættes ikke til true, for så ville den ændre data i ekstra3, og det sker ikke.
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:46 #13
det måske et dumt spørgsmål men du har method="post" i form tagen?
Avatar billede canedo Nybegynder
25. februar 2005 - 22:49 #14
jepz, og IsGem-funktionen fungerer uden problemer...
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:53 #15
hmm det lyder underligt. Og det er samme SQL sætning du bruger i gem og slet så det næppe fordi den ikke finder nogle poster for brugerID.

Har du prøve at udskrive isSlet?
Avatar billede canedo Nybegynder
25. februar 2005 - 22:55 #16
Nej, gør jeg lige...
Avatar billede canedo Nybegynder
25. februar 2005 - 22:56 #17
underliget... udskriver jeg isSlet får jeg "false" hmm...
Avatar billede eagleeye Praktikant
25. februar 2005 - 22:58 #18
Ja så får den ikke sat isSlet rigtgit men det var også det du sage :)

Prøv at udskrive hele form collection og se om sletven er med:

response.write request.form
Avatar billede canedo Nybegynder
25. februar 2005 - 23:04 #19
okay... af en eller anden grund skal jeg skrive

Else If Request.Form("handling") <> ""

i stedet for

Else If Request.Form("sletven") <> "" Then

for at kunne køre loopen...
Avatar billede eagleeye Praktikant
25. februar 2005 - 23:07 #20
ok
Avatar billede canedo Nybegynder
25. februar 2005 - 23:09 #21
YES, nu virker det... dit script kører jo perfekt. Det var kun nogle få rettelser i nogle af navnene der skulle laves...
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