以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  偶尔出现的奇怪错误  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=7462)

--  作者:reachtone
--  发布时间:2010/6/25 10:35:00
--  偶尔出现的奇怪错误

项目中有个数据录入按钮,这个按钮中的事件没有任何问题,也一直是可以正常运行的,但如果离开一会(比如十几分钟),再回来单击这个按钮,就会出现这个错误:


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

这个问题,我这里有台机器经常出现,但其它的机器按同样的操作,无论怎么离开都正常。太奇怪了。。


--  作者:狐狸爸爸
--  发布时间:2010/6/25 10:38:00
--  
请列出此按钮的代码
--  作者:reachtone
--  发布时间:2010/6/25 10:42:00
--  
If e.Form.Controls("TextBox1").Value="" or e.Form.Controls("ComboBox1").Value="" or e.Form.Controls("ComboBox2").Value=""
    MessageBox.Show("设置不完整,系统无法进入数据录入维护状态! ","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning)
ElseIf Functions.Execute("Date",e.Form.Controls("DateTimePicker1").Value) = "Yes" Then   \'如果在软件的许可日期内
    Dim d as Date = e.Form.Controls("DateTimePicker1").Value
    Vars("Media") = e.Form.Controls("ComboBox2").Value    \'媒体名称
    e.Form.Controls("Label3").Text = "【" & d & "(" & e.Form.Controls("TextBox1").Value & "), " & Vars("Dq") & "-" & Vars("Media") & "】"
    Vars("Filter") = "区域=\'" & Vars("Dq") & "\' and 媒体名称=\'" & Vars("Media") & "\'"   \'条件
    \'得到媒体代码和异型比例
    Dim sql As String = "Select top 1 * from 采集_媒体列表 where " & Vars("Filter")
    Dim dt as DataTable = Functions.Execute("Data",sql)
    If dt.DataRows.Count = 0 Then
        MessageBox.Show("在系统设置中没有找到指定区域的对应媒体名称! ","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning)
        Return
    Else
        Vars("Mdc") = dt.datarows(0)("媒体代码")
        Vars("Jgxs") = dt.datarows(0)("异型加收")
    End If
    \'得到价格体系
    sql = "Select top 1 * from 采集_价格体系 where " & Vars("Filter") & " and 起<=\'" & d & "\' and 止>=\'" & d & "\'"
    dt = Functions.Execute("Data",sql)
    If dt.DataRows.Count = 0 Then
        MessageBox.Show("系统没有找到指定日期所对应的广告价格体系! ","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning)
        Return
    Else
        Vars("Price") = dt.datarows(0)("价格体系")
    End If
    \'生成广告类型列表
    sql = "Select distinct 广告类型 from 采集_广告类型 where " & Vars("Filter")
    Functions.Execute("Query",sql,"广告类型")
    \'加载数据
    e.Form.Controls("SplitContainer2").Visible = True
    StatusBar.Message2 = "正在加载数据, 请稍候...".PadLeft(30)
    Application.DoEvents
    DataTables("主窗口_Table2").LoadFilter = "日期=\'" & d & "\' and " & Vars("Filter")
    DataTables("主窗口_Table2").Load
    With Tables("_录入")
        .Cols("广告类型").ComboList = Vars("List")   \'改变设置广告类型列表
        .DataTable.LoadFilter = "日期=\'" & d & "\' and " & Vars("Filter") & " and " & Vars("Mtqx") & " and " & Vars("Hyqx") & " and " & Vars("Bmqx")
        .DataTable.Load
        .Filter = ""
        .AddNew()      \'增加行
        .OpenView("录入")
        .Select(.Current.Index,.Cols("版面叠次").Index)  \'将焦点移到table的当前行\\第一列上
        .Focus          \'将焦点移到table上
    End With
    StatusBar.Reset
    e.Form.Controls("NavBar1").NavPages(0).Enabled = False
End If

--  作者:狐狸爸爸
--  发布时间:2010/6/25 13:03:00
--  

dt = Functions.Execute("Data",sql)
If dt.DataRows.Count = 0 Then

 

改为:

 

dt = Functions.Execute("Data",sql)

if dt Is Nothing Then

   messagebox.show("有错误")

End If
If dt.DataRows.Count = 0 Then

 

另清除Catch看看

 

[此贴子已经被作者于2010-6-25 13:02:53编辑过]

--  作者:reachtone
--  发布时间:2010/6/25 13:06:00
--  

dt.DataRows.Count = 0 和 dt Is Nothing 应该没什么区别吧?

生成datatable的sql语句肯定是没问题的,所以问题应该不在这里。

[此贴子已经被作者于2010-6-25 13:07:48编辑过]

--  作者:狐狸爸爸
--  发布时间:2010/6/25 13:08:00
--  

如果dt is nothing,那么dt.datarows.count = 0,就会出错,两者完全不同的,前者是没有表,后者是有表,但是是一个空表。


--  作者:reachtone
--  发布时间:2010/6/25 13:10:00
--  
以下是引用狐狸爸爸在2010-6-25 13:08:00的发言:

如果dt is nothing,那么dt.datarows.count = 0,就会出错,两者完全不同的,前者是没有表,后者是有表,但是是一个空表。

问题不在这里,请看5楼编辑后的回复。

今天想再重复昨天的错误,却又怎么都不出现了,即使离开一个小时再单击此按钮也正常。


--  作者:blackzhu
--  发布时间:2010/6/25 13:57:00
--  快邮标签打印
以下是引用reachtone在2010-6-25 13:10:00的发言:

 

今天想再重复昨天的错误,却又怎么都不出现了,即使离开一个小时再单击此按钮也正常。

 老大, 电脑是偶尔搭错脑筋了,哈哈!


--  作者:mr725
--  发布时间:2010/6/25 15:50:00
--  
以下是引用reachtone在2010-6-25 13:10:00的发言:

问题不在这里,请看5楼编辑后的回复。

今天想再重复昨天的错误,却又怎么都不出现了,即使离开一个小时再单击此按钮也正常。

我常碰到这样的问题, 也许老大说的对,有些时候必须要按 foxtable 的规则吧····