23. maj 2002 - 17:22
Der er
15 kommentarer og 1 løsning
sql fejl ???????
Hej Jeg er ved at lave et admin modul så admin kan slette billeder fra en dir og rækker fra en tabel i en db på samme tid.... Jeg får hele tiden den her fejl : ADODB.Recordset error '800a0cc1' Item cannot be found in the collection corresponding to the requested name or ordinal. /flash/adminn/deletion.asp, line 31 KODEN: slet.asp <%@ Language=VBScript %> <html> <body> <% ' 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("hp.mdb") Conn.Open DSN ' SQL forespørgsel strSQL = "Select * FROM download" ' Udfør forespørgsel (rs indeholder nu resultatet) Set rs = Conn.Execute(strSQL) Do %> <form action="deletion.asp" method="Post"> <br>Marker denne boks for at slette ordren<INPUT Type=CheckBox Name="tod" Value="<% = RS("id")%>"><br> <img src="<% = RS("produktbilledfil")%>"<br> Produktnavn. <% = RS("produktnavn")%><br> Fil. <% = RS("produktbilledfil")%><br> Id. <% = RS("id")%><br> <% rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF ' Luk databaseforbindelse Conn.Close Set Conn = Nothing %> KODEN: deletion.asp <% Set Conn=Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("hp.mdb") Conn.Open DSN strSQL = "SELECT * FROM download WHERE ID="&request.form("tod")&"" 'grab the value(s) selected from the checkboxes Set rs = Conn.Execute(strSQL) ' Gennemløb Recordset (rs) med en løkke Do SQL1 = "DELETE FROM download WHERE ID ="&request.form("tod")&"" 'grab the value(s) selected from the checkboxes Set rs = Conn.Execute(SQL1) 'both tables use ID as the key field and both corresponding records are deleted sm= Server.MapPath("/flash/adminn/") vari=sm &"\"& rs("produktbilledfil") 'Create the FileSystemObject Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 'Delete the file objFSO.DeleteFile vari, True ' Gå til næste Record i rs rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF Set Conn = Nothing Conn.Close %> <center>Dit valgte indhold er slettet</center> </body> </html>
Annonceindlæg fra HP
Fejlen betyder at du referer til et felt der ikke findes i dit recordset. Det er lidt svært at se hvor det går galt, da du select'er * og jeg derfor ikke umiddelbart kan se om feltet findes. Lav en systematisk gennemgang af dine tabeller og sammenlign feltnavne med dem du anvender i scriptet.
Jeg ved ikke om det er Eksperten der har smidt backslashen væk, men denne linie: vari=sm &""& rs("produktbilledfil") skulle vel være: vari=sm &"\"& rs("produktbilledfil")
ok 1. billederne bliver slettet som er markerede ..... 2. det gør det i dben også der er markeret.... 3. den er rigtig den sti vari ... kan det være den kigger noget der allerede er slettet i tabellen ?
hm den linie der er fejl i er den her ..... vari=sm &"\"& rs("produktbilledfil")
ok nu har jeg fundet ud af hvad der er galt ..... den kan ikke finde den fordi variablen vari henviser til et rs der lige er slettet og ikke er der jo .. så hvordan kan jeg omskrive det ?
Lige inden din DELETE SQL flytter du værdien over i en variabel strFil = rs("produktbilledfil") Og så erstatter du vari=sm &""& rs("produktbilledfil") med vari=sm &""& strFil
nej det har jeg prøvet virker ikke .... den henviser stadig til noget der er slettet jo ....
har lavet en ny løsning ... tager nu billedfilnavnet fra min db og putter det i form .... altså kan det her requestes også når man skal slette filen ... KODE slet.asp <%@ Language=VBScript %> <html> <body> <% ' 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("hp.mdb") Conn.Open DSN ' SQL forespørgsel strSQL = "Select * FROM download ORDER BY ID" ' Udfør forespørgsel (rs indeholder nu resultatet) Set rs = Conn.Execute(strSQL) Do %> <form action="deletion.asp" method="Post"> <br>Marker denne boks for at slette ordren<INPUT Type=CheckBox Name="tod" Value="<% = RS("produktbilledfil")%>"><br> <img src="<% = RS("produktbilledfil")%>"<br> Produktnavn. <% = RS("produktnavn")%><br> Fil. <% = RS("produktbilledfil")%><br> Id. <% = RS("id")%><br> <% rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF ' Luk databaseforbindelse Conn.Close Set Conn = Nothing %> <br><br> Udskriv din bestilling <a href="java script: window.print()">her</a> <br><br><input type="submit" value="Slet det markerede"> <br><br> Luk dette vindue <a href="java script: self.close()">her</a> </form> </table> KODE: deletion.asp <% Set Conn=Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("hp.mdb") Conn.Open DSN strSQL = "SELECT * FROM download WHERE produktbilledfil="&request.form("tod")&"" 'grab the value(s) selected from the checkboxes Set rs = Conn.Execute(strSQL) ' Gennemløb Recordset (rs) med en løkke Do t= rs("id") SQL1 = "DELETE FROM download WHERE ID ="& response.write t &"" 'grab the value(s) selected from the checkboxes Set rs = Conn.Execute(SQL1) 'both tables use ID as the key field and both corresponding records are deleted sm= Server.MapPath("/flash/adminn/") vari=sm &"\"& request.form("tod") 'Create the FileSystemObject Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 'Delete the file objFSO.DeleteFile vari, True ' Gå til næste Record i rs rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF Set Conn = Nothing Conn.Close %> <center>Dit valgte indhold er slettet</center> </body> </html>
Så forstår jeg ikke helt hvad du mener, men hvis det sidste virker for dig, er det også lige meget :-)
ok har lavet lidt om på det og får en ny fejl .... Det er den her der er fejl i hvad kan der være galt ? Set rs = Conn.Execute(strSQL) Microsoft OLE DB Provider for ODBC Drivers error '80040e10' [Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1. /flash/adminn/deletion.asp, line 17 KODE slet.asp <%@ Language=VBScript %> <html> <body> <% ' 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("hp.mdb") Conn.Open DSN ' SQL forespørgsel strSQL = "Select * FROM download ORDER BY ID" ' Udfør forespørgsel (rs indeholder nu resultatet) Set rs = Conn.Execute(strSQL) Do %> <form action="deletion.asp" method="Post"> <br>Marker denne boks for at slette ordren<INPUT Type=CheckBox Name="tod" Value="<% = RS("produktbilledfil")%>"><br> <img src="<% = RS("produktbilledfil")%>"<br> Produktnavn. <% = RS("produktnavn")%><br> Fil. <% = RS("produktbilledfil")%><br> Id. <% = RS("id")%><br> <% rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF ' Luk databaseforbindelse Conn.Close Set Conn = Nothing %> <br><br> Udskriv din bestilling <a href="java script: window.print()">her</a> <br><br><input type="submit" value="Slet det markerede"> <br><br> Luk dette vindue <a href="java script: self.close()">her</a> </form> </table> KODE deletion.asp <% Set Conn=Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("hp.mdb") Conn.Open DSN ' Gennemløb Recordset (rs) med en løkke Do strSQL = "DELETE FROM download WHERE produktbilledfil="&request.form("tod")&"" 'grab the value(s) selected from the checkboxes Set rs = Conn.Execute(strSQL) 'both tables use ID as the key field and both corresponding records are deleted ' Gå til næste Record i rs rs.MoveNext ' Fortsæt indtil rs er gennemløbet (EOF = End Of File) Loop While Not rs.EOF Set Conn = Nothing Conn.Close sm= Server.MapPath("/flash/adminn/") vari=sm &"\"& request.form("tod") 'Create the FileSystemObject Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 'Delete the file objFSO.DeleteFile vari, True %> <center>Dit valgte indhold er slettet</center> </body> </html>
Hvis produktbilledfil er tekst, skal det være: strSQL = "DELETE FROM download WHERE produktbilledfil='" & request.form("tod")& "'"
ja produktbilledfil er image1.jpg og image2.jpg osv .... nu får jeg den her i stedet ..... hvordan ka det være ? ADODB.Recordset error '800a0e78' Operation is not allowed when the object is closed. /flash/adminn/deletion.asp, line 24
dette er linie 24 rs.MoveNext
Det er fordi du laver denne Set rs = Conn.Execute(strSQL) Dermed kan du ikke lave en movenext, da der ikke er nogen record at flytte til. Du bør i stedet blot lave Conn.Execute(strSQL) Du skal faktisk have fjernet din do-loop, da du ikke har noget recordset at bevæge dig rundt i. Di deletion.asp bør se sådan ud: Set Conn=Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("hp.mdb") Conn.Open DSN ' Gennemløb Recordset (rs) med en løkke strSQL = "DELETE FROM download WHERE produktbilledfil="&request.form("tod")&"" 'grab the value(s) selected from the checkboxes Conn.Execute(strSQL) 'both tables use ID as the key field and both corresponding records are deleted Set Conn = Nothing Conn.Close sm= Server.MapPath("/flash/adminn/") vari=sm &"\"& request.form("tod") 'Create the FileSystemObject Dim objFSO Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 'Delete the file objFSO.DeleteFile vari, True %> <center>Dit valgte indhold er slettet</center> </body> </html>
tak tak nu virker den ......
Kurser inden for grundlæggende programmering