| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 685 人关注过本帖
标题:查询是出错,请班主出招,加载时怎么记重复的不显示
只看楼主 加入收藏
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
结帖率:53.85%
收藏
 问题点数:0 回复次数:9 
查询是出错,请班主出招,加载时怎么记重复的不显示
两个问题
一、  原程序是这样的
 If Option3 = True Then
         If = "" Then
               MsgBox "请选择日期!", vbOKOnly + vbExclamation, "提示"
         Else
           fromdate = & "-" & & "-1"
           fromdate = Format( & "-" & & "-1", "yyyy-mm-dd")
           todate = & "-" & & "-1"
           todate = Format(todate, "yyyy-mm-dd")
           sql = "select * from NewEquOut where ETime between #" & fromdate & "# and # " & todate & "#"
           FrmRe_NewEquO.createlist (sql)
           FrmRe_NewEquO.Show
           FrmRe_NewEquO.ZOrder 0
           Unload Me
        End If
图片附件: 游客没有浏览图片的权限,请 登录注册

这个语句,存在一个毛病,就是只会查本月1号至下月1号的数据,我把
todate = & "-" & & "-1" 这句改成 :"-31",
后,有些月份在查时总是报错,我总结了一下,无能是从那个月开始,只要是单月(1、3、5、7、9、11)结束就会报错,双月(2,4、6、8、12)这些月份时能正常查询
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

我希望在查询时能从1号开始,到31号结束,而不是原代码的1号开始,到下个月1号结束,这样就跨了两个月了

二、年的下拉菜单里总是把数据表里面的所有年份显示出来了,有什么办法让重复的不显示出来

sql = "select distinct ETime from NewEquOut"   '初始化年,月
    Set rs = TransactSQL(sql)
    If Not rs.EOF Then
       rs.MoveFirst
       While Not rs.EOF
         If Not IsNull(rs.Fields(0)) Then
               Left(rs(0), 4)   *********
               Left(rs(0), 4)
          End If
          rs.MoveNext
        Wend
        rs.Close
     End If
        For i = 1 To 12
         i
         i
        Next i
在****的地方加一个判断语句,如果出现重复的,不将数据添加到下拉菜单。请问要怎么样写这个代码

谢谢大家。
搜索更多相关主题的帖子: 加载 班主 出招 查询 
2010-11-23 21:57
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
收藏
得分:0 
班主出招帮忙
2010-11-25 10:14
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
'假设 A 是选定的年,B 是选定的月
'那么:
A年B月1日 到 (A年B+1月1日-1日) 就是你所需要这个月的范围
日期减法,你自己查找一下函数。如果数据是日期型时,可以直接做减少,整数代表天数,小数代表 小时数,按1天=24:00:00.00 的关系换算

你用的是:A年B月1日 到 A年B月31日 ,在 该月没有 31 天时,铁定出错。



[ 本帖最后由 风吹过b 于 2010-11-25 16:53 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2010-11-25 16:52
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
? #2010-10-22#-3.3
2010-10-18 16:48:00

授人于鱼,不如授人于渔
早已停用QQ了
2010-11-25 16:54
hsbwp1314
Rank: 2
来 自:湖南长沙
等 级:论坛游民
帖 子:88
专家分:25
注 册:2008-12-1
收藏
得分:0 
请问班主,第二个问题能解决吗
2010-11-26 08:03
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
第二个问题,我不会。

我对数据库操作 比较少。

如果是年份的话,我一般 从数据库里找出最小值,最大值,然后把
从最小值到最大值及中间的,全部添加一次就是了。而不去管 数据库中 是否具体有没有中间之些值。


授人于鱼,不如授人于渔
早已停用QQ了
2010-11-26 11:34
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
你数据库中是如下情况:  YYYYMM
数据比较是 从左比较到右,那么

200101 >200012 ,那么可以。

sql = "select min(distinct) as MD , max(distinct) as XD from NewEquOut where not isnull(distinct)"   '初始化年,月
'需要在SQL里排除空值。我对 SQL 命令及内内置函数不熟悉。可能你要查资料修改。
for i= val(Left(rd("md"),4)) to val(Left(rs("XD"),4))
    i             '*********
    i
next i



[ 本帖最后由 风吹过b 于 2010-11-26 11:43 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2010-11-26 11:41
haiyungood
Rank: 2
等 级:论坛游民
帖 子:83
专家分:98
注 册:2008-7-2
收藏
得分:0 
按楼上的方法,就是把最小值和最大值之间的年份都添加进去了,但是最小值和最大值之间的年份不一定都会出现吧,可不可以这样了:在进行添加时用要添加的年份和combo3里面的每一个值进行比较,如果要添加的这个值不存在,则添加,如果存在,则不添加。
2010-11-26 15:22
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
回8楼:
如果 数据库 量很大的话, 每添加一个,都进行比较一次,那会非常的 消耗时间的。
VB对访问 控件的属性,都是属于慢速操作。

参考一下我 6楼的回复。


授人于鱼,不如授人于渔
早已停用QQ了
2010-11-26 15:36
haiyungood
Rank: 2
等 级:论坛游民
帖 子:83
专家分:98
注 册:2008-7-2
收藏
得分:0 
其实6楼的方法挺好的,我想到的是:SQL语句在选择年份时按从小到大排序,在进行添加时,用LEFT(RS.(0),4))和COMBO3里面的最后一个值进行比较就可了,如果不相等,则添加,如果相等,则不添加.但是如果数据库的里非常大的话这样做可能会有点慢了.还是要采取6楼的方法了.
2010-11-26 15:55
快速回复:查询是出错,请班主出招,加载时怎么记重复的不显示
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052944 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved