Subject: multiple delete using checkbox - error
Posted By: yts007 Post Date: 1/9/2006 2:26:43 PM
Hi,
Am using the delete events steps to construct a admin page similare to the GlobalsoccerEvents page, and am at the delete page, I have edited the page to meet my fields in the database but am getting error message:

Error Type:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'NewsID IN ()'.
./deleteNews.asp, line 12

-----------------delete page code------------------
<!--#include file="Connections/loggingdatabase.asp" -->
<%
if(Request("checkboxName") <> "") then commDelete__intRecordsIDs = Request("checkboxName")
%>
<%
set commDelete = Server.CreateObject("ADODB.Command")
commDelete.ActiveConnection = MM_loggingdatabase_STRING
commDelete.CommandText = "DELETE FROM Newstbl WHERE NewsID IN(" + Replace(commDelete__intRecordsIDs, "'", "'") + ")"
commDelete.CommandType = 1
commDelete.CommandTimeout = 0
commDelete.Prepared = true
commDelete.Execute()
%>
---------------end of code--------------------------------

where am I going wrong?


Reply By: Imar Reply Date: 1/9/2006 3:07:59 PM
Hi there,

It looks lime commDelete__intRecordsIDs doesn't have a value when you execute the code. That in turn means that Request("checkboxName") probably doesn't have a value. Are you sure you have a check box called checkboxName (nice name BTW) in the previous form?

Your code uses some defensive mechanism to make sure that checkboxName has a value. However, you then execute the command outside the IF block. Change it to this:

If Request("checkboxName") <> "" Then
  commDelete__intRecordsIDs = Request("checkboxName")
  set commDelete = Server.CreateObject("ADODB.Command")
  ' Rest of ADO code goes here
End If

This way, the Execute command is never called when there is no checkbox selected.

Does this help?

Imar
---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
Reply By: yts007 Reply Date: 1/9/2006 3:24:48 PM
its all as you just described!!
the file which lists is this one:
----------------------------------------------------------------
<%@LANGUAGE="VBSCRIPT" CODEPAGE="1256"%>
<!--#include file="Connections/loggingdatabase.asp" -->
<%
Dim RsNewstbl
Dim RsNewstbl_numRows

Set RsNewstbl = Server.CreateObject("ADODB.Recordset")
RsNewstbl.ActiveConnection = MM_loggingdatabase_STRING
RsNewstbl.Source = "SELECT * FROM Newstbl ORDER BY Ndate DESC"
RsNewstbl.CursorType = 0
RsNewstbl.CursorLocation = 2
RsNewstbl.LockType = 1
RsNewstbl.Open()

RsNewstbl_numRows = 0
%>
<%
Dim Repeat1__numRows
Dim Repeat1__index

Repeat1__numRows = 10
Repeat1__index = 0
RsNewstbl_numRows = RsNewstbl_numRows + Repeat1__numRows
%>
<%
'  *** Recordset Stats, Move To Record, and Go To Record: declare stats variables

Dim RsNewstbl_total
Dim RsNewstbl_first
Dim RsNewstbl_last

' set the record count
RsNewstbl_total = RsNewstbl.RecordCount

' set the number of rows displayed on this page
If (RsNewstbl_numRows < 0) Then
  RsNewstbl_numRows = RsNewstbl_total
Elseif (RsNewstbl_numRows = 0) Then
  RsNewstbl_numRows = 1
End If

' set the first and last displayed record
RsNewstbl_first = 1
RsNewstbl_last  = RsNewstbl_first + RsNewstbl_numRows - 1

' if we have the correct record count, check the other stats
If (RsNewstbl_total <> -1) Then
  If (RsNewstbl_first > RsNewstbl_total) Then
    RsNewstbl_first = RsNewstbl_total
  End If
  If (RsNewstbl_last > RsNewstbl_total) Then
    RsNewstbl_last = RsNewstbl_total
  End If
  If (RsNewstbl_numRows > RsNewstbl_total) Then
    RsNewstbl_numRows = RsNewstbl_total
  End If
End If
%>
<%
Dim MM_paramName
%>
<%
' *** Move To Record and Go To Record: declare variables

Dim MM_rs
Dim MM_rsCount
Dim MM_size
Dim MM_uniqueCol
Dim MM_offset
Dim MM_atTotal
Dim MM_paramIsDefined

Dim MM_param
Dim MM_index

Set MM_rs    = RsNewstbl
MM_rsCount   = RsNewstbl_total
MM_size      = RsNewstbl_numRows
MM_uniqueCol = ""
MM_paramName = ""
MM_offset = 0
MM_atTotal = false
MM_paramIsDefined = false
If (MM_paramName <> "") Then
  MM_paramIsDefined = (Request.QueryString(MM_paramName) <> "")
End If
%>
<%
' *** Move To Record: handle 'index' or 'offset' parameter

if (Not MM_paramIsDefined And MM_rsCount <> 0) then

  ' use index parameter if defined, otherwise use offset parameter
  MM_param = Request.QueryString("index")
  If (MM_param = "") Then
    MM_param = Request.QueryString("offset")
  End If
  If (MM_param <> "") Then
    MM_offset = Int(MM_param)
  End If

  ' if we have a record count, check if we are past the end of the recordset
  If (MM_rsCount <> -1) Then
    If (MM_offset >= MM_rsCount Or MM_offset = -1) Then  ' past end or move last
      If ((MM_rsCount Mod MM_size) > 0) Then         ' last page not a full repeat region
        MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
      Else
        MM_offset = MM_rsCount - MM_size
      End If
    End If
  End If

  ' move the cursor to the selected record
  MM_index = 0
  While ((Not MM_rs.EOF) And (MM_index < MM_offset Or MM_offset = -1))
    MM_rs.MoveNext
    MM_index = MM_index + 1
  Wend
  If (MM_rs.EOF) Then
    MM_offset = MM_index  ' set MM_offset to the last possible record
  End If

End If
%>
<%
' *** Move To Record: if we dont know the record count, check the display range

If (MM_rsCount = -1) Then

  ' walk to the end of the display range for this page
  MM_index = MM_offset
  While (Not MM_rs.EOF And (MM_size < 0 Or MM_index < MM_offset + MM_size))
    MM_rs.MoveNext
    MM_index = MM_index + 1
  Wend

  ' if we walked off the end of the recordset, set MM_rsCount and MM_size
  If (MM_rs.EOF) Then
    MM_rsCount = MM_index
    If (MM_size < 0 Or MM_size > MM_rsCount) Then
      MM_size = MM_rsCount
    End If
  End If

  ' if we walked off the end, set the offset based on page size
  If (MM_rs.EOF And Not MM_paramIsDefined) Then
    If (MM_offset > MM_rsCount - MM_size Or MM_offset = -1) Then
      If ((MM_rsCount Mod MM_size) > 0) Then
        MM_offset = MM_rsCount - (MM_rsCount Mod MM_size)
      Else
        MM_offset = MM_rsCount - MM_size
      End If
    End If
  End If

  ' reset the cursor to the beginning
  If (MM_rs.CursorType > 0) Then
    MM_rs.MoveFirst
  Else
    MM_rs.Requery
  End If

  ' move the cursor to the selected record
  MM_index = 0
  While (Not MM_rs.EOF And MM_index < MM_offset)
    MM_rs.MoveNext
    MM_index = MM_index + 1
  Wend
End If
%>
<%
' *** Move To Record: update recordset stats

' set the first and last displayed record
RsNewstbl_first = MM_offset + 1
RsNewstbl_last  = MM_offset + MM_size

If (MM_rsCount <> -1) Then
  If (RsNewstbl_first > MM_rsCount) Then
    RsNewstbl_first = MM_rsCount
  End If
  If (RsNewstbl_last > MM_rsCount) Then
    RsNewstbl_last = MM_rsCount
  End If
End If

' set the boolean used by hide region to check if we are on the last record
MM_atTotal = (MM_rsCount <> -1 And MM_offset + MM_size >= MM_rsCount)
%>
<%
' *** Go To Record and Move To Record: create strings for maintaining URL and Form parameters

Dim MM_keepNone
Dim MM_keepURL
Dim MM_keepForm
Dim MM_keepBoth

Dim MM_removeList
Dim MM_item
Dim MM_nextItem

' create the list of parameters which should not be maintained
MM_removeList = "&index="
If (MM_paramName <> "") Then
  MM_removeList = MM_removeList & "&" & MM_paramName & "="
End If

MM_keepURL=""
MM_keepForm=""
MM_keepBoth=""
MM_keepNone=""

' add the URL parameters to the MM_keepURL string
For Each MM_item In Request.QueryString
  MM_nextItem = "&" & MM_item & "="
  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
    MM_keepURL = MM_keepURL & MM_nextItem & Server.URLencode(Request.QueryString(MM_item))
  End If
Next

' add the Form variables to the MM_keepForm string
For Each MM_item In Request.Form
  MM_nextItem = "&" & MM_item & "="
  If (InStr(1,MM_removeList,MM_nextItem,1) = 0) Then
    MM_keepForm = MM_keepForm & MM_nextItem & Server.URLencode(Request.Form(MM_item))
  End If
Next

' create the Form + URL string and remove the intial '&' from each of the strings
MM_keepBoth = MM_keepURL & MM_keepForm
If (MM_keepBoth <> "") Then
  MM_keepBoth = Right(MM_keepBoth, Len(MM_keepBoth) - 1)
End If
If (MM_keepURL <> "")  Then
  MM_keepURL  = Right(MM_keepURL, Len(MM_keepURL) - 1)
End If
If (MM_keepForm <> "") Then
  MM_keepForm = Right(MM_keepForm, Len(MM_keepForm) - 1)
End If

' a utility function used for adding additional parameters to these strings
Function MM_joinChar(firstItem)
  If (firstItem <> "") Then
    MM_joinChar = "&"
  Else
    MM_joinChar = ""
  End If
End Function
%>
<%
' *** Move To Record: set the strings for the first, last, next, and previous links

Dim MM_keepMove
Dim MM_moveParam
Dim MM_moveFirst
Dim MM_moveLast
Dim MM_moveNext
Dim MM_movePrev

Dim MM_urlStr
Dim MM_paramList
Dim MM_paramIndex
Dim MM_nextParam

MM_keepMove = MM_keepBoth
MM_moveParam = "index"

' if the page has a repeated region, remove 'offset' from the maintained parameters
If (MM_size > 1) Then
  MM_moveParam = "offset"
  If (MM_keepMove <> "") Then
    MM_paramList = Split(MM_keepMove, "&")
    MM_keepMove = ""
    For MM_paramIndex = 0 To UBound(MM_paramList)
      MM_nextParam = Left(MM_paramList(MM_paramIndex), InStr(MM_paramList(MM_paramIndex),"=") - 1)
      If (StrComp(MM_nextParam,MM_moveParam,1) <> 0) Then
        MM_keepMove = MM_keepMove & "&" & MM_paramList(MM_paramIndex)
      End If
    Next
    If (MM_keepMove <> "") Then
      MM_keepMove = Right(MM_keepMove, Len(MM_keepMove) - 1)
    End If
  End If
End If

' set the strings for the move to links
If (MM_keepMove <> "") Then
  MM_keepMove = Server.HTMLEncode(MM_keepMove) & "&"
End If

MM_urlStr = Request.ServerVariables("URL") & "?" & MM_keepMove & MM_moveParam & "="

MM_moveFirst = MM_urlStr & "0"
MM_moveLast  = MM_urlStr & "-1"
MM_moveNext  = MM_urlStr & CStr(MM_offset + MM_size)
If (MM_offset - MM_size < 0) Then
  MM_movePrev = MM_urlStr & "0"
Else
  MM_movePrev = MM_urlStr & CStr(MM_offset - MM_size)
End If
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
                                    
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>                    
function DoDateTime(str, nNamedFormat, nLCID)                
    dim strRet                                
    dim nOldLCID                                
                                        
    strRet = str                                
    If (nLCID > -1) Then                            
        oldLCID = Session.LCID                        
    End If                                    
                                        
    On Error Resume Next                            
                                        
    If (nLCID > -1) Then                            
        Session.LCID = nLCID                        
    End If                                    
                                        
    If ((nLCID < 0) Or (Session.LCID = nLCID)) Then                
        strRet = FormatDateTime(str, nNamedFormat)            
    End If                                    
                                        
    If (nLCID > -1) Then                            
        Session.LCID = oldLCID                        
    End If                                    
                                        
    DoDateTime = strRet                            
End Function                                    
</SCRIPT>                                    
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1256">
</head>

<body>
<table width="641" border="0" align="center" cellpadding="2" cellspacing="1" >
  <tr bgcolor="#999999">
    <th width="37" scope="col">del</th>
    <th width="39" scope="col">edit</th>
    <th width="387" scope="col">subject</th>
    <th width="125" scope="col">date</th>
    <th width="27" scope="col">&nbsp;</th>
  </tr>
  <%
While ((Repeat1__numRows <> 0) AND (NOT RsNewstbl.EOF))
%>
  <tr bgcolor="#EFEFEF">
    <td>
      <div align="center">
        <input name="checkboxName" type="checkbox" id="checkboxName" value="<%=(RsNewstbl.Fields.Item("NewsID").Value)%>">
</div></td>
    <td><div align="center"><a href="EditNews.asp?NewsID=<%=(RsNewstbl.Fields.Item("newsid").Value)%>">edit</a></div></td>
    <td><div align="right"><%=(RsNewstbl.Fields.Item("NewsSubject").Value)%>&nbsp;</div></td>
    <td><div align="right" dir="rtl" lang="en"><%= DoDateTime((RsNewstbl.Fields.Item("Ndate").Value), 2, -1) %>&nbsp;</div></td>
    <td><div align="left">&nbsp;<img src="images/arrow.gif" width="12" height="11"></div></td>
  </tr>
  <%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  RsNewstbl.MoveNext()
Wend
%>
  <tr bgcolor="#999999">
    <td colspan="5"><div align="center">
      <form action="deleteNews.asp" method="post" name="frmEvents" id="frmEvents">
        <div align="right">
          <input name="btnDelete" type="submit" id="btnDelete" onClick="return confirm('are you sure delete?');
" value="delete selected">
          &nbsp;&nbsp;<A HREF="<%=MM_movePrev%>">Previous</A>&nbsp;&nbsp; <A HREF="<%=MM_moveNext%>">Next</A>&nbsp;
<input name="butNew" type="button" onClick="document.location.href='NewNews.asp'" id="butNew3" value="new news">
        </div></form>
    </div></td>
  </tr>
</table>
</body>
</html>
<%
RsNewstbl.Close()
Set RsNewstbl = Nothing
%>


Reply By: Imar Reply Date: 1/9/2006 3:56:16 PM
Take a look at this:
<input name="checkboxName" type="checkbox" id="checkboxName" value="<%=(RsNewstbl.Fields.Item("NewsID").Value)%>">

... later 

  <form action="deleteNews.asp" method="post" name="frmEvents" id="frmEvents">
Your checkboxes are declared outside the form, so they are never submitted to deleteNews.asp.

To fix this, move the opening <form> tag to right after <body> and move the closing </form> tag to right before </body>

That way, the entire page is wrapped inside the form tag, so all controls are submitted to the server and the dele will succeed.

Cheers,
Imar
---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
Reply By: Imar Reply Date: 1/9/2006 4:39:21 PM
Not really.

Do you do a Redirect after you deleted the records? If so, is the page you redirect to expecting a QueryString you're not passing?

Imar
---------------------------------------
Imar Spaanjaars
Everyone is unique, except for me.
Reply By: yts007 Reply Date: 1/9/2006 4:45:01 PM
my bad, it was something I did.

thank you very much for your quick reponse.solve ;)


Go to topic 38500

Return to index page 400
Return to index page 399
Return to index page 398
Return to index page 397
Return to index page 396
Return to index page 395
Return to index page 394
Return to index page 393
Return to index page 392
Return to index page 391