Avatar billede Slettet bruger
10. februar 2004 - 20:17 Der er 10 kommentarer og
1 løsning

At slette ting fra flere tabeller på samme tid

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database.mdb"))
Conn.Execute("DELETE FROM [topic] WHERE [ID] = " & Request("ID"))
  response.redirect("/default.asp")
Conn.Close
Set Conn = Nothing

Det er scriptet jeg bruger for at slette noget fra en database. Men nogle gange sker det, at jeg vil slette flere ting fra en database på én gang. At tilføje en ekstra Conn.Execute-linie virker ikke. Det her virker altså ikke:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database.mdb"))
Conn.Execute("DELETE FROM [topic] WHERE [ID] = " & Request("ID"))
***EKSTRA LINIE: Conn.Execute("DELETE FROM [reply] WHERE [topic] = " & Request("ID"))
  response.redirect("/default.asp")
Conn.Close
Set Conn = Nothing

Er der nogen der ved hvad man kan gøre for at løse dette?
Avatar billede beorndesign Nybegynder
10. februar 2004 - 20:26 #1
Jeg vil da tro det kan gøres på denne måde:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database.mdb"))
Conn.Execute("DELETE FROM [topic] WHERE [ID] = " & Request("ID") & " AND [ID] = " & Request("ID2"))
  response.redirect("/default.asp")
Conn.Close
Set Conn = Nothing

Du kan jo også bruge '<' og '>' for at angive nogle intervaller...
Avatar billede Slettet bruger
10. februar 2004 - 20:29 #2
DEnne kode vælger ting fra tabellen "topic"... men der er 2 tabeller der skal slettes noget fra: Topic og Reply - det er her problemet kommer ind.

Man kan  ikke tilføje en ekstra linie, og man kan heller ikke kopiere scriptet og køre det igen nedenunder, hvor den anden ting fra den anden tabel bliver slettet.
Avatar billede eagleeye Praktikant
10. februar 2004 - 20:47 #3
hvorfor virkr dette ikke, hvis de er i samme tabel skulle det da være muligt??
Det er de rigtige kolonnenavne?

Conn.Execute("DELETE FROM [topic] WHERE [ID] = " & Request("ID"))
Conn.Execute("DELETE FROM [reply] WHERE [topic] = " & Request("ID"))
Avatar billede eagleeye Praktikant
10. februar 2004 - 20:50 #4
Eller kan du prøve at skrives som dette men en inner join hvis Access vile det:

Conn.Execute("DELETE FROM [topic] INNER JOIN [reply] ON topic.id=reply.topic WHERE topic.id = " & Request("ID"))
Avatar billede Slettet bruger
10. februar 2004 - 21:50 #5
altså, jeg prøvede lige igen... jeg får denne fejlmelding:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression '[topicID] = '12'.
/actions/admin_forum.asp, line 10

Linie 10 er det her:
Conn.Execute("DELETE FROM [forum_reply] WHERE [topicID] = '"& Request("ID"))

Scriptet ser sådan her ud:

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open ("Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("/database.mdb"))
Conn.Execute("DELETE FROM [forum_topics] WHERE [ID] = " & Request("ID"))
Conn.Execute("DELETE FROM [forum_reply] WHERE [topicID] = '"& Request("ID"))
response.redirect("/forum.asp?cat="& request("forum") &"")
Conn.Close
Set Conn = Nothing

Feltet topicID i tabellen forum_reply er et tekst-felt, mens ID i tabellen forum_topic er et autonummerering.
Avatar billede eagleeye Praktikant
10. februar 2004 - 22:01 #6
Ok så prøv at rette denne:
Conn.Execute("DELETE FROM [forum_reply] WHERE [topicID] = '"& Request("ID"))

Til denne så der også kommer en ' med efter tallet:
Conn.Execute("DELETE FROM [forum_reply] WHERE [topicID] = '"& Request("ID") & "'")
Avatar billede Slettet bruger
10. februar 2004 - 23:00 #7
@eagleeye: Det virker stadigvæk ikke... samme fejl.
Avatar billede Slettet bruger
10. februar 2004 - 23:19 #8
Jeg ville lave en inner join forbindelse mellem de to tabeller i starten af koden.
Altså noget i retning af:

Set Rs = Server.CreateObject("ADODB.Recordset")
    Rs.Open "Select * From forum_topics Inner Join forum_reply On forum_topics.Id = forum_reply.Id Where forum_topics.Id = " & Request("Id") & "", Conn

Her har du så joinet dine to tabeller og har altså alle indlæg, der hører til det givne topic, samt selve topic.

Herefter:

Rs.Delete
Rs.Close
Set Rs = Nothing

Response.Redirect("default.asp")

Jeg opretter her et Recordset object, der indeholder selve SQL-sætningen og åbner dette ved hjælp af Conn.
Derefter kan du bruge metoden delete direkte og dermed fjerne alle de indlæg der måtte være samt selve topic.

Jeg har ikke efterprøvet den kode jeg har skrevet, men den kan måske give dit et spor at gå efter.
Avatar billede eagleeye Praktikant
10. februar 2004 - 23:27 #9
stadig væk syntax error i med denne linje
Conn.Execute("DELETE FROM [forum_reply] WHERE [topicID] = '"& Request("ID") & "'")

Er du sikker på kolonnenavn er rigtigt? tikke topic_ID ?
Avatar billede Slettet bruger
11. februar 2004 - 01:37 #10
@eagleeye: Ja, det er jeg meget sikker på. Men din linie der fungerer nu - don't ask how :) Mange tak.

Hvis du lige gider at oprette et svar, så smider jeg lige nogle points til dig.

@thomasso: Tak for dit forslag, men jeg aner ikke hvad inner join er - derfor undlader jeg at kaste mig ud i det lige pt. :)
Avatar billede eagleeye Praktikant
11. februar 2004 - 09:59 #11
Ok her et svar :)
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