Foxtable(狐表)用户栏目专家坐堂 → 求助检查关于动态创建表存在问题


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

主题:求助检查关于动态创建表存在问题

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


加好友 发短信
等级:婴狐 帖子:25 积分:308 威望:0 精华:0 注册:2013/1/27 1:36:00
求助检查关于动态创建表存在问题  发帖心情 Post By:2013/2/22 9:55:00 [只看该作者]

Dim Name As String = e.Form.Controls("工程数量分表名称").Value
If Name = "" Then
    MessageBox.Show("分表名称不能为空!","提示")
    Return
End If
For Each dt As DataTable In DataTables
    If dt.Name.Contains(Name) Then
        MessageBox.Show(name & "数据库中已存在","提示")
    Else
        If MessageBox.Show("是否创建工程数量分表?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then
            Dim Builder As New ADOXBuilder
            Dim fb As ADOXTable
            Builder.Open()
            fb = Builder.NewTable(name) '创建表
            With fb
                .AddColumn("分部工程" ,ADOXType.String, 12)
                .AddColumn("分项工程" ,ADOXType.String, 12)
                .AddColumn("施工部位_主部位" ,ADOXType.String, 8)
                .AddColumn("施工部位_辅部位" ,ADOXType.String, 8)
                .AddColumn("细目号" ,ADOXType.String, 8)
                .AddColumn("材料类别" ,ADOXType.String, 12)
                .AddColumn("材料规格" ,ADOXType.String, 8)
                .AddColumn("单位" ,ADOXType.String, 8)
                .AddColumn("设计数量" ,ADOXType.Single)
                .AddColumn("变更数量" ,ADOXType.Single)
            End With
            Builder.AddTable(fb) '增加表
            Builder.Close()
        Else
            Return
        End If
    End If
Next
DataTables(name).DataCols.Add("有效数量", Gettype(Single), "isnull([设计数量],0) + isnull([变更数量],0)")
Dim dmp1 As New TableDataMap
dmp1.DataTable = "主合同清单" '指定数据来源表
dmp1.ValueCol = "细目号" '指定取值列
dmp1.DisplayCol = "细目号" '指定显示列
dmp1.ListCols = "细目号,名称" '指定下拉列表时显示哪些列的数据
dmp1.Sort = "细目号" '指定排序方式
Tables(name).Cols("细目号").DataMap = dmp1.CreateDataMap() '生成并设置DataMap
Dim dmp2 As New TableDataMap
dmp2.DataTable = "材料信息表" '指定数据来源表
dmp2.ValueCol = "规格型号" '指定取值列
dmp2.DisplayCol = "规格型号" '指定显示列
dmp2.ListCols = "材料类别,规格型号" '指定下拉列表时显示哪些列的数据
dmp2.Sort = "材料类别" '指定排序方式
Tables(name).Cols("材料规格").DataMap = dmp2.CreateDataMap() '生成并设置DataMap
Dim dmp3 As New TableDataMap
dmp3.DataTable = "材料信息表" '指定数据来源表
dmp3.ValueCol = "材料类别" '指定取值列
dmp3.DisplayCol = "材料类别" '指定显示列
dmp3.ListCols = "材料名称,材料类别" '指定下拉列表时显示哪些列的数据
dmp3.Sort = "材料名称" '指定排序方式
Tables(name).Cols("材料类别").DataMap = dmp3.CreateDataMap() '生成并设置DataMap
Relations.Add(e.Form.Controls("工程数量分表编号").value,DataTables("工程数量总表").DataCols("细目号"),DataTables(name).DataCols("细目号"))
If MessageBox.Show(Name & "已经创建,是否重启系统","请确认",MessageBoxButtons.YesNo,MessageBoxIcon.Question) =DialogResult.Yes Then
    syscmd.Project.Open(ProjectFile)  '打开表
    MainTable = Tables(Name)
    forms("创建工程数量分表").close()
Else
    Return
End If

出现错误如附件:
此主题相关图片如下:未命名.jpg
按此在新窗口浏览图片


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/22 10:17:00 [只看该作者]

 没办法,狐表没有提供动态添加表以后得到现有表的属性或者方法。

 只能是你自己用一个变量去控制了。

 当新增一个表的时候,把变量存入一个集合,用于判断此表是否被添加进去了。

 Dim ls_Newtable As List(Of String)

 ls_Newtable.Add("xxxx")

 ls_Newtable.Containt("xxx")

 还有注意的是,新增表,必须重启项目才可以生效。

 Syscmd.Project.Open(ProjectFile)

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


加好友 发短信
等级:婴狐 帖子:25 积分:308 威望:0 精华:0 注册:2013/1/27 1:36:00
我原来是可以的,但是调整后没有了  发帖心情 Post By:2013/2/22 11:16:00 [只看该作者]

我原来是可以的,但是调整后没有了

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/22 11:19:00 [只看该作者]

以下是引用tedat在2013-2-22 11:16:00的发言:
我原来是可以的,但是调整后没有了


不可能可以的,好吧?你在循环里添加表,表名重复了好吧?

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


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

在 实际生产中  动态添加表  还是 在项目设计表?

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


加好友 发短信
等级:婴狐 帖子:25 积分:308 威望:0 精华:0 注册:2013/1/27 1:36:00
lin,我上传文件上来,你帮我看看吧  发帖心情 Post By:2013/2/22 13:54:00 [只看该作者]

在动态管理中的创建工程数量分表窗口,里面的创建分表按钮控件,你帮我看看吧,另外有个工程数量录入的窗口,我设计了板面,但是内部的代码能不能给我指点下啊
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:工程数量管理系统.table

[此贴子已经被作者于2013-2-22 13:55:08编辑过]

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


加好友 发短信
等级:婴狐 帖子:25 积分:308 威望:0 精华:0 注册:2013/1/27 1:36:00
找到问题了  发帖心情 Post By:2013/2/22 14:33:00 [只看该作者]

我调整代码,去掉了设置关联的语句:
Dim Name As String = e.Form.Controls("工程数量分表名称").Value
If Name = "" Then
    MessageBox.Show("分表名称不能为空!","提示")
    Return
End If
If DataTables.Contains(Name) Then
    MessageBox.Show("《" &  name & "》" & "数据库中已存在","提示")
    Return
End If
If MessageBox.Show("是否创建" & "《" &  name & "》" & "?","提示",MessageBoxButtons.YesNo, MessageBoxIcon.Question) =  DialogResult.Yes Then
    Dim Builder As New ADOXBuilder
    Dim fb As ADOXTable
    Builder.Open()
    fb = Builder.NewTable(name) '创建表
    With fb
        .AddColumn("分部工程" ,ADOXType.String,16)
        .AddColumn("分项工程" ,ADOXType.String,16)
        .AddColumn("施工部位_主部位" ,ADOXType.String,16)
        .AddColumn("施工部位_辅部位" ,ADOXType.String,16)
        .AddColumn("细目号" ,ADOXType.String,16)
        .AddColumn("材料类别" ,ADOXType.String,16)
        .AddColumn("材料规格" ,ADOXType.String,16)
        .AddColumn("单位" ,ADOXType.String,16)
        .AddColumn("设计数量" ,ADOXType.Single)
        .AddColumn("变更数量" ,ADOXType.Single)
    End With
    Builder.AddTable(fb) '增加表
    Builder.Close()
Else
    Return
End If
syscmd.Project.Open(ProjectFile)  '打开表
MainTable = Tables(Name)
forms("创建工程数量分表").close()
DataTables(name).DataCols.Add("有效数量", Gettype(Single), "isnull([设计数量],0) + isnull([变更数量],0)")
Dim dmp1 As New TableDataMap
dmp1.DataTable = "主合同清单" '指定数据来源表
dmp1.ValueCol = "细目号" '指定取值列
dmp1.DisplayCol = "细目号" '指定显示列
dmp1.ListCols = "细目号,名称" '指定下拉列表时显示哪些列的数据
dmp1.Sort = "细目号" '指定排序方式
Tables(name).Cols("细目号").DataMap = dmp1.CreateDataMap() '生成并设置DataMap
Dim dmp2 As New TableDataMap
dmp2.DataTable = "材料信息表" '指定数据来源表
dmp2.ValueCol = "规格型号" '指定取值列
dmp2.DisplayCol = "规格型号" '指定显示列
dmp2.ListCols = "材料类别,规格型号" '指定下拉列表时显示哪些列的数据
dmp2.Sort = "材料类别" '指定排序方式
Tables(name).Cols("材料规格").DataMap = dmp2.CreateDataMap() '生成并设置DataMap
Dim dmp3 As New TableDataMap
dmp3.DataTable = "材料信息表" '指定数据来源表
dmp3.ValueCol = "材料类别" '指定取值列
dmp3.DisplayCol = "材料类别" '指定显示列
dmp3.ListCols = "材料名称,材料类别" '指定下拉列表时显示哪些列的数据
dmp3.Sort = "材料名称" '指定排序方式
Tables(name).Cols("材料类别").DataMap = dmp3.CreateDataMap() '生成并设置DataMap

能够执行,但是为什么添加关联代码后就行啊

Relations.Add(e.Form.Controls("工程数量分表编号").value,DataTables("工程数量总表").DataCols("细目号"),DataTables(name).DataCols("细目号"))


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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/22 14:34:00 [只看该作者]

 不建议你这样做,创建完成以后,必须是重新打开项目才可以引用这张表的。

 也就是说,这样会使你的程序不连贯了。

 建议你用外部数据源吧。这样可以动态的新建表、删除表等等操作。

 看个例子。

点击浏览该文件:动态创建表.rar

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


加好友 发短信
等级:狐神 帖子:6708 积分:34304 威望:0 精华:11 注册:2012/8/18 23:10:00
  发帖心情 Post By:2013/2/22 14:46:00 [只看该作者]

 还是用动态的吧。自己用一个数据表保存你的分表的名字,在项目打开的时候给弄进来。

 这样就不需要重新打开项目了。

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

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


加好友 发短信
等级:婴狐 帖子:25 积分:308 威望:0 精华:0 注册:2013/1/27 1:36:00
谢谢,补充  发帖心情 Post By:2013/2/22 15:52:00 [只看该作者]

我的数据库里面有个记录表名的数据表啊,那怎么做好不用重启啊?
顺便帮我看看
If MessageBox.Show("是否保存数据?","提示",MessageBoxButtons.YesNo,MessageBoxIcon.Question) = DialogResult.Yes Then
    DataTables(e.Form.Controls("录入表").value).Save(True)
    Forms("录入工程数量").Close
Else
    Forms("录入工程数量").Close
End If

我是在窗口事件中beforeclose的

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