设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1942|回复: 3
打印 上一主题 下一主题

请问老师这段代码为何无法更改表的数据?

[复制链接]
跳转到指定楼层
1#
发表于 2019-1-25 09:25:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想在出库单的文本框“数量”内填入数字后,就让临时表“TMP_Tbl_库存表”内相应的物料的数量减少,于是写了这段:
Private Sub 数量_AfterUpdate()
Dim cnn: Set cnn = CurrentProject.Connection
Dim strSQL As String
strSQL = "SELECT * FROM [TMP_Tbl_库存表] WHERE [进厂编号]=" & SQLText(Me![进厂编号])
Dim rst 'As Recordset
Set rst = ADO.OpenRecordset(strSQL, adLockOptimistic, cnn)
rst![库存数量] = rst![库存数量] - Me![数量]
End Sub
单步运行后,可以看到“rst![库存数量] ”的数量确实变了,但是打开“TMP_Tbl_库存表”,却发现表内的数值没变,请问这是怎么回事?
谢谢!​

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2019-1-25 11:19:12 | 只看该作者
明白了,少了update语句
3#
发表于 2019-1-25 12:08:28 | 只看该作者
如果我没记错的话,OpenRecordset应该是DAO的方法。既然用的是DAO嘛,自然要用DAO的方法了。
  1. Set rst = CurrentDb.OpenRecordset(strSQL, adLockOptimistic, cnn)
  2. rst.Edit
  3. rst![库存数量] = rst![库存数量] - Me![数量]
  4. rst.Update
复制代码

最后说一句,使用ADO或者DAO的记录集(recordset)时,最好加上父级集合。例如:
Dim rst As DAO.Recordset

这个问题,似乎每隔一段时间就会出现到在论坛上。
Dim rst 'As Recordset
看你注释掉后面的定义类型,相信你也遇到了错误。为什么?你知道了么?ADODB.Recordset是记录集,DAO.Recordset也是记录集。系统怎么知道你想用的是哪个记录集?
在无法判断的情况下(也就是这样定义时:Dim rst As Recordset),系统会根据优先级进行选择。如图所示:默认情况下DAO是优先于ADO的,所以,Dim rst As Recordset=Dim rst As DAO.Recordset。但低版本(例如DAO 3.6)或者人为不小心调整了顺序,则会出现错误。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
4#
 楼主| 发表于 2019-1-25 13:40:00 | 只看该作者
roych 发表于 2019-1-25 12:08
如果我没记错的话,OpenRecordset应该是DAO的方法。既然用的是DAO嘛,自然要用DAO的方法了。

最后说一句 ...

万分感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-27 05:48 , Processed in 0.128730 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表