如何使用asp从access数据库中删除特定记录?

Posted

技术标签:

【中文标题】如何使用asp从access数据库中删除特定记录?【英文标题】:How to delete a specific record from an access database with asp? 【发布时间】:2013-07-30 18:37:16 【问题描述】:

所以我有一个名为 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   

【问题讨论】:

【参考方案1】:

也许我误解了一些东西,但看起来带有参数查询的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"

【讨论】:

【参考方案2】:

在我看来,您正在失去“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之前执行(或打开)语句。

【讨论】:

以上是关于如何使用asp从access数据库中删除特定记录?的主要内容,如果未能解决你的问题,请参考以下文章

access如何字段上一条记录

用asp如何实现下拉列表值筛选access数据库记录

c# asp.net GridView中如何删除一条记录后刷新页面

单击按钮时从 Access 数据库中删除特定记录

如何通过 ASP.net 网站将新条目插入 Access db 表?

ASP.NET - VB.NET - 从 MS-Access 数据库中检索记录