Avatar billede Slettet bruger
15. februar 2003 - 20:45 Der er 15 kommentarer og
3 løsninger

Slette fra flere tabeller

Hej med jer...

Jeg har lavet et system hvor en bruger selv kan melde sig fra. Hvis han gør det bliver hans info fra tabellen "brugere" slettet. Jeg ønsker imidlertid samtidig at alle de indlæg vedkommende har lavet også bliver slettet - de ligger i tabellen beskeder.

Hvordan gør man det?

Jeg har prøvet lidt med:

Set RS = server.createobject ("ADODB.recordset")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")

SQL = "SELECT * FROM beskeder,brugere WHERE frabrugerid=brugerid"
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic

RS.Delete

RS.close
RS = null   


Men det virker ikke rigtigt...
Avatar billede no_doubt Nybegynder
15. februar 2003 - 20:50 #1
kalder en tabel hvor dine indlæg er og siger noget i retning af delete where opretter_af_indlæg = brugerid
ca.
Avatar billede eagleeye Praktikant
15. februar 2003 - 20:54 #2
Du skal eneten lave en DELETE SQL eller loope gemmen recordsetet og slette hver record. RS.Delete slette kun den record man står på..:

SQL = "DELETE FROM beskeder,brugere WHERE frabrugerid=brugerid"
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
Avatar billede hossein Nybegynder
15. februar 2003 - 20:54 #3
strSQL = "delete * FROM beskeder,brugere WHERE frabrugerid = brugerid"
Avatar billede Slettet bruger
15. februar 2003 - 22:40 #4
Med:
Set RS = server.createobject ("ADODB.recordset")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")

SQL = "DELETE * FROM beskeder,brugere WHERE frabrugerid=brugerid"
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
RS = null   

får jeg flg. fejl:
[Microsoft][ODBC Microsoft Access Driver] Specify the table containing the records you want to delete.

Skal det i øvrigt ikke angives HVILKET brugerid den skal gå efter i SQL'en? Jeg har en userid = Request.QueryString("userid") i starten af siden.
Avatar billede eagleeye Praktikant
15. februar 2003 - 22:45 #5
Skal du slette hvor  frabrugerid=brugerid  fra de to tabeller er ens eller?
Avatar billede Slettet bruger
15. februar 2003 - 22:48 #6
Jeg skal slette brugerens info i tabellen "brugere" + alle hans indlæg i tabellen "beskeder". RS Beskederne har alle tilknyttet brugerens id.

Men den skal naturligvis kunne slette brugerinfo + de beskeder som vedkommende selv har skrevet som ønsker at slette sin egen bruger-profil. Derfor spurgte jeg også til hvorvidt det ikke skal angives HVILKET brugerid den skal gå efter i SQL'en?
Avatar billede hossein Nybegynder
15. februar 2003 - 22:53 #7
beskeder,brugere skal ha en mellemrum: delete * from beskeder, brugere ...
Avatar billede eagleeye Praktikant
15. februar 2003 - 22:55 #8
Umiddelbart ville jeg mene det leteste så er at lave 2 SQL som sletter når du kender ID på den som skal slettes.:


userid = Request.QueryString("userid")

SQL = "DELETE FROM brugere WHERE brugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
SQL = "DELETE FROM beskeder WHERE frabrugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
Avatar billede Slettet bruger
15. februar 2003 - 22:56 #9
Hossein >>

SQL = "DELETE * FROM beskeder, brugere WHERE frabrugerid=brugerid"
=
[Microsoft][ODBC Microsoft Access Driver] Specify the table containing the records you want to delete.

/test/deleteuser.asp, line 39

[39] = RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
Avatar billede eagleeye Praktikant
15. februar 2003 - 22:57 #10
Hvis du lave denne uden at angive noget userID

SQL = "DELETE FROM beskeder,brugere WHERE beskeder.frabrugerid=brugere.brugerid"

Så vil du tømme hele din database da den vil sltte alle reocrd hvor denne betingelse er opfyldt og det er den ligemeget hvilket ID en bruger har:
WHERE beskeder.frabrugerid=brugere.brugerid
Avatar billede Slettet bruger
15. februar 2003 - 23:02 #11
eagleeye >> ja det er jo ret vigtigt. Men får en underlig fejl med din: Operation is not allowed when the object is closed.

I får lige hele koden - så er det måske nemmere:

<%
userid = Request.QueryString("userid")
verify = Request.QueryString("verify")

'--- Tjek om random-nummer fra mail passer til brugerens i database
Set RS = server.CreateObject("ADODB.connection")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")
RS.open ConnString
SQL = "SELECT brugerid,randomnrdel FROM brugere WHERE brugerid=" & userid & ""
Set RS = RS.Execute(SQL)
if rs.EOF then
response.write "Der opstod desværre en fejl!"
else
    randomnrdel=RS("randomnrdel")

RS.Close
RS = null

if randomnrdel = verify then

Set RS = server.createobject ("ADODB.recordset")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")

SQL = "DELETE FROM brugere WHERE brugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
SQL = "DELETE FROM beskeder WHERE frabrugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close

RS = null   

session("login") = false
%>
Bruger-profil slettet.<br><br>
<meta http-equiv="refresh" content="2;URL=default.asp">
<%
else
response.write "Der opstod desværre en fejl!"
end if
end if
%>
Avatar billede hossein Nybegynder
15. februar 2003 - 23:08 #12
har du feltet frabrugerid  i begge tabeller? hvis ja, så skal tabel navnet med:
beskeder.frabrugerid, brugere.frabrugerid
Avatar billede Slettet bruger
15. februar 2003 - 23:10 #13
Nej - i tabellen "brugere" er det "brugerid" og i tabellen "beskeder" er det så "frabrugerid"
Avatar billede eagleeye Praktikant
15. februar 2003 - 23:20 #14
Det for du har både kaldt dit recordset og din coinnection for RS så går der lidt ged i det, kald Connection for Conn or Recordset for rs så tager man ikke fejl.:


Set Conn = server.CreateObject("ADODB.connection")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")
Conn.open ConnString
SQL = "SELECT brugerid,randomnrdel FROM brugere WHERE brugerid=" & userid & ""
Set RS = Conn.Execute(SQL)
if rs.EOF then
response.write "Der opstod desværre en fejl!"
else
    randomnrdel=RS("randomnrdel")

RS.Close
RS = null
Avatar billede hossein Nybegynder
15. februar 2003 - 23:21 #15
prøv den:
delete from brugere, beskeder
where brugere.brugerid = " & userid & " AND beskeder.frabrugerid = " & userid
Avatar billede Slettet bruger
16. februar 2003 - 11:15 #16
eagleeye >

Hvordan skal det så se ud her:

Set RS = server.createobject ("ADODB.recordset")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")

SQL = "DELETE FROM brugere WHERE brugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close
SQL = "DELETE FROM beskeder WHERE frabrugerid = " & userid
RS.open SQL, ConnString, adOpenStatic, adLockOptimistic
RS.Close

RS = null
Avatar billede eagleeye Praktikant
16. februar 2003 - 17:52 #17
Ja du kan bruge den connection som blevet lavet til at udføre dine SQL'er:

SQL = "DELETE FROM brugere WHERE brugerid = " & userid
Conn.Execute(SQL)

SQL = "DELETE FROM beskeder WHERE frabrugerid = " & userid
Conn.Execute(SQL)
Avatar billede eagleeye Praktikant
16. februar 2003 - 17:53 #18
Den kode du har vist i 16/02-2003 11:15:28 vil jeg lave sådan her


Set Conn = server.createobject ("ADODB.Connection")
ConnString= "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("database.mdb")

Conn.Open ConnString
SQL = "DELETE FROM brugere WHERE brugerid = " & userid
Conn.Execute(SQL)
SQL = "DELETE FROM beskeder WHERE frabrugerid = " & userid
Conn.Execute(SQL)
Conn.Close
Set Conn = Nothing
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