【问题标题】: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 表示法?我担心日期处理不正确。此外,我不确定喷气机供应商是否应该使用 # 作为日期或 '
  • 我建议您在执行插入操作时不要创建记录集。这是不必要的。您可以简单地在没有对象分配的连接上执行。因此,您的语句将是 Conn.Execute strSQL 而不是 Set rs = Conn.Execute(strSQL)。 (见w3schools.com/asp/ado_add.asp)即使这不能直接解决错误,在这种情况下它也是一种更好的操作方式。
  • 这对我来说是一种实践,因为我是这个 ASP 和 DB 处理程序领域的新手。所以我想看到结果的发生以及为什么我没有在连接上执行:)

标签: html sql asp-classic sql-update insert-update


【解决方案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)。如果这不起作用,那么您肯定有权限错误。
  • 显然你是对的 :) 权限问题 ....我发现时的感觉 :((
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2020-11-20
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多