以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  找不到行,提示未将对象引用设置到对象的实例  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=99405)

--  作者:zhangjian222200
--  发布时间:2017/4/18 21:51:00
--  找不到行,提示未将对象引用设置到对象的实例
\'筛选验证
Dim e As RequestEventArgs = args(0)                             \'验证页面(注册第2页)
Select Case e.Path
    Case "p_tayaoqingshaixyz.htm"
        Dim wb As New weui
        
        Dim drshouj As String = e.Cookies("isj")  \'从cookie取用户手机
        Dim dr As DataRow
        If drshouj <> "" Then
           dr = DataTables("会员资料").sqlFind("[会员编号] = \'" & drshouj & "\'")
           msgbox(drshouj)   \'这里执行了,显示了手机号18961309989
           msgbox("我的手机号:" & dr("手机"))  ’这里没有执行,提示未将对象引用设置到对象的实例。
                                                                  ’“会员资料”表、“会员编号”列都是存在的,18961309989行存在,咋回事?看了很久                                                                     ’都没有找到原因,麻烦看看
        Else
           msgbox("您尚未登录!")
        End If
        
        Dim qis As String = e.PostValues("isr1") \'验证起始日期   \'测试代码:msgbox(e.PostValues("isr"))
        Dim qisrq As Date  \'定义起始日期(转换后可用的内容)
        Date.TryParse(qis, qisrq)
        Dim qis_y As Integer = qisrq.Year
        Dim qis_m As Integer = qisrq.Month
        Dim qis_d As Integer = qisrq.Day
        
        Dim jiez As String = e.PostValues("isr2") \'验证截至日期
        Dim jiezrq As Date  \'定义起始日期(转换后可用的内容)
        Date.TryParse(jiez, jiezrq)
        Dim jiez_y As Integer = jiezrq.Year
        Dim jiez_m As Integer = jiezrq.Month
        Dim jiez_d As Integer = jiezrq.Day
        
        Dim bjy As Integer = jiez_y - qis_y  \'比较年
        Dim bjm As Integer = jiez_m - qis_m  \'比较月
        Dim bjd As Integer = jiez_d - qis_d  \'比较日
        
        If qis <> "" AndAlso jiez <> "" Then  \'当2个表格都填写了的时候(比较年份)
            If bjy < 0 Then
                e.WriteString("截止日期必须大于起始日期!")
                Return ""
            End If
        End If
        
        If qis <> "" AndAlso jiez <> "" Then  \'当2个表格都填写了的时候(比较月份)
            If bjy = 0 AndAlso bjm < 0 Then
                e.WriteString("截止日期必须大于起始日期!")
                Return ""
            End If
        End If
        
        If qis <> "" AndAlso jiez <> "" Then  \'当2个表格都填写了的时候(比较日期-天)
            If bjy = 0 AndAlso bjm = 0 AndAlso bjd < 0 Then
                e.WriteString("截止日期必须大于起始日期!")
                Return ""
            End If
        End If
        
        msgbox(33)
        If dr IsNot Nothing Then
            dr("TA邀请_起始日期") = e.PostValues("isr1") \'保存起始日期   \'测试代码:msgbox(e.PostValues("isr"))
            dr("TA邀请_截止日期") = e.PostValues("isr2") \'保存截止日期
            dr.save()
            msgbox(44)
        Else
            msgbox("保存失败!请登录后,再使用会员中心-TA邀请筛选功能!")  ’执行了这里
        End If
        \'With wb.AddMsgPage("","msgpage","注册成功", "本地自助服务,为您婚恋交友之路保驾护航") \'生成成功提示页
        \'.AddButton("btn1","完善资料","/fillout.htm")
        \'End With
        msgbox(55)
        wb.InsertHTML("<meta http-equiv=\'Refresh\' c>") \'那么直接跳转到会员中心,他邀请页面
        e.WriteString(wb.Build) \'生成网页
End Select

--  作者:wyz20130512
--  发布时间:2017/4/18 21:56:00
--  
这种报错,一般是你引用的对象为空值。

对SQLFind()方法找到的行,要进行一个判断

If dr IsNot Nothing Then


End If
[此贴子已经被作者于2017/4/18 21:59:29编辑过]

--  作者:有点色
--  发布时间:2017/4/19 8:42:00
--  

1、你使用的是sqlFind方法,你新增的行,如果没有save的话,是查不到其值的。

 

2、有可能你的查询条件不正确,确实是没有符合的行(比如多了空格之类的、特殊字符之类的)

 

3、你对dr要进行判断,找到或者没找到。


--  作者:zhangjian222200
--  发布时间:2017/4/19 10:01:00
--  
测试账户:18961305239 密码:222222
登录网址:http://127.0.0.1/login.htm

弄了很久还是没搞定,还请瞧瞧
sqlfind使用很好的:登录后自动跳转到首页。在首页底部,任意点击按钮“查看TA的资料”,将进入details.htm,这个details.htm就使用了sqlfind,使用很好

sqlfind使用不成功:但是如果在首页/index.htm,点击页面底部“筛选设置”,进入/index_shaix.htm,填入内容,然后执行验证和保存是在:/index_shaixyz.htm,这个页面的sqlfind用法一样,找不到手机所在行

这是项目文件夹:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:langwo(2017-4-19).rar
这是web文件夹:
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:web(2017-4-19).rar
这是web文件夹根目录下的图片文件夹(因文件大,拆开上传,这里只有展示照,删除了生活照)
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:201704(2017-4-19).rar
[此贴子已经被作者于2017/4/19 10:02:23编辑过]

--  作者:有点色
--  发布时间:2017/4/19 10:41:00
--  

 回复4楼,测试没问题。请认认真真测试。

 

 而且不要每次都sqlfind对应的数据。你登录只有,应该使用cookie保存用户的所有信息的才对。


--  作者:zhangjian222200
--  发布时间:2017/4/19 10:57:00
--  
回楼上,你测试,下面代码中msgbox(44),执行了吗?
Dim e As RequestEventArgs = args(0)                             \'首页筛选验证页面
Select Case e.Path
    Case "index_shaixyz.htm"
        Dim wb As New weui
        
        Dim drshouj As String = e.Cookies("isj")  \'从cookie取用户手机
        Dim dr As DataRow = DataTables("会员资料").sqlFind("会员编号 = \'" & drshouj & "\'")
        msgbox(11)
        Dim zuixnl As String = e.PostValues("zxnl") \'验证最小年龄   \'测试代码:msgbox(e.PostValues("isr"))
        Dim zuidnl As String = e.PostValues("zdnl") \'验证最大年龄
        
        If zuidnl < zuixnl Then
            msgbox(22)
            e.WriteString("最大年龄必须大于最小年龄!")
            Return ""
        End If
        
        msgbox(33)
        If dr IsNot Nothing Then
            dr("首页筛选_最小年龄") = e.PostValues("zxnl") \'验证最小年龄   \'测试代码:msgbox(e.PostValues("isr"))
            dr("首页筛选_最大年龄") = e.PostValues("zdnl") \'验证最大年龄
            dr("首页筛选_TA的学历") = e.PostValues("tdxl") \'验证TA的学历
            dr("首页筛选_婚姻状况") = e.PostValues("hyzk") \'验证婚姻状况
            dr.save()
            msgbox(44)  
        Else
            msgbox("保存失败!请登录后,再使用首页筛选功能!")
        End If
        \'With wb.AddMsgPage("","msgpage","注册成功", "本地自助服务,为您婚恋交友之路保驾护航") \'生成成功提示页
        \'.AddButton("btn1","完善资料","/fillout.htm")
        \'End With
        msgbox(55)
        wb.InsertHTML("<meta http-equiv=\'Refresh\' c>") \'那么直接跳转到登录页面
        e.WriteString(wb.Build) \'生成网页
End Select

--  作者:有点色
--  发布时间:2017/4/19 11:59:00
--  

 你查询的是 会员编号,你的会员编号存放的不是手机号啊。改成

 

 Dim dr As DataRow = DataTables("会员资料").sqlFind("手机 = \'" & drshouj & "\'")