以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  报错查不出来问题请指教  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=42839)

--  作者:sxqq123
--  发布时间:2013/11/23 17:23:00
--  报错查不出来问题请指教
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:家庭记帐本.zip


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

--  作者:Bin
--  发布时间:2013/11/23 17:41:00
--  
.
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:家庭记帐本.foxdb


--  作者:狐狸爸爸
--  发布时间:2013/11/23 17:42:00
--  

Dim dt As Date = e.DataRow("日期")
Dim dt1 As New Date(dt.Year, dt.Month, 1)
Dim dt2 As New Date(dt.Year, dt.Month, Date.DaysInMonth(dt.Year, dt.Month))
messagebox.Show(1)
If e.DataCol.name = "日期" Then
    If e.DataRow.IsNull("日期") = False
        Dim Filter As String
        Filter = "日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#"
        Tables("家庭帐本").Filter = Filter
    End If
End If
messagebox.Show(2)
Select Case e.DataCol.Name
    Case "金额"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        drs = e.DataTable.Select("记帐类别 = \'收入\' and 日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#","日期")
        If drs.Count = 1 Then
            e.DataRow("全月_收入")=e.DataRow("金额")
        ElseIf drs.count > 1 then
            drs = e.DataTable.Select("记帐类别 = \'收入\' and 日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#","日期")
            drs(0)("全月_收入") =  drs(0)("金额")
            For i As Integer = 1 To drs.Count-1
                drs(i)("全月_收入") = drs(i-1)("全月_收入") + drs(i)("金额")
            Next
        End If
End Select
messagebox.Show(3)
Select Case e.DataCol.Name
    Case "金额"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        drs = e.DataTable.Select("记帐类别 = \'收入\' and 日期 >= #" & dt.Year & "/1/1 # ","日期")
        If drs.Count = 1 Then
            e.DataRow("全年_收入")=e.DataRow("金额")
        ElseIf drs.count > 1
            drs = e.DataTable.Select("记帐类别 = \'收入\' and 日期 >= #" & dt.Year & "/1/1 # ","日期")
            drs(0)("全年_收入") = drs(0)("金额")
            For i As Integer = 1 To drs.Count-1
                drs(i)("全年_收入") = drs(i-1)("全年_收入") + drs(i)("金额")
            Next
        End If
End Select
messagebox.Show(5)
Select Case e.DataCol.Name
    Case "金额"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        drs = e.DataTable.Select("记帐类别 = \'支出 \' and 日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#","日期")
        If drs.Count = 1 Then
            e.DataRow("全月_支出")=e.DataRow("金额")
        ElseIf drs.count  > 1
            drs = e.DataTable.Select("记帐类别 = \'支出 \' and 日期 >= #" & dt1 & "# And 日期 <= #" & dt2 & "#","日期")
            drs(0)("全月_支出") = drs(0)("金额")
            For i As Integer = 1 To drs.Count-1
                drs(i)("全月_支出") = drs(i-1)("全月_支出") + drs(i)("金额")
            Next
        End If
End Select
messagebox.Show(4)
Select Case e.DataCol.Name
    Case "金额"
        Dim dr As DataRow
        Dim drs As List(of DataRow)
        drs = e.DataTable.Select("记帐类别 = \'支出 \' and 日期 >= #" & dt.Year & "/1/1 # ","日期")
        If drs.Count = 1 Then
            e.DataRow("全年_支出")=e.DataRow("金额")
        ElseIf drs.count > 1
            drs = e.DataTable.Select("记帐类别 = \'支出 \' and 日期 >= #" & dt.Year & "/1/1 # ","日期")
           
            drs(0)("全年_支出") = drs(0)("金额")
            For i As Integer = 1 To drs.Count-1
                drs(i)("全年_支出") = drs(i-1)("全年_支出") + drs(i)("金额")
            Next
        End If
End Select
messagebox.Show(6)
DataTables("家庭帐本").Save()


--  作者:狐狸爸爸
--  发布时间:2013/11/23 17:45:00
--  

1、你判断了drs.count等于1和不等于1,其实drs.count还有一种可能,就是等于0,也就是没有符合条件的行时,下面的代码肯定出错:

 

drs(0)("全年_支出") = drs(0)("金额")

 

2、提问的时候,最好假单描述一下:怎么操作或者在什么地方输入什么数据会出错

 

3、你已经开始调试代码,很好,不过这种调试,用messagebox.show比较合适,不应该用output.show,只有需要获取某些字符串,例如表达式的时候,才有outut.show,而且必须打开命令窗口才行。

4、其实这种问题很好解决,你自己的代码执行的时候,显示2之后没有显示3、4、5,说明2和3之间的代码有错,然后在2和3之间的关键代码之间加上messagebox.show,很快你就会发现出错的代码是:

            drs(0)("全月_收入") =  drs(0)("金额")

 

知道出错的代码,基本上就知道了原因,剩余的类似代码也一样修改过来就行。

 

实在搞不定,就贴出代码,或者做个例子发上来,告诉大家哪一行代码出错,出错的代码是什么。

[此贴子已经被作者于2013-11-23 18:13:03编辑过]