Office中国论坛/Access中国论坛

标题: 操作必须使用一个可更新的查询 [打印本页]

作者: littlekey    时间: 2011-10-9 14:22
标题: 操作必须使用一个可更新的查询
使用DoCmd.RunSQL
当sql语句是insert into的时候没有问题
但是当使用update的时候
就弹出“操作必须使用一个可更新的查询”
请问这种如何解决,谢谢
作者: littlekey    时间: 2011-10-9 14:26
我用的是access对sql server进行更新
作者: littlekey    时间: 2011-10-9 14:43
而且用的还是管理员账号
作者: Henry D. Sy    时间: 2011-10-9 14:46
不是所有的查询都可更新的。
作者: tzh16000    时间: 2011-10-9 14:54
有这个问题存在
我是这样理解的,用查询到的结果进行更新时,因为经过多重嵌套或计算等原因,更新查询本身不能添加新记录时,那么这个查询就属于不可更新的查询,这时就无法更新记录.
我是这样解决的,先将查询到的结果生成临时表,即先运行个生成表查询,再用这个临时表数据更新查询,因为是直接由临时表建立的更新查询,属于可更新查询,就能成功更新,最后再删除临时表.

最好的方法是不用更新查询,而使用删除+添加组合
作者: littlekey    时间: 2011-10-9 14:54
我用的是:
DoCmd.RunSQL "UPDATE [ODBC;Driver=SQL Server;Server=XXXX;Uid=XXXXwd=XXXX;database=XXXX].XXXX a SET a.ZHDLSJ = #" & Now() & "# WHERE a.MAC='" & GetNICInfo(0) & "'"
这个查询可以更新吗
作者: littlekey    时间: 2011-10-9 14:58
tzh16000 发表于 2011-10-9 14:54
有这个问题存在
我是这样理解的,用查询到的结果进行更新时,因为经过多重嵌套或计算等原因,更新查询本身不能 ...

换成删除也不行,弹出无法删除
因为数据库是远程的SQL server数据库
作者: tzh16000    时间: 2011-10-9 15:05
littlekey 发表于 2011-10-9 14:58
换成删除也不行,弹出无法删除
因为数据库是远程的SQL server数据库

噢,我还以为你是后台链接采用SQL数据库的表,这个我还真不清楚
作者: littlekey    时间: 2011-10-9 15:07
是SQL数据库的表
是sql server数据库,我用access的vba操作
作者: tmtony    时间: 2011-10-11 08:07
1. 服务器表 增加主键
2. #" & Now() & "#   改为 #" & fromat(Now(),"yyyy/mm/dd hh:nn:ss") & "#
试试
作者: littlekey    时间: 2011-10-11 08:47
本帖最后由 littlekey 于 2011-10-11 09:19 编辑

我试试
作者: littlekey    时间: 2011-10-11 09:36
增加一个ID主键后,不弹出对话框了,但是其他字段没法更新,还请tmtony版主再次赐教
作者: littlekey    时间: 2011-10-11 13:10
本帖最后由 littlekey 于 2011-10-11 13:11 编辑

弹出如下对话框。
[attach]46921[/attach]
作者: tmtony    时间: 2011-10-11 13:20
应该是查询语句有问题了,反SQL复制到sql server查询分析器中执行一下,看出错提示
作者: littlekey    时间: 2011-10-11 13:26
以下是我写的代码:
Private Sub udate()    '写入系统在线时间
    SQL = "UPDATE [ODBC;Driver=SQL Server;Server=xxxxx;Uid=xxxwd=xxxx;database=xxxxx].xxxx A SET A.ZHDLSJ = #" & Format(Now(), "yyyy-mm-dd hh:nn:ss") & "# WHERE id='1719'"
    DoCmd.RunSQL SQL
End Sub
作者: littlekey    时间: 2011-10-11 13:26
  1. Private Sub udate()    '写入系统在线时间
  2.     SQL = "UPDATE [ODBC;Driver=SQL Server;Server=xxxxx;Uid=xxx;Pwd=xxxx;database=xxxxx].xxxx A SET A.ZHDLSJ = #" & Format(Now(), "yyyy-mm-dd hh:nn:ss") & "# WHERE id='1719'"
  3.     DoCmd.RunSQL SQL
  4. End Sub
复制代码

作者: tmtony    时间: 2011-10-12 21:37
WHERE id='1719'   ID是否数字类型啊?
改为 WHERE id=1719 试试
作者: roych    时间: 2011-10-12 21:45
可否用ADO进行ODBC链接数据后再执行呢?
例如:
Dim rst As New ADODB.Recordset
dim cnn As New ADODB.Connection
cnn.ConectionString="……"
cnn.Open
cnn.excute"……"
……………………

作者: littlekey    时间: 2011-10-13 09:49
tmtony 发表于 2011-10-12 21:37
WHERE id='1719'   ID是否数字类型啊?
改为 WHERE id=1719 试试

修改了,还是不对




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3