北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |
创建表格时,我想用字符串输入字段名称、字段类型、默认值。
如:
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