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


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

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

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 9:13:00 [显示全部帖子]

你先追踪一下,看看问题出在哪一行代码吧。

 

另外,不可以更简单吗:

For Each t As Table In Tables

   If t.Name = e.form.Name & "_Table1" Then

          '.....

   End if

Next

 

 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 9:27: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()

        Messagebox.Show(“保存1”)
        For Each t1 As Table In Tables
            If t1.Name = e.form.Name & "_Table1" Then
                If DataTables(e.form.Name & "_Table1").DataRows.Count>0 Then
                    DataTables(e.form.Name & "_Table1").Save

                     Messagebox.Show(“保存2”) 
                End If
                Dim t As Table = Tables(e.form.Name & "_Table1")
                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

MessageBox.show(Tables(e.form.Name).DataTable.HasChanges)
MessageBox.show(Tables(e.form.Name & "_Table1")).DataTable.HasChanges)


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 9:44:00 [显示全部帖子]

保存1和保存2没有显示,说明你的代码根本没有执行。

代码是机械的,从来不会偏离轨道,条件成立就一定会执行。

 

既然没有执行,说明下面两个条件不成立:

 

If e.Sender.Text = "保存单据" Then
    If Tables(e.form.Name).Rows.Count>0 Then

 

我想你自己可以知道原因了,前面来两行:

 

messagebox.show(e.Sender.Text)

messageBook.Show(Tables(e.form.Name).Rows.Count)

 

就知道到底是那个条件不成立的了。

 

要搞清楚不同状态下Table的表名:

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

 

[此贴子已经被作者于2011-12-2 9:44:29编辑过]

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 10:08:00 [显示全部帖子]

即使存在,会显示一个“存在”,同时会显示很多个“不存在”。

你想一下,如果10个Table,有一个名称相符的,那么肯定还有9个名称不相符的,所以会显示1个“存在”,9个“不存在”。

如果名称全部不相符,就会显示10个“不存在”。

 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 10:17:00 [显示全部帖子]

你有10个Table的话,上面的遍历代码就会执行10次,最多显示一次“存在”,至少显示9次不存在。

 

你要判断某个Table是否存在,很简单:

 

If Tables.Contains("名称") Then
End If

 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 10:39: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)= 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
        Next
    End If
End If

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

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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望: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.

 

 

 

 

 

 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2011/12/2 11:11:00 [显示全部帖子]

下面的用法是很奇怪的:

DataTablese(e.Form.name)

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


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望: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.
 


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


加好友 发短信
等级:管理员 帖子:47477 积分:251256 威望: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编辑过]

 回到顶部
总数 12 1 2 下一页