Foxtable(狐表)用户栏目专家坐堂 → 语法解法


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

主题:语法解法

帅哥哟,离线,有人找我吗?
wtfwsk05
  61楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/15 14:43:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:华海仓库.zip

老师,请帮看看该案例中功能区中功能组(其他)中的按钮(创建表1)的代码,应怎么修改才可以不出现错误其代码如下:
'------删除"表名"为空的行------------------------------
DataTables("表A").DeleteFor("表名 is null")  '表名为空行
'------列出外部数据源ckgl中的所有表名------------------
Dim lst2 As new List(of String)
lst2 = Connections("ckgl").GetTableNames
'------定义一个集合,其值为表A中不重复的表名------------
Dim lst3 As new List(of String)
lst3 = DataTables("表A").GetValues("表名")
'------无创建表所需数据时,给出提示---------------------
Dim i As Integer
If lst2.Contains(lst3(i)) Then
    MessageBox.show("表A中无创建表所需数据","提示")
End If
'------有创建表所需数据时创建表------------------------------------------
For Each nm3 As String In lst3   '将集合lst3中的每一个元素循环执行一次下述代码
    If lst2.Contains(nm3)  Then   '集合lst2中包含lst3中的元素时
        Dim Builder As New ADOXBuilder("ckgl") '定义一个动态创建表和列的变量,并指定数据源名称
        Dim tbl As ADOXTable
        Builder.Open()   '打开ADOXBuilder
        tbl = Builder.NewTable(nm3) '创建表
        For Each dr As DataRow In DataTables("表A").Select("表名 = '" & nm3 & "'")
            With tbl
                Select Case dr("类型")
                    Case "String"
                        .AddColumn(dr("字段名") ,ADOXType.String ,dr("长度"))
                    Case "Integer"
                        .AddColumn(dr("字段名") ,ADOXType.Integer)
                    Case "double"
                        .AddColumn(dr("字段名") ,ADOXType.Double)
                    Case "datetime"
                        .AddColumn(dr("字段名") ,ADOXType.DateTime)
                    Case "text"
                        .AddColumn(dr("字段名") ,ADOXType.Text ,dr("长度"))
                End Select
            End With
        Next
        Builder.AddTable(tbl, True, True) '增加表
        Builder.Close()
        MessageBox.show("数据表创建成功","提示")
    End If
Next


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


加好友 发短信
等级:超级版主 帖子:23372 积分:119198 威望:0 精华:7 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/9/15 15:11:00 [只看该作者]

'------删除"表名"为空的行------------------------------
DataTables("表A").DeleteFor("表名 is null")  '表名为空行
'------列出外部数据源ckgl中的所有表名------------------
Dim lst2 As new List(of String)
lst2 = Connections("ckgl").GetTableNames
Output.Show(lst2.Count)
'------定义一个集合,其值为表A中不重复的表名------------
Dim lst3 As new List(of String)
lst3 = DataTables("表A").GetValues("表名")
Output.Show(lst3.Count)
'------无创建表所需数据时,给出提示---------------------

For Each t As String In lst2
    If lst3.Contains(t) Then
        lst3.Remove(t)
    End If
Next
Output.Show(lst3.Count)
If lst3.Count = 0 Then
    MessageBox.show("表A中无创建表所需数据","提示")
    Return 
End If
'------有创建表所需数据时创建表------------------------------------------
For Each nm3 As String In lst3   '将集合lst3中的每一个元素循环执行一次下述代码
    Dim Builder As New ADOXBuilder("ckgl") '定义一个动态创建表和列的变量,并指定数据源名称
    Dim tbl As ADOXTable
    Builder.Open()   '打开ADOXBuilder
    tbl = Builder.NewTable(nm3) '创建表
    For Each dr As DataRow In DataTables("表A").Select("表名 = '" & nm3 & "'")
        With tbl
            Select Case dr("类型")
                Case "String"
                    .AddColumn(dr("字段名") ,ADOXType.String ,dr("长度"))
                Case "Integer"
                    .AddColumn(dr("字段名") ,ADOXType.Integer)
                Case "double"
                    .AddColumn(dr("字段名") ,ADOXType.Double)
                Case "datetime"
                    .AddColumn(dr("字段名") ,ADOXType.DateTime)
                Case "text"
                    .AddColumn(dr("字段名") ,ADOXType.Text ,dr("长度"))
            End Select
        End With
    Next
    Builder.AddTable(tbl, True, True) '增加表
    Builder.Close()
    MessageBox.show(nm3 & "数据表创建成功","提示")
Next
[此贴子已经被作者于2018/9/15 15:11:44编辑过]

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


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/15 17:34:00 [只看该作者]

以下是引用wtfwsk05在2018/9/10 14:46:00的发言:
表比较多,一张一张表,设置太慢,可以通过全局表事件设置不

 

写到全局表datarowadded事件,然后开启对应表的全局表事件,如

 

For Each dt As DataTable In DataTables
    If dt.DataCols.Contains("编号") Then
        dt.GlobalHandler.DataRowAdded = True
    End If
Next

无法实现10张表中都有编号列,每张表增加一行,序号+1


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


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/15 20:39:00 [只看该作者]

以下是引用wtfwsk05在2018/9/10 14:46:00的发言:
表比较多,一张一张表,设置太慢,可以通过全局表事件设置不

 

写到全局表datarowadded事件,然后开启对应表的全局表事件,如

 

For Each dt As DataTable In DataTables
    If dt.DataCols.Contains("编号") Then
        dt.GlobalHandler.DataRowAdded = True
    End If
Next

无法实现10张表中都有编号列,每张表增加一行,序号+1



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


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/16 10:41:00 [只看该作者]

以下是引用wtfwsk05在2018/9/10 14:46:00的发言:
表比较多,一张一张表,设置太慢,可以通过全局表事件设置不
 

写到全局表datarowadded事件,然后开启对应表的全局表事件,如

 

For Each dt As DataTable In DataTables
    If dt.DataCols.Contains("编号") Then
        dt.GlobalHandler.DataRowAdded = True
    End If
Next

无法实现10张表中都有编号列,每张表增加一行,序号+1
我编写的代码为:
Dim dt As DataTable = DataTables("货类")    '定义指定数据表为dt
Dim i As Integer = dt.Compute("max(编号)")  '定义编号的最大值为i
e.DataRow("编号") = i+1                     '触发行的指定字段的值为i+1



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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/16 12:18:00 [只看该作者]

你需要这个?

 

Dim dt As DataTable = e.DataTable '定义指定数据表为dt    
Dim i As Integer = dt.Compute("max(编号)")  '定义编号的最大值为i    
e.DataRow("编号") = i+1                     '触发行的指定字段的值为i+1


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


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/16 13:21:00 [只看该作者]

发帖心情 Post By:2018/9/16 12:18:00 [只看该作者

你需要这个?

 

Dim dt As DataTable = e.DataTable '定义指定数据表为dt    
Dim i As Integer = dt.Compute("max(编号)")  '定义编号的最大值为i    
e.DataRow("编号") = i+1                     '触发行的指定字段的值为i+1

我测试过上述代码,维护在表属性中可以实现所要实现的需求,但维护在项目属性中全局表事件,就无法实现所需求的功能


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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/16 13:42:00 [只看该作者]

afterOpenProject事件,写代码

 


For Each dt As DataTable In DataTables
    If dt.DataCols.Contains("编号") Then
        dt.GlobalHandler.DataRowAdded = True
    End If
Next

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


加好友 发短信
等级:童狐 帖子:282 积分:1760 威望:0 精华:0 注册:2017/3/19 15:30:00
  发帖心情 Post By:2018/9/17 15:05:00 [只看该作者]

Dim tr As WinForm.TreeView   '当前窗口 目录树
tr = e.Form.Controls("TreeView2")
Dim nd As WinForm.TreeNode   '目录树节点
nd = e.node  '即将展开的节点
nd.Nodes.clear  '清除目录树所有节点
Dim nd2 As WinForm.TreeNode  '目录树节点
Dim dt1 As DataTable         '表
Dim dt2 As DataTable
Dim cmd As New SQLCommand       'SQL命令cmd
cmd.C     'cmd的数据源
'列出表(货类树)中"标题ID=目录树节点"的所有行
cmd.CommandText = "Select * F rom [货类树] where 标题ID like '" & nd.name & "__' "
dt1 = cmd.ExecuteReader()    '生产临时表
For Each dr1 As DataRow In dt1.Datarows  '临时表中每一行都执行一次下述代码
    Dim str2 As String = dr1("标题ID")   '指定单元格(dr1行中"标题ID"列)的值赋值给字符串str2
    Dim str3 As String = dr1("标题")
    nd2 = nd.Nodes.Add(str2,str3)        '向目录树节点nd中增加节点
        'Add(Name节点名称, [Text]节点标题, [IconFile]节点的图标文件)
    cmd.CommandText = "Select * F rom [货类树] where 标题ID like '" & str2 & "__' "
    dt2 = cmd.ExecuteReader()
        For Each dr2 As DataRow In dt2.Datarows
        str2 = dr2("标题ID")
        str3 = dr2("标题")       
        nd2.Nodes.Add(str2,str3)
        Next
Next


老师请问下,上述代码中    cmd.CommandText = "Select * F rom [货类树] where 标题ID like '" & str2 & "__' "  这段代码中加上—是什么意思

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


加好友 发短信
等级:版主 帖子:72502 积分:363620 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/9/17 15:14:00 [只看该作者]


 回到顶部