注册 登录
编程论坛 ASP技术论坛

关于数据库记录判断的问题.

发布于 2010-05-01 17:07, 858 次点击
    各位好,我因工作需要才学ASP不久.现有个问题请教大家.
    我有一张EXCEL表格,文件名bmcx.xls,工作表名cdw。有多个字段,其中一个字段名为DW。
    我的问题是:
   (1):假设表中有500个记录(当然具体数量不重要),我要判断这些记录的DW字段值是否都为"办公室",如果只要有一条记录不是"办公室"就提示错误,后边是否还有这样的记录就不重要了.请教大家ASP代码怎样写.
   (2):如果不能直接对bmcx.xls文件进行判断的话,我可以把它导入到Access数据库中。数据库名:bmcx.mdb 表名:cdw 字段名:dw(只有这一个文本属性的字段,ID字段不算.),那么,要实现我的要求该怎样写ASP代码。
    当然,如果能直接完成(1)的要求最好,可以省去转换excel这一步。
    谢谢大家了,我急等着用!!!
10 回复
#2
yms1232010-05-01 21:49
可以进行count统计
比如
Dim rs
Set rs=conn.Execute("select count(*) from cdw where dw<>'办公室')
IF rs.Fields(0).Value<>0 Then
   Response.Write "错误有记录不为办公室"
End IF
另外excel也可以像操作Access那样写代码,两者区别仅在于ADODB.Connection的连接字符串(ConnectionString)不同而已。
count是SQL的统计函数用于统计查询有多少条数据,这里conn是ADODB.Connection对象,SQL语句的意思是统计dw不是办公室的记录有多少条,如果返回数据不是0条就证明存在
 


[ 本帖最后由 yms123 于 2010-5-1 21:52 编辑 ]
#3
2010-05-02 01:32
版主大人:
你的方法巧妙,代码简洁.解决了我的问题.
非常感谢.
#4
2010-05-02 19:32
版主:
我编的程序"单位名"(user1)是在登录页面中录入,在下一个选择页面(有修改密码和数据上传两项)中用cooike保存的.语句是Response.Cookies("DW1")=Trim(Request.Form("user1"))
即:"办公室"登录后,把"办公室"赋值给"USER1",然后在判断页面用DW2=Request.Cookies("DW1")取回"办公室"这个值再与字段dw的值进行核对.
我按你帮我写的代码改写的判断代码是:(ckdw是表名)
Dim rs
Set rs=conn.Execute("select count(*) from ckdw where DW<>'" & DW2 & "'")
   If rs.Fields(0).Value<>0 Then
      response.write "<script language='javascript'>alert ('Excel表中有不是本部门的记录,请修改正确后再上传!');history.go(-3);</script>"
      Response.End
        else
       .....把EXCEL中的全部数据导入到总数据库里的代码....
   end if
现在有个问题:如果字段dw中只有几个不是"办公室"的记录,可以判断出有其它部门的记录存在,但是如果字段dw中全部都是其它部门,比如全是"市场部"的话,它就判断不出来.而直接把EXCEL中的全部数据导入到总数据库里.我找不出问题出在哪,请帮我诊断一下吧.
感谢了!!!

[ 本帖最后由 zj1969 于 2010-5-2 19:37 编辑 ]
#5
yms1232010-05-02 20:22
换几种语句试试
语句1
Dim rs
Set rs=conn.Execute("select * from cdw where dw<>'办公室')
IF Not rs.EOF Then
   Response.Write "错误有记录不为办公室"
End IF

语句2
Dim rs
Set rs=Server.CreateObject("ADODB.RecordSet")
rs.Open "select * from cdw where dw<>'办公室'",1,3
IF rs.reocrdcount<>0 Then
   Response.Write "错误有记录不为办公室"
End IF
#6
2010-05-02 20:51
这句中:
Set rs=conn.Execute("select count(*) from cdw where dw<>'办公室'")
如果就这样直接写'办公室'的话,程序是没问题的.
如果'办公室'这个值是通过登录页面传过来的参数值的话,就有问题了.所以我估计我把参数的表达式写错了.
我写的是:
DW2=Request.Cookies("USER1")
Set rs=conn.Execute("select count(*) from cdw where dw<>'"& dw2 &"'")
请帮我看看是不是'"& dw2 &"'有问题?但是,如果DW字段中只有个别不是'办公室'(DW2)的话,却能判断出来.我真的迷糊了.
#7
2010-05-02 20:56
老大,先暂时别看,我估计是我前边的参数数传递有问题.
汗!!!
#8
2010-05-02 21:13
还是不行.头痛,我还是放弃这个功能吧:(
#9
yms1232010-05-02 21:20
可能Excel不支持那种SQL判断,那就只能用笨办法来解决循环遍历整个Excel然后判断。
Dim rs,IsHaveDW
IsHaveDW=False
Set rs=conn.Execute("select * from ckdw")
Do Until rs.EOF
   if rs("DW")<>DW2 Then
      IsHaveDW=True
   End IF
   rs.MoveNext
Loop
If IsHaveDW Then
      response.write "<script language='javascript'>alert ('Excel表中有不是本部门的记录,请修改正确后再上传!');history.go(-3);</script>"
      Response.End
        else
       .....把EXCEL中的全部数据导入到总数据库里的代码....
 end if

[ 本帖最后由 yms123 于 2010-5-2 21:22 编辑 ]
#10
2010-05-02 22:17
已经晕了.
可能excel的结构比较复杂,所以直接进行判断容易出错.我已经通过ASP先把EXCEL导入到Access.库名bmcx.mdb  表名CKDW  字段名还是DW.可以麻烦你再帮我写一个操作Access的代码么.
我的大脑已经严重不够用了:(
谢谢啦!!!
#11
2010-05-05 21:47
休息了两天,刚才再次修改程序.把原先很长的一个ASP分出两个子ASP调用.并且重新写了连接数据库的代码,居然就OK了.
我也不明白先前到底是错在哪里.也懒得管它了:)
再次感谢版主yms123,你的代码绝对是OK的.
1