仅有的90分全部给出,下面的问题很久了,帮忙看一下,人都快疯了。在线等

lixiaz 2004-02-03 10:57:28
帮忙看一下下面的代码,我是想通过显示卡号来查询到交易卡号(而一个显示卡号对应一个或多个交易卡号),
然后在EBGAIC.SMART_DELA_200312等表(即所有的交易表中,说明:交易表是每月生成一新表,例如:20030401的数据保存在EBGAIC.SMART_DEAL_200401的表中)查询交易信息。
结果是:
如果一个SMT_SHOWCARDNO对应一个SMT_CARDID,则显示错误。
如果一个SMT_SHOWCARDNO对应一个以上SMT_CARDID,则只显示第一个和最后一个SMT_CARDID的交易信息。
搞的人都疯了,现在还没有解决。
以下是全部的代码:现在给出注释:

<%
cardno=request("cardno")
sql2="select SMT_CARDID FROM EBGAIC.SMART_CARD WHERE SUBSTR(SMT_SHOWCARDNO,3,10)='"&cardno&"'"
set rs1=server.CreateObject("adodb.recordset")
rs1.open sql2, conn,1,3

do while not rs1.eof
if cardnol="" then
cardnol=rs1("SMT_CARDID")
ELSE
cardno1=cardnol&","&rs1("SMT_CARDID")
END IF
rs1.movenext
loop
response.Write cardno1
%>
以上部分是由SMT_SHOWCARDNO 得出SMT_CARDID,测试出是正确的。


<%

function addzero(num)
if cint(num)<10 then
addzero="0"&num
else
addzero=num
end if
end function

function constrct(thedates)

constrct= DatePart("yyyy", TheDates)&addzero(DatePart("m", TheDates))

end function

thedate=date
start=request("start")
endto=request("endto")
dept=request("dept")

wallet=request("wallet")
%>

<%
if start="" then
start=thedate

starts=constrct(start)
testsql="select * from ALL_TABLES where upper(TABLE_NAME)='SMART_DEAL_"&starts&"'"
set testRS=conn.execute(testsql)
if testRS.eof then
%>
<script language="JavaScript">
alert("本月数据暂未到\n请不要查询本月数据!")
</script>


<%
start=dateadd("m",-1,start)
endto=start
end if
end if
if endto="" then
endto=thedate
end if

if DateDiff("d",start,"2003-01-01")>0 then
start="2003-01-01"
end if

if DateDiff("d",endto,thedate)<0 then
endto=thedate
end if


if DateDiff("d",start,endto)<0 then
endto=thedate
start=thedate
end if



thismonth=constrct(thedate) 'DatePart("yyyy", TheDate)&addzero(DatePart("m", TheDate))

''''''''''''''''''这里是一个测试数据 实际运行应该去掉'''''''''''''''
'start="2002-10-11"
'endto="2002-10-11"
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''



starts=constrct(start)
endtos=constrct(endto)

'这里开始写语句了

sumfield=""

%>


<%
if starts>endtos then
sql1="select to_char(SMT_DealDateTime,'yyyy-mm-dd hh24:mi:ss') dealtime,SMT_WALLETCODE,SMT_DealCode, SMT_TRANSMONEY, SMT_OUTMONEY,SMT_ORG_ID ,SMT_TIMES FROM EBGAIC.SMART_Deal_"&thismonth&" where (to_char(SMT_DealDateTime,'yyyy-mm-dd') between '"&start&"' and '"&endto&"') and SMT_CARDID in("&cardno1&")"
sumfield=thismonth
if dept<>"ALL" then
sql1=sql1 & "AND SUBSTR(SMT_ORG_ID,1,9)='" & dept & "'"
end if
if wallet<> "ALL" then
sql1 = sql1 & " AND SMT_WALLETCODE ='" & wallet & "'"
end if
'sql1=sql1&" order by SMT_TIMES "
else
if starts=endtos then
sql1="select to_char(SMT_DealDateTime,'yyyy-mm-dd hh24:mi:ss') dealtime,SMT_WALLETCODE,SMT_DealCode, SMT_TRANSMONEY, SMT_OUTMONEY,SMT_ORG_ID ,SMT_TIMES from EBGAIC.SMART_Deal_"&starts&" where (to_char(SMT_DealDateTime,'yyyy-mm-dd') between '"&start&"' and '"&endto&"') and SMT_CARDID in("&cardno1&")"
sumfield=starts
if dept<>"ALL" then
sql1=sql1 & "AND SUBSTR(SMT_ORG_ID,1,9)='" & dept & "'"
end if
if wallet<> "ALL" then
sql1 = sql1 & " AND SMT_WALLETCODE ='" & wallet & "'"
end if
'sql1=sql1&" order by SMT_TIMES "
else
temp=endto
while starts<=endtos
if temp=endto then
sql1="select to_char(SMT_DealDateTime,'yyyy-mm-dd hh24:mi:ss') dealtime,SMT_WALLETCODE,SMT_DealCode, SMT_TRANSMONEY, SMT_OUTMONEY,SMT_ORG_ID,SMT_TIMES from EBGAIC.SMART_Deal_"&endtos&" where (to_char(SMT_DealDateTime,'yyyy-mm-dd') between '"&start&"' and '"&endto&"') and SMT_CARDID in ("&cardno1&")"
sumfield=endtos
if dept<>"ALL" then
sql1=sql1 & "AND SUBSTR(SMT_ORG_ID,1,9)='" & dept & "'"
end if
if wallet<> "ALL" then
sql1 = sql1 & " AND SMT_WALLETCODE ='" & wallet & "'"
end if
'sql1=sql1&" order by SMT_TIMES "
else

sql2="select to_char(SMT_DealDateTime,'yyyy-mm-dd hh24:mi:ss') dealtime, SMT_WALLETCODE,SMT_DealCode, SMT_TRANSMONEY, SMT_OUTMONEY,SMT_ORG_ID ,SMT_TIMES from EBGAIC.SMART_Deal_"&endtos&" where (to_char(SMT_DealDateTime,'yyyy-mm-dd') between '"&start&"' and '"&endto&"') and SMT_CARDID in("&cardno1&")"

if dept<>"ALL" then
sql2=sql2 & "AND SUBSTR(SMT_ORG_ID,1,9)='" & dept & "'"
end if
if wallet<> "ALL" then
sql2 = sql2 & " AND SMT_WALLETCODE ='" & wallet & "'"
end if

sql1=sql1&" union "&sql2
sumfield=sumfield&","&endtos
end if
temp=DateAdd("m", -1, temp)
endtos=constrct(temp)

wend
end if
end if
span= DateDiff("m", start, endto)

%>

中间代码是组合SQL查询语句。


<%

set rs=server.createobject("adodb.recordset")
sql1=sql1&" order by SMT_TIMES "
rs.open sql1,conn,1,3

'response.write sql1

'response.end
%>
...全文
27 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
TrueAndFalse 2004-02-03
  • 打赏
  • 举报
回复
UP一下
hongmaohouzi 2004-02-03
  • 打赏
  • 举报
回复
大家帮顶一下!关注!
alan815 2004-02-03
  • 打赏
  • 举报
回复
说实话,相帮你,但懒的看你这么多的程序。
拜托你把你的问题简单化,用两个最基本的表来描述问题,不要用你原来的表。
然后再把问题说得更具体一些。
肯定有人来帮你的。
你这样,很少会有人一行一行的仔细看的。
lixiaz 2004-02-03
  • 打赏
  • 举报
回复
没人回答吗?

cxg3247 2004-02-03
  • 打赏
  • 举报
回复
sql书写不规范
szhuk 2004-02-03
  • 打赏
  • 举报
回复
应该不会把
你这样试一下,在循环钟增加一个另外的输出,看输出的个数与实际记录数是不是一致,
我怀疑你设置循环的条件或运用循环不合理,试着用一下其他循环方式。
我一般用While not rs.not...rs.movenext Wend,一般不会出问题的。
tweit 2004-02-03
  • 打赏
  • 举报
回复
关注一下
歪歪 2004-02-03
  • 打赏
  • 举报
回复
用recordcount判断不行吗.
lixiaz 2004-02-03
  • 打赏
  • 举报
回复
帮帮忙吧。
代码简化多了。
lixiaz 2004-02-03
  • 打赏
  • 举报
回复
现在查出问题了,是下面的有问题。
也就是cardno1最后的结果是:
如果一个SMT_SHOWCARDNO对应一个SMT_CARDID,则不会显示SMT_CARDID
如果一个SMT_SHOWCARDNO对应一个以上SMT_CARDID,则只显示第一个和最后一个SMT_CARDID

cardno=request("cardno")
sql2="select SMT_CARDID FROM EBGAIC.SMART_CARD WHERE SUBSTR(SMT_SHOWCARDNO,3,10)='"&cardno&"'"
set rs1=server.CreateObject("adodb.recordset")
rs1.open sql2, conn,1,3

do while not rs1.eof
if cardnol="" then
cardnol=rs1("SMT_CARDID")
ELSE
cardno1=cardnol&","&rs1("SMT_CARDID")
END IF
rs1.movenext
loop
response.Write cardno1

28,407

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧