以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]SQLCommand问题(还没解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=19144)

--  作者:mositu
--  发布时间:2012/4/28 16:55:00
--  [求助]SQLCommand问题(还没解决)
Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = sql
dt = cmd.ExecuteReader()
If dt.DataRows.Count=0 Then
MessageBox.Show("无数据")
Return
Else
Tables("资产折旧").StopRedraw
Tables("资产折旧").AddNew(dt.DataRows.Count)
End If
Dim i As Integer = 0
For Each dr As DataRow In dt.DataRows  
    Dim tr As Row = Tables("资产折旧").Rows(i)
    tr("编号")=dr("编号")
    tr("类别")=dr("类别")
    tr("名称")=dr("名称")
    tr("状态")=dr("状态")
    tr("折旧原值")=dr("原值")
    tr("残值率")=dr("残值率")
    tr("折旧月数")=dr("月数") 
    i=i+1
Next
省略前后代码了,运行没有出错,就是第一次运行所有列都显示出来了,第二次运行就只能出来一半,另一半行都是空白,总行数是对的,是什么原因,大胆推测一下是不是dt = cmd.ExecuteReader()需要时间,请教了
[此贴子已经被作者于2012-4-28 17:42:46编辑过]

--  作者:mr725
--  发布时间:2012/4/28 17:41:00
--  

你只能发项目让人检验后证明你这个问题存在了。

 


--  作者:小猪鑫鑫
--  发布时间:2012/4/28 20:44:00
--  
cmd.CommandText = sql
dt = cmd.ExecuteReader()
楼主:你的第一行的命令代码只有“sql”三个字符,没有内容啊
--  作者:小猪鑫鑫
--  发布时间:2012/4/29 8:49:00
--  

Dim cmd As New SQLCommand
Dim dt As DataTable
cmd.CommandText = sql
dt = cmd.ExecuteReader()
If dt.DataRows.Count>0 Then
For Each dr As DataRow In dt.DataRows  
    Dim tr As Row = Tables("资产折旧").addnew

    tr("编号")=dr("编号")
    tr("类别")=dr("类别")
    tr("名称")=dr("名称")
    tr("状态")=dr("状态")
    tr("折旧原值")=dr("原值")
    tr("残值率")=dr("残值率")
    tr("折旧月数")=dr("月数") 

next
   
else

   MessageBox.Show("无数据")
end if
楼主:因没原文件,所以没法测试,但你可以试一下这个


--  作者:mositu
--  发布时间:2012/4/29 10:01:00
--  

由于我把资产资料都录进去了,也属于公司机密吧,所以不方便上传项目,我的代码是基本上能显示一半行,一半行是空,总行数是对的,小猪鑫鑫的代码是只能显示最后一行,其他都是空的,总行数也是对的,(在此非常感谢小猪鑫鑫的无私帮助)。我有加了些判断,代码如下:

If dt.DataRows.Count>0 Then
Do While dt.DataRows(0)("编号") IsNot Nothing
For Each dr As DataRow In dt.DataRows  
    Dim tr As Row = Tables("资产折旧").addnew
    tr("编号")=dr("编号")
    tr("类别")=dr("类别")
    tr("名称")=dr("名称")
    tr("状态")=dr("状态")
    tr("折旧原值")=dr("原值")
    tr("残值率")=dr("残值率")
    tr("折旧月数")=dr("月数") 
        If tr.IsNull("编号") Then
        MessageBox.show("没有")
        End If
Next
Exit Do
Loop
   Else
   MessageBox.Show("无此店数据")
   Return
End If
结果还是一样,没有弹出提示,也没有弹出错误,只显示最后一行,其他行都是空的

[此贴子已经被作者于2012-4-29 10:13:04编辑过]

--  作者:mositu
--  发布时间:2012/4/29 10:17:00
--  
怎么看代码都没有问题,实际运行也没有弹出问题提示,但就是显示不了,会不会是软件的bug
--  作者:mr725
--  发布时间:2012/4/29 10:59:00
--  

检查一下其他与增加行有关的表事件中的代码·


--  作者:mositu
--  发布时间:2012/4/29 14:17:00
--  

在不断的增减代码的测试中发现是由于下面的一段代码导致的问题,这段代码在上面代码之后

Dim t As Table = Tables("资产折旧")
Dim g As SubtotalGroup
t.SubtotalGroups.Clear()
t.GroupAboveData = False
t.TreeVisible = True
t.SpillNode = True

g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "类别"
g.TotalOn = "原值,本月折旧,净值"
g.Caption = "{0} 小计"
t.SubtotalGroups.Add(g)

g = New SubtotalGroup
g.Aggregate = AggregateEnum.Sum
g.GroupOn = "*"
g.TotalOn = "原值,本月折旧,净值"
g.Caption = "总计"
t.SubtotalGroups.Add(g)

t.Subtotal()

 


--  作者:jianjingmaoyi
--  发布时间:2012/4/29 14:27:00
--  
上面的代码没有问题,如果做统计,你可以用查询表的sql语句试试.
--  作者:mositu
--  发布时间:2012/4/29 15:15:00
--  
原以为在代码最前面加上:Tables("资产折旧").ClearSubtotal 就可以了,还是不行,郁闷,烦不了