以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]如何提前生成临时表(已解决)  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=14812)

--  作者:yyzlxc
--  发布时间:2011/12/3 9:41:00
--  [求助]如何提前生成临时表(已解决)

思路:一段按钮代码,打开存款明细表,生成临时表ckmx,然后在存款明细表的DataColChanged事件中,使用代码从ckmx表中取值,并填充到存款明细表的db列和zr列。

问题:点击按钮后,可以打开存款明细表,但是弹出错误提示:

 

 


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

 

原因分析:先运行DataColChanged事件中的代码,然后生成临时表,造成DataColChanged事件中的取值代码找不到ckmx表的错误。

 

如何待临时表生成后,再执行DataColChanged事件中的取值代码,请各位老师指教,谢谢!!

 

 

按钮代码:

MainTable = Tables("存款明细")
Tables("存款明细").Sort = "年月,db,编号"
Tables("存款明细").AutoSizeCols()
\'生成临时表
If MainTable.Name = "存款明细" Then
    Dim dtb As New DataTableBuilder("ckmx")
    dtb.AddDef("bh", Gettype(String), 16)
    dtb.Build()
    DataTables("ckmx").Fill("Select bh,xm,db,zr From {DA_JBXX} WHERE Left(zr,4) >= 2007","jg",False)
End If

 

DataColChanged事件中的取值代码:

\'填充db
Select Case e.DataCol.Name
    Case "编号"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("编号") Then
            dr("db") = Nothing
        Else
            Dim filter As String
            filter = "bh = \'" & dr("编号") & "\'"
            pr = DataTables("ckmx").Find(filter)
            If pr IsNot Nothing Then
                dr("db") = pr("db")
            Else
                dr("db") = Nothing
            End If
        End If
End Select
\'填充zr
Select Case e.DataCol.Name
    Case "编号"
        Dim dr As DataRow = e.DataRow
        Dim pr As DataRow
        If dr.IsNull("编号") Then
            dr("zr") = Nothing
        Else
            Dim filter As String
            filter = "bh = \'" & dr("编号") & "\'"
            pr = DataTables("ckmx").Find(filter)
            If pr IsNot Nothing Then
                dr("zr") = pr("zr")
            Else
                dr("zr") = Nothing
            End If
        End If
End Select

[此贴子已经被作者于2011-12-3 10:07:49编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/12/3 9:48:00
--  

项目事件AfterOpenProject加上这一段:

 

Dim dtb As New DataTableBuilder("ckmx")
dtb.AddDef("bh", Gettype(String), 16)
dtb.Build()
DataTables("ckmx").Fill("Select bh,xm,db,zr From {DA_JBXX} WHERE Left(zr,4) >= 2007","jg",False)

 


MainTableChanged事件代码可以删除。

 

另外建议看看:

http://www.foxtable.com/help/topics/0695.htm

http://www.foxtable.com/help/topics/1279.htm

 


--  作者:yyzlxc
--  发布时间:2011/12/3 10:07:00
--  
谢谢狐爸老师的指教,问题解决了,并给出最佳方案,再次衷心感谢!!