Foxtable(狐表)用户栏目专家坐堂 → web服务找不到报错位置


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

主题:web服务找不到报错位置

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


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
web服务找不到报错位置  发帖心情 Post By:2021/9/27 8:52:00 [只看该作者]

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

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

 1、非法路径

2、没有实例化对象等

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


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


加好友 发短信
等级:超级版主 帖子:76067 积分:385907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2021/9/27 9:41:00 [只看该作者]

十分感谢,我理解下

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


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2021/9/27 12:52:00 [只看该作者]

按上面的语句做了修改,

 

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

 

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

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

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


加好友 发短信
等级:超级版主 帖子:76067 积分:385907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/27 13:32:00 [只看该作者]

baogao函数的代码?

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


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By:2021/9/27 13:42:00 [只看该作者]

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

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

 

之前是直接打开pdf文件

 

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

 


 


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

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


加好友 发短信
等级:超级版主 帖子:76067 积分:385907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By: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")  这些都没有值


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


加好友 发短信
等级:超级版主 帖子:76067 积分:385907 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2021/9/27 14:15:00 [只看该作者]

去掉e.AsyncExecute = True

还不行就上传实例测试

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


加好友 发短信
等级:一尾狐 帖子:461 积分:4865 威望:0 精华:0 注册:2015/9/14 14:26:00
  发帖心情 Post By: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")= 就没问题

 


 回到顶部
总数 32 1 2 3 4 下一页