设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[窗体] “瞎子进商店”——从重复值判断来浅谈思维模式的转变

[复制链接]
跳转到指定楼层
1#
发表于 2013-12-8 21:10:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 roych 于 2013-12-10 19:19 编辑

       好久没发帖子了。记得在上一个帖子上提到会沉寂一段时间,只是对于一向活跃的Roych来说,似乎时间长了点。然而,个中种种却又不想再提,毕竟也许还要继续一段时间呢。
       好了,不说这些了,回到主题。前几天版友huanghyd提到判断重复值的问题,并M了我,大体是说问题尚未解决,让我看看云云。于是便草草浏览了下大家的回复,发现大家似乎都在组合框上做文章。这让我想起了一个小故事:

      一个哑巴进商店,想买一支钢笔,就握着手在柜台上划了几下,然后售货员就明白无误地给了他钢笔。接着一个聋子进商店,想买剪刀,便中指和食指,做出剪东西的样子,售货员又明白了。最后进来的是一个瞎子,他想买一只铁锤。这时候他会怎么办?
       直接握拳往柜台擂一下!——估计很多人会这样回答吧?虽然这样做也行,不过最佳的做法是直接告诉售货员:“给我来一个锤子”。这就是惯性思维的力量。

       一方面楼主提到了组合框,另一方面偏又不上传附件,大家自然会先考虑在组合框上做文章了。这并不是不可以,只不过并非最佳办法。因为变量还没确定之前,更新前事件、更新后事件和更改事件等所操作的数据可能不完全一致,所以如果能先确定变量再执行的话,应该可以避免更多的麻烦。我想,这也正是问题的症结所在吧。
       其实解决办法有很多。我这里就列举两个吧。
       1、通过用Count函数来计算重复值。说到这个,那些还在用Dlookup的朋友们不妨牢记一下,能用Count来统计的时候就尽量别用Dlookup吧,因为域函数执行起来效率特低,尤其是数据较多的时候。关于这一点论坛里应该很多人都提过的了。
       这是第一个想到的办法,在ADO上执行。如果不写ADO语句行吗?答案当然是肯定的。重新构造数据表结构,写上更新语句,增加一条记录时就把相应的值填充到新的表中,把还没填充的值作为数据源不就避免了重复值这个问题了吗?于是方法2应运而生。
       还有吗?当然还有了。通过有效性设置怎么样?理论上是可行的。大家可以试试,不过可能创建必要的查询或者更改数据表结构。还是看附件吧。
      
       絮絮叨叨说了这么多,只想告诉大家,改变习惯这东西,其实很容易的,而且改了之后并没什么不好,像下面这个杀手的习惯就改得很好,不是吗?{:soso_e113:}


本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2013-12-8 23:45:14 | 只看该作者
本帖最后由 ganlinlao 于 2013-12-8 23:54 编辑

思路都是差不多,无论如何都得进行一次查询。

1、单窗体情况下:意味着每一次更新都得查询一次。
如何限制文本框输入,这里就略过了。
Dim conn as ado.connection,rst as ado.recodset,strwh as string
If Me.MachineName <> "" And Me.DyelotDate <> "" Then        
        strWh = "select id from Tbl_DyeHistory where [DyelotDate]=#"Me.DyelotDate & "# and [MachineName]='" & Me.MachineName & "'"  ‘这里假设ID是主键,同一天同一台机子不允许重复,如果有另外条件自己加。因为主键有索引,查询最快
     set conn=currentprojet.connection
     set rst=conn.execute(strWh)
        If not(rst.eof and rst.bof) then   //有数据就抛出错误
            MsgBox "请确认是否重复?排其它缸号", vbQuestion + vbOKOnly
            Exit Sub
        Else
     rs.update   //这里的rs是你的窗体绑定的recordset
     rst.close
    set rst=noting
    end if
end if

2、连续窗体或数据列表模式:
一次查询,多次匹配。用getstring获得匹配字符。然后进行连续匹配。有空再写

以上代码是随手在网页写的,如有错误,请原谅
3#
发表于 2013-12-9 10:03:35 | 只看该作者
文章给力,配套漫画很逗!支持一下roych,改变思维模式确实很重要。我发现了一处错误,就是最后进去的是瞎子吧!!
4#
发表于 2013-12-9 12:53:33 | 只看该作者
非常感谢Roych,也谢谢大家!{:soso_e183:}
5#
发表于 2013-12-9 17:20:43 | 只看该作者
谢谢分享!
回复

使用道具 举报

点击这里给我发消息

6#
发表于 2013-12-11 14:59:47 | 只看该作者
{:soso_e179:}   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 21:22 , Processed in 0.100697 second(s), 31 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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