以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  web服务找不到报错位置  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=172152)

--  作者:aidimeng
--  发布时间:2021/9/27 8:52:00
--  web服务找不到报错位置

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档.txt

写了个简单的web查询页面,用我的手机或直接登录地址不论怎么操作都不报错,但过一段时间 在看服务,出现很多条报错信息

 1、非法路径

2、没有实例化对象等

代码在附件里,请帮助看看 是哪里有问题吗


--  作者:有点蓝
--  发布时间:2021/9/27 9:33:00
--  
服务端开发和客户端开发还是有区别的,不要带着发客户端的思维来开发服务端。
1、除非这个网页只有一个人使用,否则请不要使用全局变量传递数据。因为全局变量是服务端共用的,假设有10个人打开网页,那么全局变量的值是这个10个人共用的,谁最后打开网页,这个变量就是最后打开网页的这个人的值,其它人使用这个全局变量也是这个值,这肯定是有问题的
2、不要在httprequest里定义统一的变量,比如【Dim cmd As new SQLCommand】,因为所有访问服务端资源的请求(包括图片,js.....等等等)都会进入httprequest,每次都会初始化一个SQLCommand,即用不到也浪费内存和效率,哪个case里用到,再到那个case里定义变量好了
3、建议使用HttpServer.WebPath替代事件头:http://www.foxtable.com/mobilehelp/topics/0276.htm

比较合理的逻辑应该是
If e.Path.StartsWith("Reports\\")
    e.ResponseEncoding = "gb2312"
    Select Case e.Path
        Case "Reports\\bg"
Dim cmd As new SQLCommand
cmd.ConnectionName="pk"
            cmd.CommandText= "select t1.编号,t1.单据状态,t1.报告类型,t2.产品名称,t2.规格,t1.生产日期_开始 as 生产日期,t1.批次,t1.结论,t1.质检员,t1.制单,t1.审核,t1.批准 from 质检报告主表 t1  ,成品有出厂检验 t2  where   t1.编号= t2.编号 and t1.生产日期_开始=\'"& e.PostValues("scrq") &"\' And t2.产品名称=\'"& e.PostValues("cpmc") &"\' And t2.规格=\'"& e.PostValues("gg") &"\'"

            Dim dtt As DataTable= cmd.ExecuteReader
            If dtt.DataRows.count>=1 Then
                
                Dim r As DataRow= dtt.DataRows(0)
                e.AsyncExecute = True
                Functions.AsyncExecute("baogao",e,r,e.PostValues("cpmc"),e.PostValues("gg") ,e.PostValues("scrq")  )
            End If
        Case Else
            e.AsReportServer("Reports/")
    End Select
Else
    Select Case e.Path
        Case "test.htm"
            If e.PostValues.Count = 0 Then
                Dim wb As New weui
                wb.AddPageTitle("","ph1","","中粮菏泽包装油质检报告查询")
                wb.AddForm("","form1","Reports/bg")
                With wb.AddInputGroup("form1","ipg1","查询条件")
                    With   .AddInput("scrq","生产日期","date")
                        .Attribute = "onchange=""setAjaxOptions(\'cpmc\',\'getProducts.htm\',\'scrq\',false)"""
                    End With
                    With .AddSelect("cpmc","产品名称","")
                        .Attribute = "onchange=""setAjaxOptions(\'gg\',\'getProducts.htm\',\'scrq\',\'cpmc\',false)"""
                    End With
                    With .AddSelect("gg","规格","")
                        \' .Attribute = "onchange=""setAjaxOptions(\'gg1\',\'getProducts.htm\',\'scrq\',\'cpmc\',\'gg\'false)"""
                        
                    End With
                End With
                With wb.AddButtonGroup("form1","btg1",False)  \'垂直排列
                    .Add("btn1", "查询", "submit") \'
                End With
                e.WriteString(wb.Build) \'生成网页
        Case  "getProducts.htm"
            Dim vals As String
            Dim cmd As new SQLCommand
cmd.ConnectionName="pk"
            cmd.CommandText="select t1.产品名称,t2.生产日期_开始,t1.规格 from 质检报告主表 t2 inner join 成品有出厂检验 t1 on t1.编号=t2.编号 where t2.生产日期_开始= \'" & e.PostValues("scrq") & "\'"
            
            Dim dt As DataTable= cmd.ExecuteReader
            If e.PostValues.Count = 1 Then
                vals  = "|" & dt.GetComboListString("产品名称","生产日期_开始=\'" & e.PostValues("scrq") & "\'")
                Vars("scrq") = e.PostValues("scrq")
            ElseIf e.PostValues.Count = 2 Then
                Dim Filter As String = "生产日期_开始=\'" & e.PostValues("scrq") & "\' And 产品名称=\'" & e.PostValues("cpmc") & "\'"
                Vars("cpmc") = e.PostValues("cpmc")
                vals = "|" & Dt.GetComboListString("规格", Filter)
                
            End If
            
            e.WriteString(vals)
            
    End Select
    
End If

[此贴子已经被作者于2021/9/27 9:33:52编辑过]

--  作者:aidimeng
--  发布时间:2021/9/27 9:41:00
--  
十分感谢,我理解下
--  作者:aidimeng
--  发布时间:2021/9/27 12:52:00
--  

按上面的语句做了修改,

 

点击查询后 不出报告,界面一直不动,但  Functions.AsyncExecute("baogao") 执行了,但没有推送报告

 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档 (2).txt

[此贴子已经被作者于2021/9/27 12:55:25编辑过]

--  作者:有点蓝
--  发布时间:2021/9/27 13:32:00
--  
baogao函数的代码?
--  作者:aidimeng
--  发布时间:2021/9/27 13:42:00
--  

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:函数.txt

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:新建文本文档 (3).txt

 

之前是直接打开pdf文件

 

我做了 跳转,现在得到的错误提示

 


 


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20210927134145.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2021/9/27 13:59:00
--  
                e.AsyncExecute = True
                Functions.AsyncExecute("baogao",e,r,e.PostValues("cpmc"),e.PostValues("gg") ,e.PostValues("scrq")  )

改为同步测试有没有问题

Functions.Execute("baogao",e,r,e.PostValues("cpmc"),e.PostValues("gg") ,e.PostValues("scrq")  )
去掉函数里e.Handled = True

另外函数里所有代码都必须在e.WriteBookAsPDF(Book)前处理,

……
Dim rz As DataRow=DataTables("webrz").AddNew
rz("日期")= Date.Now
rz("报告编号")= r("编号")
rz("品名")=CPMC 
rz("规格")=gg
rz("生产日期")=scrq 
DataTables("webrz").Save
e.WriteBookAsPDF(Book)

--  作者:aidimeng
--  发布时间:2021/9/27 14:12:00
--  

修改了 还是不行

我测试了下

 


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20210927140929.png
图片点击可在新窗口打开查看

 


 


图片点击可在新窗口打开查看此主题相关图片如下:微信截图_20210927140402.png
图片点击可在新窗口打开查看

  Case "Reports\\bg"
 
            Dim cmd As new SQLCommand
            cmd.C
            cmd.CommandText= "s   elect t1.编号,t1.单据状态,t1.报告类型,t2.产品名称,t2.规格,t1.生产日期_开始 as 生产日期,t1.批次,t1.结论,t1.质检员,t1.制单,t1.审核,t1.批准 from 质检报告主表 t1  ,成品有出厂检验 t2  where   t1.编号= t2.编号 and t1.生产日期_开始=\'"& e.PostValues("scrq") &"\' And t2.产品名称=\'"& e.PostValues("cpmc") &"\' And t2.规格=\'"& e.PostValues("gg") &"\'"
            \'cmd.CommandText=sql
           MessageBox.Show(cmd.CommandText)
            Dim dtt As DataTable= cmd.ExecuteReader
            If dtt.DataRows.count>=1 Then
               
                Dim r As DataRow= dtt.DataRows(0)
                e.AsyncExecute = True
                \'Functions.AsyncExecute("baogao",e,r,e.PostValues("cpmc"),e.PostValues("gg") ,e.PostValues("scrq")  )
Functions.Execute("baogao",e,r,e.PostValues("cpmc"),e.PostValues("gg") ,e.PostValues("scrq")  )

            End If
        Case Else
            e.AsReportServer("Reports/")
    End Select
e.PostValues("scrq")  这些都没有值


--  作者:有点蓝
--  发布时间:2021/9/27 14:15:00
--  
去掉e.AsyncExecute = True

还不行就上传实例测试

--  作者:aidimeng
--  发布时间:2021/9/27 15:01:00
--  

问题就出在

t1.生产日期_开始=\'"& e.PostValues("scrq") &"\' And t2.产品名称=\'"& e.PostValues("cpmc") &"\' And t2.规格=\'"& e.PostValues("gg") &"\'"

e.PostValues("") 都没有数值, 在e.PostValues.Count <>0 Then 时 用全局变量来赋值的话  

Vars("sql")="s   elect t1.编号,t1.单据状态,t1.报告类型,t2.产品名称,t2.规格,t1.生产日期_开始 as 生产日期,t1.批次,t1.结论,t1.质检员,t1.制单,t1.审核,t1.批准 from 质检报告主表 t1  ,成品有出厂检验 t2  where   t1.编号= t2.编号 and t1.生产日期_开始=\'"& e.PostValues("scrq") &"\' And t2.产品名称=\'"& e.PostValues("cpmc") &"\' And t2.规格=\'"& e.PostValues("gg") &"\'"

 

后面直接使用 Vars("sql")= 就没问题