无法在我的数据库中更新查询,收到有关可更新查询的错误

Posted

技术标签:

【中文标题】无法在我的数据库中更新查询,收到有关可更新查询的错误【英文标题】:can't update query in my db ,getting the error about updateable query 【发布时间】:2014-07-22 12:59:44 【问题描述】:

我正在尝试更新,但 id 不起作用....

' 数据库连接 - 记得指定你的数据库的路径

    Set Conn = Server.CreateObject("ADODB.Connection")         
Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")

' Get data from the database depending on the value of the id in the URL
 Dim strSQL     

strSQL = "INSERT INTO people ("

strSQL = strSQL & "firstName , "
strSQL = strSQL & "lastName , "

strSQL = strSQL & "phone , "
strSQL = strSQL & "birthDate ) "

strSQL = strSQL & "VALUES("

strSQL = strSQL & "'Cousin', "

strSQL = strSQL & "'Gus', "
strSQL = strSQL & "'99887766', "

strSQL = strSQL & "'20-04-1964')"

' The SQL statement is executed 
Set rs = Conn.Execute(strSQL)

' Close the database connection
  rs.Close()
Set rs = Nothing
Conn.Close()
Set Conn = Nothing

我收到了错误

操作必须使用可更新的查询。

我一定错过了一个空格或其他什么......我从数据库中读取但我无法更新的问题可能是什么)

【问题讨论】:

托管数据库的机器的区域设置是否支持 DD-MM-YYYY 表示法?我担心日期处理不正确。此外,我不确定喷气机供应商是否应该使用 # 作为日期或 ' 或许:social.msdn.microsoft.com/Forums/en-US/… 我建议您在执行插入操作时不要创建记录集。这是不必要的。您可以简单地在没有对象分配的连接上执行。因此,您的语句将是 Conn.Execute strSQL 而不是 Set rs = Conn.Execute(strSQL)。 (见w3schools.com/asp/ado_add.asp)即使这不能直接解决错误,在这种情况下它也是一种更好的操作方式。 这对我来说是一种实践,因为我是这个 ASP 和 DB 处理程序领域的新手。所以我想看到结果的发生以及为什么我没有在连接上执行:) 检查这个:support.microsoft.com/kb/175168 【参考方案1】:

永远不要使用“执行”方法插入。 改为用户 ADODB.RecordSet

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.Oledb.4.0; Data Source=" & Server.MapPath("dbbb.mdb")
Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open "Select Top 1 * From people", Conn,3,3
   Rs.AddNew
   Rs("firstName") = 'Cousin'
   Rs("lastName") = 'Gus'
   Rs("phone") = '99887766'
   Rs("lastName") = CDate('20-04-1964')
   Rs.Update
   Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing

【讨论】:

“永远不要使用“执行”方法插入”... 为什么不呢?您的示例需要 2 个数据库查询,而使用 Execute 的更新查询只会产生 1 个查询。 我在执行命令更新数据方面有不好的经验。特别是在更新日期/时间数据时。使用 adodb 记录集,问题解决了。 这两种方法都容易出错。如果您创建一个函数来将日期格式化为 SQL 友好格式(“yyyy-mm-dd hh:mm”),那么日期不会有任何问题。我有格式化 SQL 字符串(添加单引号、转义单引号)、数字(强制数字)和其他数据类型的函数。这些也确保我避免 SQL 注入攻击。 哇你是专家...我只是一个初学者..所以我选择了简单的方法和简单的函数vbscript。 CDate、CCur、Cint、Clng 等。但是请给我们你的功能..所以我可以复制到我的代码中..作为我知识的参考.. 如果您可以发布它,我可以使用您更正的代码。谢谢【参考方案2】:

问题是您的数据库所在的文件夹没有为运行网站的用户启用写权限。

通常您需要授予用户 IUSR_ 或 IUSR 对其所在的 MDB 文件或文件夹的读/写权限。用户可能因操作系统/IIS 版本/IIS 设置而异。

如果您提供有关您的托管环境的更多详细信息,我们可能会提供进一步帮助(例如本地或 cliud、IIS 版本、控制面板访问等)。

【讨论】:

我有我之前的问题,我能够阅读所以据我了解我确实有权限:) 默认情况下数据库MDB文件只有READ权限。但要进行更新,您还需要 WRITE 权限。这确实是此错误消息最可能出现的问题。 我与服务器支持人员进行了交谈,他们说我拥有所有权限:( 如果您可以从数据库中读取但不能写入(并且查询没问题),那么我仍然认为它与权限相关。尝试编写一个 asp 脚本在同一文件夹中创建一个文本文件(例如w3schools.com/asp/met_createtextfile_folder.asp)。如果这不起作用,那么您肯定有权限错误。 显然你是对的 :) 权限问题 ....我发现时的感觉 :((

以上是关于无法在我的数据库中更新查询,收到有关可更新查询的错误的主要内容,如果未能解决你的问题,请参考以下文章

Access 2016 - 简单更新查询给出“操作必须使用可更新查询”错误

部署后“操作必须使用可更新查询”

Paradox 插入数据操作必须使用可更新查询

为啥我的 Apollo 缓存更新没有反映在我的查询中?

更新行给出错误操作必须使用可更新查询

需要有关我的更新查询的建议