以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  请老师指导:取销售出库日期作为应收表的列名,谢谢!  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=132725)

--  作者:sbfqpidt
--  发布时间:2019/3/28 14:35:00
--  请老师指导:取销售出库日期作为应收表的列名,谢谢!
Dim ds As List(Of String)
ds = DataTables("销售出库单_基本信息_T_SAL_OUTSTOCK").GetValues("FDATE")   \'取销售出库主表日期列的不重复的值

For Each d As Date In ds
    Dim y As String = d.Year
    Dim m As String = d.Month
    Dim liename As String = "月份_" & y & m
    MessageBox.Show(1)
    For Each dc As DataCol In DataTables("应收表").DataCols   \'找出应收表所有列名
        If liename <> dc.name  Then    \'如果没有新列,则增加此数据列\'
            
            MessageBox.Show(2)
            Dim Builder As New ADOXBuilder
            Builder.Open() \'打开ADOXBuilder
            With Builder.Tables("应收表")
                
                .AddColumn(liename ,ADOXType.Double) \'增加双精度型列
                
                MessageBox.Show(3)
            End With
            Builder.Close() \'关闭ADOXBuilder
            
            
        End If
    Next
Next

在这里出了错误 :MessageBox.Show(3),错误提示如下:

.NET Framework 版本:2.0.50727.8937
Foxtable 版本:2018.10.9.1
错误所在事件:表,韩婷应收表, DataColChanged
详细错误信息:
调用的目标发生了异常。
在对应所需名称或序数的集合中,未找到项目。

--  作者:y2287958
--  发布时间:2019/3/28 14:55:00
--  
"FDATE"是否存在空值或者其他不合规的数据
最好上例子

--  作者:有点甜
--  发布时间:2019/3/28 15:04:00
--  

Dim ds As List(Of String)
ds = DataTables("销售出库单_基本信息_T_SAL_OUTSTOCK").GetValues("FDATE")   \'取销售出库主表日期列的不重复的值


For Each d As Date In ds
    Dim y As String = d.Year
    Dim m As String = d.Month
    Dim liename As String = "月份_" & y & m
    MessageBox.Show(1)
    If DataTables("应收表").DataCols.Contains(liename) = False Then
        MessageBox.Show(2)
        Dim Builder As New ADOXBuilder
        Builder.Open() \'打开ADOXBuilder
        With Builder.Tables("应收表")
           
            .AddColumn(liename ,ADOXType.Double) \'增加双精度型列
           
            MessageBox.Show(3)
        End With
        Builder.Close() \'关闭ADOXBuilder              
    End If
Next


--  作者:客人
--  发布时间:2019/3/28 15:49:00
--  
老师,还是不能
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:取销售出库日期不重复值为应收表的列名.zip

行.
--  作者:有点甜
--  发布时间:2019/3/28 16:22:00
--  

1、代码没问题;

 

2、需要关闭重新打开项目才能看懂新增的列;或者卸载表重新加载表后才能看到

 

Dim ds As List(Of String)
ds = DataTables("销售出库单_基本信息_T_SAL_OUTSTOCK").GetValues("FDATE")   \'取销售出库主表日期列的不重复的值

For Each d As Date In ds
    Dim y As String = d.Year
    Dim m As String = d.Month
    Dim liename As String = "月份_" & y & m
    MessageBox.Show(1)
    If DataTables("应收表").DataCols.Contains(liename) = False Then
        MessageBox.Show(2)
        Dim Builder As New ADOXBuilder
        Builder.Open() \'打开ADOXBuilder
        With Builder.Tables("应收表")
           
            .AddColumn(liename ,ADOXType.Double) \'增加双精度型列
           
            MessageBox.Show(3)
        End With
        Builder.Close() \'关闭ADOXBuilder
       
    End If
Next

DataTables.unload("应收表")
DataTables.load("应收表")


--  作者:sbfqpidt
--  发布时间:2019/3/28 19:22:00
--  
也可能是数据量大吧,总是出问题.
也可能与其他功能结合起来了,相抵触吧。
可是,工作确实需要这种作法呀。
图片点击可在新窗口打开查看此主题相关图片如下:错误2.png
图片点击可在新窗口打开查看

谢谢老师帮忙查问题!

--  作者:sbfqpidt
--  发布时间:2019/3/28 19:23:00
--  
补附件,
--  作者:有点甜
--  发布时间:2019/3/28 22:21:00
--  

1、不要写到afterEdit事件。

 

2、单独做一个按钮测试,用上传的实例测试。如果出错,把实例发上来。


--  作者:sbfqpidt
--  发布时间:2019/4/2 8:15:00
--  
不好意思!这两天在外出差。
老师:经验丰富,指导得很细心!
我:羡慕!嫉妒!恨呀!
谢谢老师!
[此贴子已经被作者于2019/4/2 8:17:33编辑过]

--  作者:sbfqpidt
--  发布时间:2019/4/3 12:32:00
--  
老师好:


\'\'根据新增日期,自动增加月份数据列

Dim ds As List(Of String)
ds = DataTables("销售出库单_基本信息_T_SAL_OUTSTOCK").GetValues("FDATE")   \'取销售出库主表日期列的不重复的值

For Each d As Date In ds
    Dim y As String = d.Year
    Dim m As String = d.Month
    Dim liename As String = "月份_" & y & Format(m,"00")
    \'\'MessageBox.Show(1)
    If DataTables("应收表").DataCols.Contains(liename) = False Then
       \'\' MessageBox.Show(2)
        Dim Builder As New ADOXBuilder
        Builder.Open() \'打开ADOXBuilder
        With Builder.Tables("应收表")
        \'\' MessageBox.Show(3)    \'\'在这两个之间出了问题
            .AddColumn(liename ,ADOXType.Double) \'增加双精度型列
            
           \'\' MessageBox.Show(4)   \'\'在这两个之间出了问题
        End With
        Builder.Close() \'关闭ADOXBuilder
        
    End If
Next

DataTables.unload("应收表")
DataTables.load("应收表")
DataTables("应收表").Save()

\'追加客户\'
Dim vals As List(Of String)
vals = DataTables("销售出库单_基本信息_T_SAL_OUTSTOCK").GetValues("FCUSTOMERID")
For Each val As String In vals
    For i As Integer = 0 To Vals.Count - 1
        Dim dr As DataRow = DataTables("应收表").Find("客户ID=\'" & Vals(i) & "\' ")    \'And 客户=\'" & Vals(i)(1) & "\' \'
        If dr Is Nothing Then  \'如果没有找到
            dr = DataTables("应收表").AddNew()   \'新增一行\'
            
            dr("客户ID") = Vals(i)
        End If
    Next
Next

DataTables("应收表").Save()
[此贴子已经被作者于2019/4/3 12:35:52编辑过]