Office中国论坛/Access中国论坛

标题: “瞎子进商店”——从重复值判断来浅谈思维模式的转变 [打印本页]

作者: roych    时间: 2013-12-8 21:10
标题: “瞎子进商店”——从重复值判断来浅谈思维模式的转变
本帖最后由 roych 于 2013-12-10 19:19 编辑

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

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

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



作者: ganlinlao    时间: 2013-12-8 23:45
本帖最后由 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获得匹配字符。然后进行连续匹配。有空再写

以上代码是随手在网页写的,如有错误,请原谅
作者: access学习交流    时间: 2013-12-9 10:03
文章给力,配套漫画很逗!支持一下roych,改变思维模式确实很重要。我发现了一处错误,就是最后进去的是瞎子吧!!
作者: huanghyd    时间: 2013-12-9 12:53
非常感谢Roych,也谢谢大家!{:soso_e183:}
作者: ljp518    时间: 2013-12-9 17:20
谢谢分享!
作者: 任枫樰    时间: 2013-12-11 14:59
{:soso_e179:}   




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