Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

如何将字符串“dbtext”变成创建表格时的字段类型变量。

香精油  发表于:2020-07-27 16:12:25  
复制

创建表格时,我想用字符串输入字段名称、字段类型、默认值。
如:
tempFieldsNames = "订单号,交货日期,客户,模子类型,直径,出库数量,类型备注,出库人,出库日期,输入人"
tempFieldsTypes = "dbtext,dbdate,dbtext,dbtext,dbsingle,dblong,dbtext,dbtext,dbdate,dbtext"
tempFieldsDefault = ",,,,,0,_,,,"
当分解字段类型时,应该如何处理,才能将代表字段类型的文本,应用成字段变量?


代码如下:

dim newTablename as string

Sub createTable()

    newTableName="新表"
    If CreateTempTable(newTableName, 10, "订单号,交货日期,客户,模子类型,直径,出库数量,类型备注,出库人,出库日期,输入人", "dbtext,dbdate,dbtext,dbtext,dbsingle,dblong,dbtext,dbtext,dbdate,dbtext", ",,,,,0,_,,," & showUserName) = False Then
        MsgBox "创建 " & newTableName(2) & " 失败"
    End If
End Sub

Function CreateTempTable(ByVal intNewTableName As String, _
    ByVal intFieldsQty As Long, _
    ByVal tempFieldsNames As String, _
    ByVal tempFieldsTypes As String, _
    ByVal tempFieldsDefault As String) As Boolean
'在当前数据库中创建指定字段的表
' On Error GoTo Err_CreateTable
    Dim db As DAO.Database
    Dim Tb As DAO.TableDef
    Dim fld As DAO.Field

    '分解字段字符串
    Dim NameString() As String
    Dim TypeString() As String
    Dim TypeNo() As ADODB.DataTypeEnum
    Dim DefaultString() As String
    If Right(tempFieldsNames, 1) = "," Then tempFieldsNames = Mid(tempFieldsNames, 1, Len(tempFieldsNames) - 1)
    If Right(tempFieldsTypes, 1) = "," Then tempFieldsTypes = Mid(tempFieldsTypes, 1, Len(tempFieldsTypes) - 1)
    If Right(tempFieldsDefault, 1) = "," Then tempFieldsDefault = Mid(tempFieldsDefault, 1, Len(tempFieldsDefault) - 1)
    NameString() = Split(tempFieldsNames, ",")
    TypeString() = Split(tempFieldsTypes, ",")
    DefaultString() = Split(tempFieldsDefault, ",")
    '判断字段数量是否与输入数量一致。
    If intFieldsQty <> UBound(NameString) - LBound(NameString) + 1 Then
        MsgBox "字段名称数量与输入数量不一致!"
        CreateTempTable = False
        Exit Function
    End If
    If intFieldsQty <> UBound(TypeString) - LBound(TypeString) + 1 Then
        MsgBox "字段类型数量与输入数量不一致!"
        CreateTempTable = False
        Exit Function
    End If
    '在当前数据库中创建 "intNewTableName"表
    Set db = CurrentDb
    Set Tb = db.CreateTableDef(intNewTableName)
    '用代码 fld 为 intNewTableName 表添加 "ID" 字段
    Set fld = Tb.CreateField("ID", dbLong)
    '设置新增字段特征为自动编号
    fld.Attributes = dbAutoIncrField
    '将新增字段添加到表的字段集合之中
    Tb.Fields.Append fld
    '添加其他字段
    For x = LBound(NameString) To UBound(NameString)
        Tb.Fields.Append Tb.CreateField(NameString(x), TypeString(x))
        If Not (IsError(Len(DefaultString(x)) > 0)) Then
            If Len(DefaultString(x)) > 0 Then
                Tb(NameString(x)).DefaultValue = DefaultString(x)
            End If
        End If
    Next

    '将表添加到对象集合之中
    db.TableDefs.Append Tb
    '刷新数据库
    Application.RefreshDatabaseWindow
    Set Tb = Nothing
    db.Close: Set db = Nothing
    CreateTempTable = True
'    DoCmd.Close
exit_sub:

Exit Function

Err_CreateTable:
    msgTxt = "错误:" & Err.Number & Chr(13) & Chr(13) & Err.Description
    MsgBox msgTxt, vbCritical, "Err_Sub_Form_Close"
End Function

 

Top
总记录:0篇  页次:0/0 9 1 :