21. september 2005 - 10:56Der 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 %>
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
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
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
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
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 %>
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 ?
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 %>
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
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 %>
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
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
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)
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.