1

所以我有一个名为 BrowseAllItems.asp 的页面,它显示了我所有的数据库信息以及重定向到 EditItem.asp 的各个编辑按钮(部分如下所示),用于选择编辑或删除该特定记录的数据库信息。编辑数据的部分工作正常,但我可以使用一些帮助来删除记录。这是我所拥有的:

Sub DeleteRecord

ItemCode=request.form("item_code")


'Create an ADO connection object
Dim Connection
Set Connection = Server.CreateObject("ADODB.Connection")

'To open an Access database our string would look like the following:
Dim ConnectionString
ConnectionString = "DRIVER={Microsoft Access Driver (*.mdb)};" &_
                "DBQ=" & Server.MapPath("\") & "\" & FolderName & "\items.mdb;DefaultDir=;UID=;PWD=;"

'Then to open the database we (optionally) set some of the properties of the Connection and call Open
Connection.ConnectionTimeout = 30
Connection.CommandTimeout = 80
Connection.Open ConnectionString

'Create an ADO recordset object
Dim rs
Set rs = Server.CreateObject("ADODB.Recordset")

'Initialise the strSQL variable with an SQL statement to query the database
strSQL = "SELECT * FROM items WHERE ITEM_CODE='" & ItemCode & "' "

我知道这与上面的行有关——如果我用记录的实际项目代码替换“ItemCode”,则此代码有效,但我需要一种方法从所选记录中获取项目代码并将其应用到显示 ItemCode 的位置.

rs.LockType = 3
'Open the recordset with the SQL query
rs.Open strSQL, Connection
'Tell the recordset we are deleting a record 
rs.Delete 

rs.Close
'Reset server objects
Set rs = Nothing
Set Connection = Nothing

Response.Write "Record Deleted"

End Sub   
4

2 回答 2

2

也许我误解了一些东西,但看起来ADODB.Command带参数的查询在这里可能很有用。我不明白为什么你需要一个记录集来删除一个给定的记录ITEM_CODE

看来您已经有了一个可用的ADODB.Connection. 在此示例中,我使用cnn而不是Connection作为对象变量的名称。

Dim cmd ' As ADODB.Command
Dim lngRecordsAffected ' As Long
strSQL = "PARAMETERS which_item Text(255);" & vbCrLf & _
    "DELETE FROM items WHERE ITEM_CODE = [which_item];"
Set cmd = Server.CreateObject("ADODB.Command")
cmd.CommandType = 1 ' adCmdText
Set cmd.ActiveConnection = cnn
cmd.CommandText = strSQL
'cmd.Parameters.Append cmd.CreateParameter("which_item", _
'    adVarChar, adParamInput, 255, ItemCode)
cmd.Parameters.Append cmd.CreateParameter("which_item", _
    200, 1, 255, ItemCode)
cmd.Execute lngRecordsAffected
Set cmd = Nothing
' lngRecordsAffected is the number of records deleted in case you 
' need it for anything ... perhaps you'd like to do this ...
Response.Write lngRecordsAffected & " Record(s) Deleted"
于 2013-07-30T19:39:49.863 回答
0

在我看来,您正在失去“ItemCode”的价值。你发布你的请求吗? request.formpost动作有关。另一方面,request.querystring从查询字符串(一个get动作)接收数据,并request("ItemCode")捕获这两种情况。

无论如何you must sanitize!!! before a concatenation,为了防止 SQL 注入,在您的情况下假设 ItemCode 是一个整数,您可以cint像这样使用

ItemCode = cint(request("item_code"))

我猜您的查询不会引发错误,因为单引号的存在,“ItemCode”的空值给出了一个不返回任何数据的有效 SQL 语句。在调试时,您总是可以在response.write strSQL前面执行(或打开)语句。

于 2013-07-30T19:56:17.893 回答