Avatar billede jpj3 Nybegynder
21. september 2005 - 10:56 Der er 22 kommentarer og
1 løsning

Slette filer og data fra db

Jeg har følgende som skal slette 2 billeder fra samme mappe og slette info ffra db.

<%
Dim Conn
set Conn = server.createobject("adodb.connection")
Conn.open "Data Source=d:\home\min.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
strSQL = "DELETE * FROM album WHERE ID= " & Request.QueryString("ID")
strSQL = strSQL  & " select pic from album where ID = " & request.querystring("ID")
sql = "select pic_thumb from album where ID = " & request.querystring("ID")
set rs = Conn.execute(sql)

Set fso = CreateObject("Scripting.FileSystemObject")
file= Server.MapPath("Galleri/images/" & rs("pic"))
file= Server.MapPath("Galleri/images/" & rs("pic_thumb"))
fso.DeleteFile file,true
Conn.Execute(strSQL)
Set fso = Nothing
set rs = nothing
%>

Den henter id her
http://www.mysite.dk/galleri_slet_img.asp?ID=2
Avatar billede jpj3 Nybegynder
21. september 2005 - 10:57 #1
Den kommer med fejl i denne linie.

file= Server.MapPath("Galleri/images/" & rs("pic"))
Avatar billede busschou Praktikant
21. september 2005 - 11:01 #2
Det er nok fordi den ikke kan finde stien til billedet
Det kan skyldes at stien er forkert, som igen kan skyldes at rs("pic") er forkert
Hvilken fejl giver den dig?
Måske er rs tom
Avatar billede softspot Forsker
21. september 2005 - 11:02 #3
Hvilken fejl får du?

Er du sikker på at rs indeholder data og i så fald, at rs("pic") indeholder data?
Avatar billede busschou Praktikant
21. september 2005 - 11:03 #4
nu eksekverer du så ikke din strSQL, men du bliver nød til at have følgende rækkefølge
1) Slå op i databasen
2) Slet billedet og herefter thumb
3) Slet fra databasen
Avatar billede busschou Praktikant
21. september 2005 - 11:04 #5
lol hvilket så også er det du gør når jeg ser mig om , doh ;o)
Men du er i alt fald nød til at have endnu en fso.DeleteFile da den ellers kun sletter den sidste angivelse af "file" som er din thumb
Avatar billede busschou Praktikant
21. september 2005 - 11:05 #6
men jeg forstår så ikke hvorfor du har denne linje
strSQL = strSQL  & " select pic from album where ID = " & request.querystring("ID")
For den vil jeg mene giver dig fejl når du eksekvere den
Avatar billede softspot Forsker
21. september 2005 - 11:06 #7
Det vil den, for access kan kun eksekvere et statement ad gangen :)
Avatar billede busschou Praktikant
21. september 2005 - 11:07 #8
jeg vil mene du bør gøre sådan her
-----
<%
Dim Conn
set Conn = server.createobject("adodb.connection")
Conn.open "Data Source=d:\home\min.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
myID = CInt(request.querystring("ID"))
strSQL = "DELETE * FROM album WHERE ID= " & myID
sql = "select pic_thumb from album where ID = " & myID
set rs = Conn.execute(sql)
if not rs.eof then
  Set fso = CreateObject("Scripting.FileSystemObject")
  file= Server.MapPath("Galleri/images/" & rs("pic"))
  fso.DeleteFile file,true
  file= Server.MapPath("Galleri/images/" & rs("pic_thumb"))
  fso.DeleteFile file,true
  Conn.Execute(strSQL)
  Set fso = Nothing
else
  response.write "forkert id - eksisterer ikke"
end if
set rs = nothing
%>
Avatar billede busschou Praktikant
21. september 2005 - 11:08 #9
softspot >> tjo, det er muligt, men det giver jo ingen mening at have en sql som hedder "Delete From..... Select ..." når alt der ønskes er at der skal slettes ?
Avatar billede softspot Forsker
21. september 2005 - 11:08 #10
Det giver en fejl tidligere, hvis parameteren ID ikke er specificeret i url'en :)
Avatar billede busschou Praktikant
21. september 2005 - 11:09 #11
ahh lol du mangler jo at selecte pic, du har kun pic_thumb
---
<%
Dim Conn
set Conn = server.createobject("adodb.connection")
Conn.open "Data Source=d:\home\min.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
myID = CInt(request.querystring("ID"))
strSQL = "DELETE * FROM album WHERE ID= " & myID
sql = "select pic, pic_thumb from album where ID = " & myID
set rs = Conn.execute(sql)
if not rs.eof then
  Set fso = CreateObject("Scripting.FileSystemObject")
  file= Server.MapPath("Galleri/images/" & rs("pic"))
  fso.DeleteFile file,true
  file= Server.MapPath("Galleri/images/" & rs("pic_thumb"))
  fso.DeleteFile file,true
  Conn.Execute(strSQL)
  Set fso = Nothing
else
  response.write "forkert id - eksisterer ikke"
end if
set rs = nothing
%>
Avatar billede softspot Forsker
21. september 2005 - 11:09 #12
Nej, nej, det var heller ikke det der var spørgsmålet, det var om den fejlede og der var jeg såmænd bare enig med dig :)
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:11 #13
2 sec jeg chekker lige om det virker
Avatar billede busschou Praktikant
21. september 2005 - 11:11 #14
jeg vil tro mit forslag 11:09:03 skulle gøre det, det sikrer også imod sql injection, men det sikrer ikke imod en fejl hvis der ikke er en querystring, men den er lige til at tilføje som en ekstra if
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:17 #15
Det virker, tak til  busschou.
Kan vi få den til at slette en fil mere.
Data ligger i det felt der hedder pic_original
Filen ligger i samme mappe.
Avatar billede busschou Praktikant
21. september 2005 - 11:20 #16
det burde være rimelig lige til :o)
----
<%
Dim Conn
set Conn = server.createobject("adodb.connection")
Conn.open "Data Source=d:\home\min.mdb;Provider=Microsoft.Jet.OLEDB.4.0;"
myID = CInt(request.querystring("ID"))
strSQL = "DELETE * FROM album WHERE ID= " & myID
sql = "select * from album where ID = " & myID
set rs = Conn.execute(sql)
if not rs.eof then
  Set fso = CreateObject("Scripting.FileSystemObject")
  file= Server.MapPath("Galleri/images/" & rs("pic"))
  fso.DeleteFile file,true
  file= Server.MapPath("Galleri/images/" & rs("pic_thumb"))
  fso.DeleteFile file,true
  file= Server.MapPath("Galleri/images/" & rs("pic_original"))
  fso.DeleteFile file,true
  Conn.Execute(strSQL)
  Set fso = Nothing
else
  response.write "forkert id - eksisterer ikke"
end if
set rs = nothing
%>
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:22 #17
Kanon
Avatar billede busschou Praktikant
21. september 2005 - 11:26 #18
det var så lidt: o)
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:27 #19
Er der nogen forskel på disse
I din komentar 21/09-2005 11:09:03 skriver du således
sql = "select pic, pic_thumb from album where ID = " & myID
din komentar 21/09-2005 11:20:23 skriver du sådan
sql = "select * from album where ID = " & myID
Avatar billede busschou Praktikant
21. september 2005 - 11:32 #20
ja forskellen er at * vælger alle felter ud i din tabel
Du kunne også godt skrive
sql = "select pic, pic_thumb, pic_original from album where ID = " & myID
Men på et tidspunkt synes jeg selv det bliver mere overskueligt at benytte *
Omend den selvfølgelig så sikkert også henter et ID og måske en beskrivelse, som er overflødig
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:38 #21
Vil den første linie ikke slette alt data i db på id nr
Avatar billede busschou Praktikant
21. september 2005 - 11:43 #22
ok der er vist en misforståelse et sted :o)
Du har to sql sætninger
Een som skal slette fra databasen og een som skal vælge fra databasen
Den som vælger fra databasen kan enten se sådan her ud
sql = "select pic, pic_thumb, pic_original from album where ID = " & myID
eller sådan her
sql = "select * from album where ID = " & myID
Stjernen betyder blot at man vælger samtlige felter og derved slipper for at skrive dem op enkeltvis. I den første får du kun tre felter ud, i den anden får du samtlige felter, også id feltet og evt beskrivelse og evt dato felt osv osv
Den som sletter fra databasen kan se sådan her ud
strSQL = "DELETE * FROM album WHERE ID= " & myID
eller sådan her
strSQL = "DELETE FROM album WHERE ID= " & myID
Forskellen er her ligegyldig. Når du sletter fra en database så sletter man altid en hel række af gangen. Hvis du nu ønskede at rette fx en billede beskrivelse så ville du skulle benytte en UPDATE i stedet for da man ikke kan slette en enkelt celle men kun en hel række.
Uanset om du benytter * eller ej i en delete vil den derfor slette samtlige rækker hvor ID er lig med det ID som står i din querystring

Håber det lysnede lidt? Ellers må jeg have misforstået dig :o)
Avatar billede jpj3 Nybegynder
21. september 2005 - 11:47 #23
Det hjalp.
Mange tak
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