Avatar billede omaly Nybegynder
16. oktober 2003 - 09:08 Der er 37 kommentarer og
3 løsninger

Sletning i database?

Hejsa jeg har database bestående af 4 kolonner: UserID, Brugernavn, Password, Beskrivelse, som jeg ønsker at slette poster i, mit problem er bare at jeg ikke kan få lov at slette på min kolonne: UserID som er den eneste post der er unik. Hvis jeg f.eks. vælger at slette på brugernavn, sletter den alle poster med samme brugernavn, men hvis jeg sætter UserID ind i sted for Brugernavn får jeg bare en asp-fejl på den side der skal eksekvere min sletning. Koden ser sådan ud:

------------> slet.asp
<%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("pass.mdb")
Conn.Open DSN

sql="select * from Users order by Brugernavn"
set record=conn.execute(sql)%>

<form name="slet" method="post" action="sletning.asp">
<select name="sletter"><%do while not record.eof%>
<option value="<%=record("UserID")%>"><%=record("Brugernavn")&" - "&record("Password")%>
<%record.movenext
loop%></option>


</select><br><br>
<input type="submit" name="Submit" value="Submit">
</form>

<%
' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>


--------------->sletning.asp
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)};"
DSN = DSN & "DBQ=" & Server.MapPath("pass.mdb")
Conn.Open DSN %>

<%SQL="delete from Users where UserID='"&request.form("sletter")&"'"
set record=Conn.Execute(SQL)

Conn.Close
Set Conn = Nothing
Response.Redirect("slet.asp")
%>


Er der nogen der kan hjælpe mig?
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 09:15 #1
Måske
<%SQL="delete from Users where UserID=" & request.form("sletter")
Avatar billede Spotgun Seniormester
16. oktober 2003 - 09:24 #2
Desuden er det kun SELECT-statements der kræver et recordset.

Du kan nøjes med kun at bruge Conn.Execute(sql) når det drejer sig om INSERT, UPDATE og DELETE-statements...
Avatar billede omaly Nybegynder
16. oktober 2003 - 09:44 #3
erikjacobsen->
Så får jeg følgende fejl: Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression 'UserID='58'.
/Intranet_NEW/IT-Admin/pass-liste/sletning.asp, line 15

spotgun->
Kan du uddybe det lidt, jeg er ikke nogen haj til asp ;)
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 09:46 #4
Det ser ud som om du ikke har fjernet alle '-ere
Avatar billede kongsteddk Nybegynder
16. oktober 2003 - 09:47 #5
<%SQL="delete from Users where UserID='"&request.form("sletter")&"'"
Rettes til
<%SQL="delete * from Users where UserID='"&request.form("sletter")&"'"
Avatar billede omaly Nybegynder
16. oktober 2003 - 09:49 #6
Linie 15 er: set record=Conn.Execute(SQL), jeg prøvede at slette set record=, som jeg tror du mener spotgun, men det giver samme fejl.
Avatar billede a-torsten Nybegynder
16. oktober 2003 - 09:52 #7
Jeg ville nok bruge følgende.....

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

SQL="delete * from Users where UserID="&request.form("sletter")
Conn.Execute(SQL)

Conn.Close
Set Conn = Nothing
Response.Redirect("slet.asp")
%>
Avatar billede omaly Nybegynder
16. oktober 2003 - 09:53 #8
kongsteddk-> Så får jeg følgende fejl i stedet:
Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E07)
[Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression.
/Intranet_NEW/IT-Admin/pass-liste/sletning.asp, line 15
Avatar billede omaly Nybegynder
16. oktober 2003 - 09:56 #9
a-torsten-> Det giver mig samme fejl som ved erikjacobsen's forslag
Avatar billede a-torsten Nybegynder
16. oktober 2003 - 09:56 #10
Hvilken type er din UserID i databasen...??
Avatar billede a-torsten Nybegynder
16. oktober 2003 - 09:57 #11
Prøv og slet Conn.Excute(SQL) og skriv Response.write(SQL) istedet.... Hvordan ser din string ud...?

/Anders
Avatar billede kongsteddk Nybegynder
16. oktober 2003 - 10:10 #12
Og dit felt UserID er et talfelt??? Eller er det sat til at være et tekstfelt? Hvis det er det, skal du skrive:
SQL="delete * from Users where UserID = '" & request.form("sletter") & "'"
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:12 #13
Der er ikke noget, der hedder " delete * " ;)
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:12 #14
a-torsten-> typen er automatisk nummerering og min string kommer til at se sådan ud: delete * from Users where UserID='38
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:14 #15
Kommentar: erikjacobsen 16/10-2003 09:46:11
Det ser ud som om du ikke har fjernet alle '-ere
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:15 #16
Den ' som er för 38 skal väk
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:16 #17
Og som Erik siger, hvad er "delete * from..."???. Har jeg aldrig set för :)
Avatar billede Spotgun Seniormester
16. oktober 2003 - 10:19 #18
ErikJacobsen har ret... En korrekt DELETE-sætning ville se sådanher ud: "DELETE FROM table_name WHERE column_name = some_value"
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:19 #19
Og som kongsteddk siger: skriv altid sql-sätningen ud för i eksekverer den, det sparer masser af tid.
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:22 #20
ErikJacobsen har ret... En korrekt DELETE-sætning ville se sådanher ud: "DELETE FROM table_name WHERE column_name = 'some_value'"
Glem ikke 'fnutterne', bare for at väre på tvärs ;)
Avatar billede kongsteddk Nybegynder
16. oktober 2003 - 10:25 #21
ErikJacobsen> Det er da sjovt at jeg så har brugt den kommando tidligere da jeg selv arbejdede med Access....... :-)

Omaly> Har du prøvet følgende:
___________
Kommentar: a-torsten
16/10-2003 09:57:48    Prøv og slet Conn.Excute(SQL) og skriv Response.write(SQL) istedet.... Hvordan ser din string ud...?

/Anders
________
Kan nemlig ikke finde det output her på siden som det skulle give. Det kan sandsynligvis hjælpe os med at hjælpe dig.
Hvad er dit UserID felt for et format? Tekst eller tal?
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:28 #22
Kik på 16/10-2003 10:12:27
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:29 #23
Som jeg skrev i starten så virker scriptet fint hvis jeg bruger kolonnen med brugernavn, det er kun nå jeg bruger kolonnen UserID at jeg får fejl.

->kongsteddk
typen er automatisk nummerering og min string kommer til at se sådan ud: delete * from Users where UserID='38
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:30 #24
Men du har ikke, kongsteddk, brugt den kommando (delete *) i ret mange
andre databasesystemer. Det er ikke korrekt SQL, og så kan det sådan set
være ligemeget om et enkelt lille system accepterer den.
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:30 #25
Kommentar: erikjacobsen 16/10-2003 09:46:11
Det ser ud som om du ikke har fjernet alle '-ere
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:32 #26
omaly>> Tag nu den ' väk som er foran 38.
SQL="delete from Users where UserID="&request.form("sletter")
Avatar billede michael_stim Ekspert
16. oktober 2003 - 10:32 #27
erikjacobsen>> Jeg tror ikke rigtigt han forstår :)
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:36 #28
Som jeg skrev tidligere så er jeg ikke helt vildt skrap til asp, så nej jeg forstår ikke rigtig hvad i mener med at jeg skal fjerne '-ere???
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:37 #29
Kommentar: michael_stim 16/10-2003 10:32:05
SQL="delete from Users where UserID="&request.form("sletter")
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:37 #30
min sætning ser nu sådan ud:

<%SQL=""DELETE FROM Users WHERE UserID = "&request.form("sletter")
Response.write(SQL)

Conn.Close
Set Conn = Nothing
Avatar billede a-torsten Nybegynder
16. oktober 2003 - 10:37 #31
Din sletning.asp skal se præcis således ud... fjern alt du har der nu og kopier det ind...

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

SQL="delete from Users where UserID="&request.form("sletter")
Conn.Execute(SQL)

Conn.Close
Set Conn = Nothing
Response.Redirect("slet.asp")
%>
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:43 #32
Juuuhuuuuu nu virker det :), vil alle lige smide et svar så fordeler jeg points
Takker mange gange.

Omaly
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:44 #33
Det har ikke så meget at gøre med om du kan ASP, men om du kan læse
hvad der står. Dit problem var reelt løst kl. 09:15:30 - og vi har
alle spildt tiden siden ;))
Avatar billede a-torsten Nybegynder
16. oktober 2003 - 10:48 #34
Lige en sidenote....

Undgå at åbne og lukke ASP-enginen for mange gange det sløver....

Med det mener jeg at du skal prøve at bruge så få <% %> som muligt.... helst kun 1 sæt...

/Anders
Avatar billede omaly Nybegynder
16. oktober 2003 - 10:51 #35
erikjacobsen-> den prøvede jeg jo, der fik jeg bare en fejl, så det forstår jeg ikke helt, men jeg beklager, jeg vil prøve at være lidt mere skarpsindig fremover ;)
Avatar billede erikjacobsen Ekspert
16. oktober 2003 - 10:52 #36
"den prøvede jeg jo" ;) Nej, for du tog kun noget af rettelsen, ikke?
Avatar billede kongsteddk Nybegynder
16. oktober 2003 - 10:55 #37
omaly> Til orientering.
Ved sql kald, skal ' (anførselstegn) kun bruges hvis det er et tekstfelt, notat, datofelter (i access ikke MySQL o.l.) og ligende felter hvor der er specielle tegn. I autonum. og talfelter skal der IKKE bruges '. Det ser ud til at det har været din fejl fra starten.
Forsat go' programmeringslyst! :-)
Avatar billede michael_stim Ekspert
16. oktober 2003 - 11:02 #38
.
Avatar billede omaly Nybegynder
16. oktober 2003 - 11:06 #39
erikjacobsen-> Det syntes jeg jeg nu ikke, men det må jeg jo have gjort.....beklager.

Men tak for alle jeres råd og vejledninger, det giver mod på mere :)

Points bliver fordelt lige mellem alle, men jeg venter lige på om der er flere der vil oprette et svar før end jeg fordeler.

Omaly
Avatar billede omaly Nybegynder
16. oktober 2003 - 12:38 #40
Det ser ikke ud til at der at der er flere der vil svare, så hermed er points fordelt.

Omaly
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