Foxtable(狐表)用户栏目专家坐堂 → 这段通用代码有什么问题


  共有15965人关注过本帖树形打印复制链接

主题:这段通用代码有什么问题

帅哥哟,离线,有人找我吗?
狐狸爸爸
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 11:03:00 [只看该作者]

以下是引用blackzhu在2011-12-2 10:52:00的发言:

     我昏过去了.还是一样.

但是表单退出的事件里我有这个代码Ddatatable(e.form.name).Save(),按保存,也会提示没有窗口表.

   我晕死了.

 

 

呵呵,提示没有,那就是没有,系统不会欺骗你。

感觉你只是在写代码而已,没有丝毫调试的过程。

 

自己搞定吧,其实这没有什么难度可言的。

 

可以代码中加入一行判断一下:

 

MessageBox.Show(DataTables.Contains(e.Form.Name)

 

看看有没有名称等于你窗口名称的DataTable即可。

 

如果没有,那么保持窗口打开的情况下,在命令窗口执行:

 

for each dt as DataTable in DataTable

    output.show(dt .name )

next

 

看看都有写什么名称的DataTable

 

关于窗口中DataTable的名称,细看:

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

 

如果不是Normal型,而是SQLTable或者SQLQuery,但是要使用DataTable,应该是:

Tables("窗口1_Table1").DataTable.

 

 

 

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 11:11:00 [只看该作者]

下面的用法是很奇怪的:

DataTablese(e.Form.name)

除非你窗口名称和表的名称一致,否则一定出错。


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  23楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 11:22:00 [只看该作者]

表和窗口的名字一样的,老大我知道问题所在了.Tables("窗口1_Table1").DataTable就是这个

 

 

 

 

如果不是Normal型,而是SQLTable或者SQLQuery,但是要使用DataTable,应该是:

Tables("窗口1_Table1").DataTable.

  老大 我全改成  Tables("窗口1_Table1").DataTable  行不行?三个类型的.

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 11:29:00 [只看该作者]

如果Table控件是SQLTable或者SQLQuery,而且你确实要调用的是这个Table控件对应的DataTable,那么肯定可以:
Tables("窗口1_Table1").DataTable.
 


 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  25楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 11:47:00 [只看该作者]

明白,应该是这个问题,因为有的窗口表是sqltable有的是普通的副本表.

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  26楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 11:56:00 [只看该作者]

If e.Sender.Text = "保存单据" Then
    If Tables(e.form.Name).Rows.Count>0 Then
        Tables(e.form.Name).Current("修改人") = _UserName
        Tables(e.form.Name).Current("修改时间") = Date.Now()
        Tables(e.form.Name).DataTable.Save()
        Dim nm As String = e.form.Name & "_Table1"
        For Each t1 As Table In Tables
            If t1.Name.Contains(nm)= True Then
            ElseIf Tables(nm).DataTable.DataRows.Count>0 Then
                Tables(nm).DataTable.Save
                Dim t As Table = Tables(nm)
                With Tables(e.form.Name)
                    If .Current Is Nothing Then
                        t.Filter = "False"
                    Else
                        t.Filter = "系统单号 = '" & .Current("系统单号") & "'"
                    End If
                End With
            End If
        Next
    End If
End If
  我改成这样还是提示这个问题:

 

 


图片点击可在新窗口打开查看此主题相关图片如下:tm截图未命名.jpg
图片点击可在新窗口打开查看

 

这个提示是表单没有表控件.

[此贴子已经被作者于2011-12-2 11:57:14编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  27楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 11:59:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:未命名-2.jpg
图片点击可在新窗口打开查看

 


这个提示是表单有Normal型副本表.

 

 

还有一个表单是SQLTable的类型的没有提示.正确执行!

[此贴子已经被作者于2011-12-2 11:59:53编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
狐狸爸爸
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251054 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 12:15:00 [只看该作者]

之前是我直接复制你的代码,没有细看,改得不彻底。

下面这样,绝对不会出错了:

 

If e.Sender.Text = "保存单据" Then
    If Tables(e.form.Name).Rows.Count>0 Then
        Tables(e.form.Name).Current("修改人") = _UserName
        Tables(e.form.Name).Current("修改时间") = Date.Now()
        Tables(e.form.Name).DataTable.Save()
        Dim nm As String = e.form.Name & "_Table1"
        If DataTables.Contains(nm)= False  Then
            messagebox.show("不存在名为""" & nm & """的表")
        ElseIf DataTables(nm).DataRows.Count>0 Then
            DataTables(nm).Save
            Dim t As Table = Tables(nm)
            With Tables(e.form.Name)
                If .Current Is Nothing Then
                    t.Filter = "False"
                Else
                    t.Filter = "系统单号 = '" & .Current("系统单号") & "'"
                End If
            End With
        Else
            messagebox.show("表""" & nm & """的行数等于0")
        End If
    End If
End If

 

至于副本型的Table,其对应的DataTable就是其绑定的DataTable,例如他绑定到订单表,就是:

DataTables("订单")

不是:

DataTables("窗口1_Table1")

 

 

[此贴子已经被作者于2011-12-2 12:39:33编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  29楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 12:59:00 [只看该作者]

副本型的也是DataTables("订单"),不是吧,副本型不是一直是Tables("窗口1_Table1")?

 回到顶部
帅哥哟,离线,有人找我吗?
blackzhu
  30楼 | QQ | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:狐仙 帖子:9875 积分:57590 威望:0 精华:15 注册:2008/9/1 9:45:00
  发帖心情 Post By:2011/12/2 13:03:00 [只看该作者]

老大这个代码不就是前面的代码吗?这样一改就变成了找不到"窗口_Table1"的datatable了.

 回到顶部
总数 32 上一页 1 2 3 4 下一页