以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  这段通用代码有什么问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=14785)

--  作者:blackzhu
--  发布时间:2011/12/2 8:53:00
--  这段通用代码有什么问题

 

   是这样,我的表单有的有表控件,有的没有.


   原来这段代码我是遍历控件,判断table1控件是否存在?代码如下:

   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()
    End If
    For Each c As Winform.Control In e.Form.Controls
        If Typeof c Is WinForm.Table Then
            If e.form.ExistControl("Table1") =True Then
                If DataTables(e.form.Name & "_Table1").DataRows.Count>0 Then
                    DataTables(e.form.Name & "_Table1").Save
                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
        End If
    Next
End If
  但是提示,找不到Table1的控件.后来改成这样:

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()
        If e.form.ExistControl(e.form.Name & "_Table1") =True Then
            If DataTables(e.form.Name & "_Table1").DataRows.Count>0 Then
                DataTables(e.form.Name & "_Table1").Save
            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
    End If
End If
  这样是不提示了,但是窗口表不保存,是什么问题?

 


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

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

 

另外,不可以更简单吗:

For Each t As Table In Tables

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

          \'.....

   End if

Next

 

 


--  作者:blackzhu
--  发布时间:2011/12/2 9:18:00
--  
按你的方法可行.
--  作者:blackzhu
--  发布时间:2011/12/2 9:21: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()
        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
                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


--  作者:狐狸爸爸
--  发布时间: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)


--  作者:blackzhu
--  发布时间:2011/12/2 9:28:00
--  
我看看!
--  作者:blackzhu
--  发布时间:2011/12/2 9:37:00
--  

我用三个测试:第一个窗口表用的SQLTable   提示是连续的两个false.没有一点问题.保存1和保存2显示.我用fill加载,

 

                  第二个窗口表用的普通的表,是副本表,提示是连续的两个个ture,保存1和保存2没有显示.然后提示是找不到"付款单_Table1"的提示.这个是直接绑定的.

 

                 第三个是没有窗口表的,出来的情况跟第二个窗口一样.提示是找不到"预付款_Table1"的提示.


--  作者:狐狸爸爸
--  发布时间: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编辑过]

--  作者:blackzhu
--  发布时间:2011/12/2 9:59:00
--  

messagebox.show(e.Sender.Text)

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

  判断是对的呀控件是对的,行数也是对的.
[此贴子已经被作者于2011-12-2 9:59:02编辑过]

--  作者:blackzhu
--  发布时间:2011/12/2 10:03:00
--  


    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
Messagebox.Show("存在")
Else
Messagebox.Show("不存在")

 

 

 我这样跟踪后,第一步保存,第二步显示不存在.