Avatar billede kkd Nybegynder
14. marts 2003 - 12:13 Der er 19 kommentarer og
2 løsninger

Fjerne flere data fra en databasen

I forlængelse af spørgsmål: http://www.eksperten.dk/spm/328612

Dataene bliver fint sat ind i databasen, men hvordan kan de fjernes igen? Bruger skal indtaste værdier i form felterne "navn2" og "email2", og hvis de stemmer overens med en række i databasen, skal den slettes!

Sådan står det nu, og det virker slet ikke (jeg aner ikke hvordan det skal gøres, derfor har jeg bare kopieret koden fra spm 328612 ind med lidt modifikationer):

    <%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("/db/mailliste.mdb")
Conn.Open DSN

strSQL = "Delete from mailliste (Navn,Email) values('" & Request.Form("navn2") & "','" & Request.Form("email2") & "')"
Conn.Execute(strSQL)

Conn.Close
Set Conn = Nothing
%>
Avatar billede jpvj Nybegynder
14. marts 2003 - 12:15 #1
På simpel form:

delete from mailliste where Navn=navn2 and Email=email2

Du kan nok godt selv pakke set sammen med Request.Form() osv...
Avatar billede kkd Nybegynder
14. marts 2003 - 12:33 #2
Faktisk ikke, det virker sgu ikke!
Avatar billede keysersoze Ekspert
14. marts 2003 - 12:35 #3
Avatar billede kkd Nybegynder
14. marts 2003 - 12:38 #4
Det er også den tutorial jeg bruger... Men at koble det sammen med form-felterne, går bare ikke...
Avatar billede kkd Nybegynder
14. marts 2003 - 12:44 #5
Den virker, med kun en af parametrene. F.eks. slettes hele rækken, hvor "navn2" indgår. Men jeg kan ikke få det til at virke, så den både tjekker Navn og Email!

strSQL = "Delete from mailliste where Navn = ('" & Request.Form("navn2") & "')"
Conn.Execute(strSQL)
Avatar billede keysersoze Ekspert
14. marts 2003 - 12:47 #6
så prøv at kom med den kode hvor du prøver at bruge begge felter - så kan jeg se hvad du gør galt
Avatar billede kkd Nybegynder
14. marts 2003 - 12:50 #7
strSQL = "Delete from mailliste where (Navn,Email) = ('" & Request.Form("navn2") & "','" & Request.Form("email2") & "')"
Conn.Execute(strSQL)
Avatar billede rosted Nybegynder
14. marts 2003 - 12:53 #8
"Delete from mailliste where Navn = ('" & Request.Form("navn2") & "', AND Email='" & Request.Form("email2") & "')"
Avatar billede rosted Nybegynder
14. marts 2003 - 12:54 #9
Ups,

"Delete from mailliste where Navn = ('" & Request.Form("navn2") & "' AND Email='" & Request.Form("email2") & "')"
Avatar billede rosted Nybegynder
14. marts 2003 - 12:54 #10
Damn :)

"Delete from mailliste where Navn = '" & Request.Form("navn2") & "' AND Email='" & Request.Form("email2") & "'"
Avatar billede websmith Nybegynder
14. marts 2003 - 12:58 #11
Hør nu her, det er helt forkert..

Den rigtige SQL sætning er:

"DELETE FROM mailliste WHERE Navn='" & Request.Form("navn2") & "' AND Email='" & Request.Form("email2") & "'"

Der skal ingen parenteser, og der skal slet ikke fortælles hvilke felter der skal slettes.

Ovenstående SQL streng giver et resultat magen til dette, forudsat at navn2=websmith og email2=websmith@websmith.dk

"DELETE FROM mailliste WHERE Navn='websmith' AND Email='websmith@websmith.dk'"

Såre simpelt.

Det nemmeste er at oprette en variabel til at holde SQL strengen, og ved fejl, så printer man lige sin sql streng for at se om den nu også er helt korrekt.
Avatar billede websmith Nybegynder
14. marts 2003 - 12:59 #12
Det skal lige siges at jeg skrev mit svar inden rosted rettede sin kode, så rosteds sidste forsøg er korrekt :)
Avatar billede websmith Nybegynder
14. marts 2003 - 13:02 #13
En lille krølle på halen kunne måske være at det er dårlig skik at bruge lighedstegn (=) i forbindelse med sammenligning af felter som indeholder tekst.

Som regel bruger LIKE i forbindelse med tekst sammenligning, og = (lighedstegn) i forbindelse med tal.

Dog er der databaser som understøtter lighedstegn ved tekstsammenligninger, men man skal ikke regne med det.
Avatar billede websmith Nybegynder
14. marts 2003 - 13:02 #14
Dvs.

"DELETE FROM mailliste WHERE Navn LIKE '" & Request.Form("navn2") & "' AND Email LIKE '" & Request.Form("email2") & "'"

Ville være helt korrekt ;)
Avatar billede rosted Nybegynder
14. marts 2003 - 13:16 #15
Der skal vel kun bruges like hvis det er med wildcards, hvilket jo ikke vil give så meget mening her.
Avatar billede websmith Nybegynder
14. marts 2003 - 13:19 #16
Næh ikke så vidt jeg ved, problemet er jo at et = med tegn signalerer at de skal være fuldstændigt ens, men i et tekstfelt, så kan størrelsen på feltet jo være variabelt, og nogen databaser putter automatisk blanktegn ind efter indholdet, hvis det ikke fyldet det hele, og så vil = ikke virke, da

"websmith"="websmith  " ikke er korrekt, hvorimod "websmith" like "websmith  " er korrekt. Da Like kigger om feltet indeholder det søgte og = checker om feltet er lig med det søgte.
Avatar billede rosted Nybegynder
14. marts 2003 - 13:26 #17
Jeg mener nu ikke det virker sådan som du skriver. Jeg tror kun det virker hvis du f.eks. skriver "ham der websmith er da fin" like "%websmith%".

Men måske er det SQL syntaks afhængigt?
Avatar billede websmith Nybegynder
14. marts 2003 - 13:30 #18
Hvis du skriver Like 'websmith' så vil den finde alt som indeholder det fulde ord websmith, hvis du skriver like '%websmith%' så vil den fx også finde  'nowebsmithyes' og 'yeswebsmithno' osv. like uden wild cards kigger på fulde ord, og  like med wild cards på det hele.
Avatar billede rosted Nybegynder
14. marts 2003 - 13:36 #19
Men det er vel ikke forskel på at finde 'websmithyes' or 'websmith  '?
Avatar billede websmith Nybegynder
14. marts 2003 - 13:43 #20
Nej, og jeg har lige testet på en SQL server 2000, og det ser faktisk ud til at du har ret :)

Jeg var bare sikker, og synes selv at mine indlæg giver god mening :)

Og på en SQL server kan man ikke sammenligne med = på tekstfelter.

Fejlen man får når man prøver.
-----------------
The text, ntext, and image data types cannot be compared or sorted, except when using IS NULL or LIKE operator.
----------------

Så like er nok stadigvæk det korrekte, da det kan køre over alt. Dog sammenliger Like på hele feltet og ikke på hele ord som jeg skrev, og med wildcards så søger den i feltet.
Avatar billede rosted Nybegynder
14. marts 2003 - 13:49 #21
ok. Jamen så ved vi det
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