以文本方式查看主题 - 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服务找不到报错位置
写了个简单的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") 执行了,但没有推送报告
[此贴子已经被作者于2021/9/27 12:55:25编辑过]
|
||||||||
-- 作者:有点蓝 -- 发布时间:2021/9/27 13:32:00 -- baogao函数的代码? |
||||||||
-- 作者:aidimeng -- 发布时间:2021/9/27 13:42:00 --
之前是直接打开pdf文件
我做了 跳转,现在得到的错误提示
![]() ![]() |
||||||||
-- 作者:有点蓝 -- 发布时间: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 -- 修改了 还是不行 我测试了下
Case "Reports\\bg" End If |
||||||||
-- 作者:有点蓝 -- 发布时间: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")= 就没问题
|