以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  程序发生无法处理的异常错误  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=95135)

--  作者:kgdce
--  发布时间:2017/1/11 2:00:00
--  程序发生无法处理的异常错误
发生无法处理的异常错误
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20170111015327.png
图片点击可在新窗口打开查看

 Dim arys1 As List(of String) = DataTables(cmb1.text).GetValues(zd1(cmbdx(0).text)) \'记录第一分组列下有多少个不同值
    Dim uuu As Integer = arys1.count-1
    For kkk As Integer = val To 999+ val
        If kkk > uuu Then
            Return
        End If
        Dim na As String = arys1(kkk)
   \'For Each na As String In arys1  

(如果只是运行时建立1000个表,程序能正常,再多时就会出现图片上的错误。关闭程序后可以再次运行这个集合下一个1000多个表,通过反复关闭程序后再运行不会出现错误,就是不能一次全部运行完,也就是如arys1这个集合只有1000个元素是可以的,但多了就会出错,关闭程序分批计算不会出错)
        \'建一个临时表,每一个表就作一个图
        Dim dtb As New DataTableBuilder("作图")
        dtb.AddDef(hg1, Gettype(String), 32)
        For Each nayy1 As String In nay
            dtb.AddDef(nayy1, Gettype(Single))
        Next
        dtb.build
        Dim huh As String=""
        Dim drs As new List(of DataRow)
        drs = DataTables(cmb1.text).Select("[" & hg1 & "]=\'" & na & "\'")
        For Each dr As DataRow In  drs
            Dim r As Row = Tables("作图").AddNew
            r(hg1) = dr(hg19)
            For Each na1 As String In nay
                r(na1) = dr(na1) \'作图表中加选择的列的数据
            Next
            If huh =""  And hg20 <> "" Then
                huh = dr(tyt)
            End If
        Next


--  作者:有点蓝
--  发布时间:2017/1/11 8:55:00
--  
代码不完整,分析不了问题。上例子看看


https://zhidao.baidu.com/question/567819397.html

--  作者:有点色
--  发布时间:2017/1/11 9:13:00
--  

1、做个例子上来测试;

 

2、为什么要建1000个表那么变态啊,你代码肯定有问题。


--  作者:kgdce
--  发布时间:2017/1/11 16:41:00
--  
这个是实例,试试看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:测试.foxdb


--  作者:有点色
--  发布时间:2017/1/11 17:14:00
--  

 根本就不需要生成一个表,你这样做是多余的。

 

 如果要画图,你可以直接弄。请直接说你要做什么,做个实例上来。


--  作者:kgdce
--  发布时间:2017/1/11 21:06:00
--  
第一,我的代码没问题,但是程序运行有问题,出现了错误,就这个问题本身值得研究。
第二,换一种方式可以解决问题,可以不需要生成一个表,但是这样的话我的程序的通用性会差,对不同表,都按要求生成临时表,再根据临时表运用函数生成图,这是一种设计思路。
还是希望用第一种方式,就要弄清楚为什么在运行1000多次循环后就会错误?另外,不要纠结能不能换一种思路解决问题,而是针对给出的测试例子,已证明代码没有问题,为什么程序还会报错,在这里进行研究会更有意义?因为在设计程序时不知道用何种代码或思路能保证程序能正常运行,按理说只要依据FT的规则编写的代码都应该能正常运行才对。

[此贴子已经被作者于2017/1/11 23:02:49编辑过]

--  作者:有点色
--  发布时间:2017/1/12 2:44:00
--  

那你就不要循环build表格。

 

Dim arys1 As List(of String) = DataTables("测试").GetValues("考号") \'记录第一分组列下有多少个不同值
Dim nb As new List(of String)
nb.add("A等级")
nb.add("B等级")
nb.add("C等级")
nb.add("D等级")
Dim shu1 As Integer =0

\'建一个临时表,每一个表就作一个图
Dim dtb As New DataTableBuilder("作图")
dtb.AddDef("考号", Gettype(String), 32)
dtb.AddDef("成绩", Gettype(Single))
dtb.build

For Each na As String In arys1
    Tables("作图").DataTable.DataRows.Clear
    Dim drs As new List(of DataRow)
    drs = DataTables("测试").Select("[考号]=\'" & na & "\'")
    For Each dr As DataRow In  drs
        Dim r As Row = Tables("作图").AddNew
        For i As Integer =0 To 3
            r("成绩") = dr(nb(i))
        Next
    Next
    shu1 =shu1+1
    If shu1 = 1100 Then
        messagebox.show("已执行1100次")
        Return
    End If
    \'运行1000多次就会出错
    \'对形成的每一个临时表,进行第二部分工作,也就是3000多个学生作3000多个图,所以生成3000多个临时表
    \'Functions.Execute("ldtzcgths") \'这个是作图函数
Next
messagebox.show("已完成作图!")


--  作者:kgdce
--  发布时间:2017/1/12 10:16:00
--  
的确是这样,不能反复生成临时表,如果反复生成,就会出现问题,这在编程设计时应注意的问题,从某种程度上来说,也是FT的bug.
--  作者:兰天
--  发布时间:2017/1/12 11:05:00
--  
越用你会发现这样的问题越多,有时非常符合FT的编码规则,但程序就是报错,官方也不怎么解决或者解决不了(尤其并不是每次均报错)
[此贴子已经被作者于2017/1/12 11:05:36编辑过]

--  作者:有点色
--  发布时间:2017/1/12 11:07:00
--  
以下是引用兰天在2017/1/12 11:05:00的发言:
越用你会发现这样的问题越多,有时非常符合FT的编码规则,但程序就是报错,官方也不怎么解决或者解决不了

 

重复new和重复build,这个本身,就是非常错误的做法,本来几秒钟完成的事,增加几十倍时间和几十倍内存,连电脑都看不下去所以报错了。