Foxtable(狐表)用户栏目专家坐堂 → [求助]网页版开发关于变量使用的问题


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

主题:[求助]网页版开发关于变量使用的问题

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
[求助]网页版开发关于变量使用的问题  发帖心情 Post By:2020/3/18 18:46:00 [显示全部帖子]

昨天因为在服务端用了全局变量来记录用户名导致多用户登录后用户名乱跳的问题,后经老师指导用了Cookie解决了,今天移动版正式让用户使用,服务端不停的报错,我突然想到是不是也是由于变量的使用引起的,请老师看下
手机上有个下单界面:

图片点击可在新窗口打开查看此主题相关图片如下:3.jpg
图片点击可在新窗口打开查看

当多用户几乎同时点下单时,在服务端几乎同时执行了以下代码,好多的变量,是不是我整个思路错了,还一直停留在之前电脑客户端上开发的状态,如果真错了,请老师告诉我应该如何处理,谢谢!
Dim e As RequestEventArgs = args(0)
Dim wb As New WeUI
Dim nms() As String
If e.PostValues("合同类型") = "常规" Then
    nms  = {"公司","工程名称","工程地点","浇注部位","开盘时间","混凝土标号","塌落度","浇注方法","计划方量","需方联系人","需方电话","业务员","业务员电话"} '不能为空的列名数组,去除运输里程
Else
    nms = {"公司","工程名称","工程地点","浇注部位","开盘时间","混凝土标号","塌落度","浇注方法","计划方量","运输里程","需方联系人","需方电话","业务员","业务员电话"} '不能为空的列名数组
End If

For Each nm As String In nms
    If e.PostValues.ContainsKey(nm) = False Then '生成错误提示页
        With wb.AddMsgPage("","msgpage","下单失败", nm & "项目不能为空!")
            .icon = "Warn" '改变图标
            .AddButton("btn1","返回").Attribute = ""
        End With
        e.WriteString(wb.Build)
        Return ""  '必须返回
    End If
Next

Dim dr As DataRow = _dt生产任务通知.AddNew()
Dim dr1 As DataRow
dr1 = _dt销售合同.SQLFind("审核 = 1 And 合同 = '" & e.PostValues("合同") & "'")
If dr1 IsNot Nothing Then '如果找到的话
    dr("代码") = dr1("代码")
Else
    With wb.AddMsgPage("","msgpage","下单失败", "意外错误,在销售合同中未找到需方代码,请与管理员联系")
        .icon = "Warn" '改变图标
        .AddButton("btn1","返回").Attribute = ""
    End With
    e.WriteString(wb.Build)
    Return ""  '必须返回
End If
dr("录入时间") = Date.Now
dr("录入人") = DecryptText(e.Cookies("username"),"123","123")
dr("发货单位") = "投资有限公司"
dr("接收站") = "投资有限公司"


Dim msg As String = Format(Date.today, "yyyyMMdd")
If scxdbh.ContainsKey(msg) Then '如果存在这个类别的编号,scxdbh是字典,在全局代码中设置
    scxdbh(msg) = scxdbh(msg) + 1 '将该类别最大编号加1
Else
    scxdbh.Add(msg,1) '如果是这个列表的首次编号,则编号等于1
End If
dr("单号") = "SCXD-" &  Format(Date.today, "yyyyMMdd") & "-" &  Format(scxdbh(msg),"000")

nms = New String() {"合同类型","合同","公司","工程名称","工程地点","浇注部位","开盘时间","混凝土标号","塌落度","浇注方法","计划方量","运输里程","车辆及频率","需方联系人","需方电话","其它技术要求","备注","业务员","业务员电话"}  '重新定义了nms数组,用于增加或减少列
For Each nm As String In nms
    If e.PostValues.ContainsKey(nm) Then
        dr(nm) = e.PostValues(nm)
    End If
Next

If e.PostValues("运输里程") >0 Then
    If e.PostValues("运输里程") >20 Then
        dr("里程单价") = 40 + (e.PostValues("运输里程") - 20) * 2
    ElseIf e.PostValues("运输里程") >10 Then
        dr("里程单价") = 40
    Else
        dr("里程单价") = 30
    End If
End If

'保存并生成增加成功提示页面
dr.save()
With wb.AddMsgPage("","msgpage","下单成功", "单号:" & dr("单号")) '生成成功提示页
    Dim htm As String
    If DecryptText(e.Cookies("username"),"123","123") = e.PostValues("业务员") Then
        htm = "Xd_jbxx.htm"
    Else
        htm = "Xd_jbxxplus.htm"
    End If
    .AddButton("btn1","继续下单",htm)
    .AddButton("btn2","返回首页","default.htm")
End With
e.WriteString(wb.Build)


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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/3/19 9:11:00 [显示全部帖子]

昨天报错时,事发突然,为了不影响客户使用,急忙把云服务器上的报错窗口给关了,然后又能用了,后面又报过一次错,又关了,然后就不敢用手机下单了,继续用电脑客户端下单,今天会让客户做个压力测试,叫几人同时下单,到时仔细看看报错内容
我没有用什么异步函数,我现在担心的是整个编程思路错了
我是担心这个问题,因为这些变量在服务器,当A用户执行代码到这一步:
Dim dr As DataRow = _dt生产任务通知.AddNew()
Dim dr1 As DataRow
dr1 = _dt销售合同.SQLFind("审核 = 1 And 合同 = '" & e.PostValues("合同") & "'")
If dr1 IsNot Nothing Then '如果找到的话
    dr("代码") = dr1("代码")

假定这时的合同编号是001,这时,几乎在下一个瞬间,B用户也下单了,他的合同号是002,当A用户继续向下执行代码时,这时A用户的代码中合同号还是001吗?会不会变成002
如果我的编程思路没错,哪就可能某些代码写的不规范,仔细找出来就是了,如果思路错了,哪之前的一个月白费了
[此贴子已经被作者于2020/3/19 9:12:06编辑过]

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/3/19 10:21:00 [显示全部帖子]

项目事件Initialize
Dim cmd_产品销售合同 As New SQLCommand
cmd_产品销售合同.C
cmd_产品销售合同.CommandText = "S elect * From {产品销售合同} Where [_Identify] Is Null"
_dt产品销售合同 = cmd_产品销售合同.ExecuteReader()

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


加好友 发短信
等级:五尾狐 帖子:1105 积分:8967 威望:0 精华:0 注册:2014/10/25 11:24:00
  发帖心情 Post By:2020/3/19 10:37:00 [显示全部帖子]

我不用编辑销售合同,只是查找数据后再写入 生产通知表,这个表的加载是有 TRUE的
另外,用SQLFIND本来就是后台查找没加载的记录,你如果已经加载了,哪就用FIND了
[此贴子已经被作者于2020/3/19 10:38:25编辑过]

 回到顶部