Foxtable(狐表)用户栏目专家坐堂 → [求助]移动访问代码求助 9楼更新问题


  共有2266人关注过本帖树形打印复制链接

主题:[求助]移动访问代码求助 9楼更新问题

帅哥哟,离线,有人找我吗?
huangfanzi
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]移动访问代码求助 9楼更新问题  发帖心情 Post By:2018/6/10 14:07:00 [只看该作者]

此处为电脑访问的代码:
Tables(e.Form.Name & "_Table1").Fill("S elect Distinct 执行状态,合同类型,简称 As 客户,合同主号,合同,日期,内定交货日,名称,牌号,规格_厚度 As 厚度,规格_宽度 As 宽度,规格_长度 As 长度,单价,硬度_状态 As Hv状态,硬度_MIN As HvMin,硬度_MAX As HvMax,单位,数量 As 合同量,0.00 As 发货量,0.00 As 退货量,0.00 As 欠交量 F rom {销售及加工合同} Where " & flt & " ORDER BY 执行状态,合同类型,简称,合同主号,合同","ShcsErpSql",True)

For Each r As Row In Tables(e.Form.Name & "_table1").Rows
    r("发货量") = Val(_dt工序合并表.SQLCompute("Sum(数量)","合同 = '" & r("合同") & "'And 表名 = '销售及加工出库'"))
    r("退货量") = Val(_dt工序合并表.SQLCompute("Sum(数量)","合同 = '" & r("合同") & "'And 工序 = '退货入库'"))
    r("欠交量") = r("合同量") - r("发货量") + r("退货量")
Next

下面是移动访问的代码,不知如何实现发货量、退货量及欠交量的计算,请老师帮我写下代码,我好参考,谢谢!
Dim e As RequestEventArgs = args(0)
Dim page As Integer = 0 '默认page为0,显示第一页
Dim pageRows As Integer = 20 '每页20行
If e.GetValues.ContainsKey("page") Then  '如果地址中有page参数
    Integer.TryParse(e.GetValues("page"), page) '提取page参数
End If
Dim StartRow As Integer = page * pageRows '此页第一行
Dim EndRow As Integer = (page + 1) * pageRows - 1 '此页最后一行
Dim cmd As New SQLCommand
cmd.C '记得设置数据源名称
cmd.CommandText = "S elect Count(*) F rom {销售及加工合同}"
Dim Count As Integer = cmd.ExecuteScalar() '获取总的行数
cmd.CommandText = "S elect RowNum,* ,0.00 As 发货量,0.00 As 退货量,0.00 As 欠交量 From (Select Row_Number() Over(Order by [合同]) As RowNum, * F rom 销售及加工合同 Where 执行状态 = '执行中') As a "
cmd.CommandText = cmd.CommandText & "  Where RowNum >= " & StartRow & " And RowNum <= " & EndRow
Dim dt As DataTable = cmd.ExecuteReader '获取该页数据
Dim sb As New StringBuilder
Dim nms() As String = {"客户","合同量","发货量","退货量","欠交量"}
sb.AppendLine("<Table border='1'>")
sb.AppendLine("<caption>合同浏览<caption></br>")
sb.Append("<tr>")
For Each nm As String In nms
    sb.Append("<td>" & nm & "</td>")
Next
sb.AppendLine("</tr>")
For Each r As DataRow In dt.DataRows
    sb.Append("<tr>")
    For Each nm As String In nms
        sb.Append("<td>" & r(nm) & "</td>")
    Next
    sb.AppendLine("</tr>")
Next
sb.AppendLine("</Table></br></br>")
If page > 0 Then
    sb.Append("<a href='htcx.htm?page=" & page - 1 & "'>上一页</a> ")
End If
If EndRow < Count -1 Then
    sb.Append("<a href='htcx.htm?page=" & page + 1 & "'>下一页 </a>" )
End If
sb.Append("<a href='default.htm'>返回 </a>" )
e.WriteString(sb.ToString)
[此贴子已经被作者于2018/6/11 23:11:56编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/10 22:31:00 [只看该作者]

1、这句代码得到dt临时表吧?

 

Dim dt As DataTable = cmd.ExecuteReader '获取该页数据

 

2、循环临时表,计算值,即可。

 

For Each dt As DataRow In dt.DataRows
 
------------------------------
 
或者换一种方法:直接写sql语句,如
 
select 第一列, 第二列 from {表A}
 
改成
 
select 第一列, 第二列, (select sum(数量) from {表B} as b where a.第一列=b.第一列) as 总数量 from {表a} as a

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/6/11 14:10:00 [只看该作者]

脑子昨天没反应过来,光想着如何在生成的网页表格上进行循环,不知如何写代码了,其实是先循环临时表
第二种方法是用子查询,但效率是不是比第一种差啊?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/11 14:14:00 [只看该作者]

如果效率问题,你 SQLCompute 的效率更低,如果执行多次请尽量使用Compute。


 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/6/11 21:55:00 [只看该作者]

s elect 合同,合同量, 发货量, (select sum(数量) f rom {表B} as b where a.合同=b.合同) as 退货量, 合同量 - 发货量 + 退货量 = 欠交量 f rom {表a} as a

老师,用子查询确实比原来的SQLCompute快,但上面的欠交量能直接计算出来吗?

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110813 积分:564003 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/11 22:01:00 [只看该作者]

select *,合同量 - 发货量 + 退货量 as 欠交量 from (select 合同,合同量, 发货量, (select sum(数量) f rom {表B} as b where a.合同=b.合同) as 退货量  from {表a} as a) as c

 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/6/11 22:25:00 [只看该作者]

太复杂了,改不来,老师帮我改下,下面是我目前用的代码,欠交量是另外算的,帮我按您上面方法改下,谢谢!

Tables(e.Form.Name & "_Table1").Fill("Select Distinct a.执行状态,a.合同类型,a.简称 As 客户,a.合同主号,a.合同,a.日期,a.内定交货日,a.名称,a.牌号,a.规格_厚度 As 厚度,a.规格_宽度 As 宽度,a.规格_长度 As 长度,a.单价,a.硬度_状态 As Hv状态,a.硬度_MIN As HvMin,a.硬度_MAX As HvMax,a.单位,a.数量 As 合同量, (select sum(数量) f rom {工序合并表} as b where a.合同 = b.合同 And b.表名 = '销售及加工出库') as 发货量 ,(select sum(数量) f rom {工序合并表} as b where a.合同 = b.合同 And b.工序 = '退货入库') as 退货量,0.00 As 欠交量 F rom {销售及加工合同} As a Where " & flt & " ORDER BY a.执行状态,a.合同类型,a.简称,a.合同主号,a.合同","ShcsErpSql",True)

For Each r As Row In Tables(e.Form.Name & "_table1").Rows
    r("欠交量") = r("合同量") - r("发货量") + r("退货量")
Next

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110813 积分:564003 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/6/11 22:50:00 [只看该作者]

Tables(e.Form.Name & "_Table1").Fill("select *,合同量 - 发货量 + 退货量 as 欠交量  from (Select Distinct a.执行状态,a.合同类型,a.简称 As 客户,a.合同主号,a.合同,a.日期,a.内定交货日,a.名称,a.牌号,a.规格_厚度 As 厚度,a.规格_宽度 As 宽度,a.规格_长度 As 长度,a.单价,a.硬度_状态 As Hv状态,a.硬度_MIN As HvMin,a.硬度_MAX As HvMax,a.单位,a.数量 As 合同量, (select sum(数量) f rom {工序合并表} as b where a.合同 = b.合同 And b.表名 = '销售及加工出库') as 发货量 ,(select sum(数量) from {工序合并表} as b where a.合同 = b.合同 And b.工序 = '退货入库') as 退货量 F rom {销售及加工合同} As a) as a Where " & flt & " ORDER BY a.执行状态,a.合同类型,a.简称,a.合同主号,a.合同","ShcsErpSql",True)


 回到顶部
帅哥哟,离线,有人找我吗?
huangfanzi
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2018/6/11 23:11:00 [只看该作者]

进行了测试,应该是下面的代码:
Tables(e.Form.Name & "_Table1").Fill("Select *,合同量 - IsNull(发货量,0) + IsNull(退货量,0) as 欠交量 f rom (Select Distinct a.执行状态,a.合同类型,a.简称 As 客户,a.合同主号,a.合同,a.日期,a.内定交货日,a.名称,a.牌号,a.规格_厚度 As 厚度,a.规格_宽度 As 宽度,a.规格_长度 As 长度,a.单价,a.硬度_状态 As Hv状态,a.硬度_MIN As HvMin,a.硬度_MAX As HvMax,a.单位,a.数量 As 合同量, (select sum(数量) f rom {工序合并表} as b where a.合同 = b.合同 And b.表名 = '销售及加工出库') as 发货量 ,(select sum(数量) f rom {工序合并表} as b where a.合同 = b.合同 And b.工序 = '退货入库') as 退货量 F rom {销售及加工合同} As a ) As c Where " & flt & " ORDER BY 执行状态,合同类型,客户,合同主号,合同","ShcsErpSql",True) 

现在又有个新问题,代码中欠交量的计算不精确,例如应该是-0.3,通过后续的SetFormat代码在查询表上看到的是-0.30,把数据复制到EXCEL时看到的是-0.300000000000011,如何解决这个问题?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/6/12 8:59:00 [只看该作者]

合同量 - IsNull(发货量,0) + IsNull(退货量,0) as 欠交量

 

改成

 

round(合同量 - IsNull(发货量,0) + IsNull(退货量,0), 2) as 欠交量


 回到顶部
总数 12 1 2 下一页