以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  用代码生成数据表后出现错误,并且菜单为灰色,不能用,为什么  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=145476)

--  作者:goe12345
--  发布时间:2020/1/21 17:09:00
--  用代码生成数据表后出现错误,并且菜单为灰色,不能用,为什么
在开发的并发布的程序中,用代码生成数据表后出现错误,并且菜单为灰色,不能用,为什么
[此贴子已经被作者于2020/1/21 17:10:47编辑过]

--  作者:有点蓝
--  发布时间:2020/1/21 17:14:00
--  
出现什么错误?使用了什么代码?
--  作者:goe12345
--  发布时间:2020/1/21 17:16:00
--  
这是错误信息
--  作者:goe12345
--  发布时间:2020/1/21 17:18:00
--  
要求退回或继续,如果继续,同时非字符型字段丢失,不显示了,再等会,就会出现菜单灰色,不能操作
--  作者:goe12345
--  发布时间:2020/1/21 17:19:00
--  
用的帮助文件 中的生成表的代码,如下
Dim tx1 As WinForm.TextBox = e.Form.Controls("TextBox1")
If tx1.Value="" Then tx1.Value="表" & Tables.Count
Dim adb As new ADOXBuilder
Dim tbl As ADOXTable
adb.Open()
tbl = adb.NewTable(tx1.Value) \'创建表
With tbl
    For Each r As Row In Tables("增加表_Table1").Rows
        If r.IsNull("列名")=False Then
            Select Case r("类型")
                Case "字符"
                    .AddColumn(r("列名"),ADOXType.String,r("长度"))
                Case "日期时间型"
                    .AddColumn(r("列名"),ADOXType.DateTime)
                Case "逻辑型"
                    .AddColumn(r("列名"),ADOXType.Boolean)
                Case "备注型"
                    .AddColumn(r("列名"),ADOXType.Text)
                Case "整数型"
                    .AddColumn(r("列名"),ADOXType.Integer)
                Case "长整数型"
                    .AddColumn(r("列名"),ADOXType.Long)
                   
                Case "短整数型"
                    .AddColumn(r("列名"),ADOXType.Short)
                Case "微整数型"
                    .AddColumn(r("列名"),ADOXType.Byte)
                Case "双精度小数型"
                    .AddColumn(r("列名"),ADOXType.Double )
                Case "单精度小数型"
                    .AddColumn(r("列名"),ADOXType.Single)
                Case "高精度小数型"
                    .AddColumn(r("列名"),ADOXType.Decimal)
            End Select
        End If
    Next
   
End With
adb.AddTable(tbl)
adb.Close()
If e.Form.Controls("CheckBox1").checked=True Then
    Syscmd.Project.Open(ProjectFile)
End If

--  作者:goe12345
--  发布时间:2020/1/21 17:20:00
--  
我用窗口,录入字段的信息,名称、标题和数据类型


--  作者:有点蓝
--  发布时间:2020/1/21 17:27:00
--  
Tables("增加表_Table1")这个表结构和数据发上来测试一下
--  作者:goe12345
--  发布时间:2020/1/22 14:39:00
--  这是表在窗口中生成的代码
Dim b As New DataTableBuilder("NewTable")   \',临时表
With b
    .AddDef ("列名" ,Gettype(String),20)
    .AddDef("类型" ,Gettype(String), 12)
    .AddDef("长度" ,Gettype(Integer ))
    .AddDef("标题" ,Gettype(String),50)
End With
b.Build()
Tables("增加表_Table1").DataSource =b.BuildDataSource    \'DataTables("NewTable")
Dim tb As Table = Tables("增加表_Table1")
Dim ri() As String ={ "第一列","第二列","第三列" ,"第四列","第五列","第六列","第七列","第八列","第九列", "第十列" }
With tb 
    For i As Integer =0 To 9
        .AddNew()
        .Current("列名")=ri(i)
        .Current("类型")="字符"
        .Current("长度")=16
   Next  
    .RowHeaderVisible = False
    .AllowEdit=True
    .Cols("类型").ComboList=DataTables("sys_DataType").GetComboListString("DataCaption","","_Identify")  
End With

\'//** 在<增加数据表> @cb-选择数据源 显示已有数据源
Dim cb As WinForm.ComboBox = e.Form.Controls("ComboBox1")
Dim dts As String ="内部数据源"
For Each cn As Connection In Connections
    dts=dts & "|" & cn.Name
Next
If dts <> Nothing Then
    cb.ComboList=dts
End If
cb.Value="内部数据源"

--  作者:有点蓝
--  发布时间:2020/1/22 14:55:00
--  
1、首先
Dim b As New DataTableBuilder("NewTable")   \',临时表
With b
    .AddDef ("列名" ,Gettype(String),20)
    .AddDef("类型" ,Gettype(String), 12)
    .AddDef("长度" ,Gettype(Integer ))
    .AddDef("标题" ,Gettype(String),50)
End With
‘’b.Build() 这句代码要去掉,否则会导致临时表异常,因为后面重复BuildDataSource  生成了
Tables("增加表_Table1").DataSource =b.BuildDataSource    \'DataTables("NewTable")

2、这个增加表窗口不能是模式窗口,模式窗口里不能使用Syscmd.Project.Open(ProjectFile)

如果是其它类型窗口加一句代码
If e.Form.Controls("CheckBox1").checked=True Then
   e.cancel=true
    Syscmd.Project.Open(ProjectFile)
End If

--  作者:goe12345
--  发布时间:2020/1/23 9:18:00
--  谢谢有点蓝老师,我试试
谢谢有点蓝老师,我试试