在VB编程语言中,可以直接创建一个Field对象,所以Name属性可读可写
在vbs中,只能从Fields集合中枚举或提取已有的Field对象,所以Name属性为只读,即可读不可写。
(一)Field对象用于读写字段的相关信息
可以从 Recordset.Fields 或 Record.Fields 对象里提取或枚举Field对象
Field对象有12个属性2个方法0个事件
(1)属性如下:
ActualSize 只读属性。字段值实际所占用的存储空间(字节)。类型:Long
Attributes 与数据类型相关的字段特性。类型:Long
DefinedSize 定义字段数据类型时,所指定的字段宽度(字符或字节)。类型:Long
Name 字段名称。类型:String
NumericScale DECIMAL数据类型(adNumeric)的小数位数。类型:Byte
OriginalValue 只读属性。Recordset中,该字段的初始值。类型:Variant
Precision 数值型字段的宽度(有效数字的位数)。类型:Byte
Properties 只读属性。字段的属性。类型:Properties对象
Status 只读属性。Field对象的状态值。类型:Long
Type 字段的数据类型。类型:Long
UnderlyingValue 只读属性。当前数据库中,该字段的最新值。类型:Variant
Value 字段的值。类型:Variant
(2)方法如下:
AppendChunk 分段写入数据
GetChunk 分段读取数据
(3)说明如下:
【a】ActualSize 和 DefinedSize 对所有数据类型的字段都适用
字符串类型的数据,DefinedSize值的单位是字符
其它类型的数据,DefinedSize值的单位是字节
比如字段类型 TEXT(3),数据 “刘备”,则:
DefinedSize = 3 ‘一个英文字母或一个汉字都算一个字符
ActualSize = 4 ‘一个英文字母或一个汉字都是2字节
比如字段类型 INT,数据 0,则:
DefinedSize = 4 ‘INT是4字节
ActualSize = 4 ‘尽管字段值只有一位数,但INT类型的数据一律保存为4字节
比如字段类型 DECIMAL,则:
DefinedSize = 19
ActualSize = 19
【b】Precision 适用于数值类型的字段
NumericScale 适用于DECIMAL类型的字段
如果类型不匹配,则返回值始终为255
有效数字的位数是指该数据类型的最大最小值的位数,且负号、小数点和科学计数法不算在内
比如字段类型 SMALLINT,则:
Precision = 5 ‘SMALLINT类型的取值范围是 -32768 ~ 32767,共5位有效数字
比如字段类型 REAL,则:
Precision = 7 ‘REAL类型的取值范围是 -3.402823E+38 ~ 3.402823E+38,共7位有效数字
比如字段类型 DECIMAL,则:
Precision = 18 ‘缺省值
NumericScale = 0 ‘缺省值
比如字段类型 DECIMAL(10, 2),则:
Precision = 10
NumericScale = 2
【c】Properties属性集合中有5项:
BASECOLUMNNAME 字段名
BASETABLENAME 表名
ISAUTOINCREMENT 字段是否Counter类型
ISCASESENSITIVE 索引是否区分大小写
COLLATINGSEQUENCE 索引排序采用的编码示例
(二)Field对象示例:
‘示例:Field对象
Option Explicit
Dim oWS, oFSO, oConnection, oRecordset, oField, oProperty, s, sFile
sFile = “D:\1.mdb” ‘数据库文件
s = “Provider=Microsoft.Jet.OLEDB.4.0;Data Source=” & sFile
Call NewAccessFile(s) ‘删除数据库文件并新建,防止已有数据库文件导致示例出错
Set oConnection = CreateObject(“Adodb.Connection”)
oConnection.Open s
oConnection.Execute “CREATE TABLE 文将(” & _
“序号 COUNTER, ” & _
“姓名 TEXT(4), ” & _
“智力 DECIMAL(3, 1), ” & _
“排名 SMALLINT)”
oConnection.Execute “INSERT INTO 文将 VALUES(1, ‘诸葛亮’, 99.5, 1)”
Set oRecordset = CreateObject(“Adodb.Recordset”)
oRecordset.Open “SELECT * FROM 文将”, oConnection
For Each oField In oRecordset.Fields
s = “ActualSize ” & vbTab & “= ” & oField.ActualSize & vbLf & _
“Attributes ” & vbTab & “= ” & oField.Attributes & vbLf & _
“DefinedSize ” & vbTab & “= ” & oField.DefinedSize & vbLf & _
“Name ” & vbTab & “= ” & oField.Name & vbLf & _
“NumericScale” & vbTab & “= ” & oField.NumericScale & vbLf & _
“Precision ” & vbTab & “= ” & oField.Precision & vbLf & _
“Status ” & vbTab & “= ” & oField.Status & vbLf & _
“Type ” & vbTab & “= ” & oField.Type & vbLf & _
“Value ” & vbTab & “= ” & oField.Value & vbLf & _
vbLf & “属性” & vbLf
For Each oProperty In oField.Properties
s = s & oProperty.Name & vbTab & “= ” & oProperty.Value & vbLf
Next
MsgBox s
Next
oRecordset.Close()
Sub NewAccessFile(ByVal sConnectionString)
Dim oCatalog, s
‘如果是64位系统,则把vbs切换到32位模式运行
Set oWS = CreateObject(“WScript.Shell”)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
s = oWS.ExpandEnvironmentStrings(“%windir%\SysWOW64\WScript.exe”)
If oFSO.FileExists(s) And LCase(WScript.FullName) <> LCase(s) Then
oWS.Run s & ” “”” & WScript.ScriptFullName & “”””
WScript.Quit()
End If
If oFSO.FileExists(sFile) Then oFSO.DeleteFile sFile, True'如果数据库文件已存在,则删除之
Set oCatalog = CreateObject("Adox.Catalog") '新建数据库文件
oCatalog.Create sConnectionString
End Sub
‘示例:Field对象,语法示例
‘新建一个Recordset记录集,并保存为一个xml文件
Option Explicit
‘DataTypeEnum
Const adNumeric = 131 ‘JQL: DECIMAL
Const adVarWChar = 202 ‘JQL: TEXT(n)
‘FieldAttributeEnum
Const adFldCacheDeferred = &H1000
Const adFldFixed = &H10 ‘字段值的宽度是固定的
Const adFldIsChapter = &H2000
Const adFldIsCollection = &H40000
Const adFldKeyColumn = &H8000
Const adFldIsDefaultStream = &H20000
Const adFldIsNullable = &H20 ‘字段的值可以为Null
Const adFldIsRowURL = &H10000
Const adFldLong = &H80
Const adFldMayBeNull = &H40 ‘可以从字段读取Null
Const adFldMayDefer = &H2
Const adFldNegativeScale = &H4000
Const adFldRowID = &H100
Const adFldRowVersion = &H200
Const adFldUnknownUpdatable = &H8 ‘无法确定字段是否可写
Const adFldUnspecified = -1
Const adFldUpdatable = &H4 ‘字段可写
Dim oWS, oFSO, oRecordset, oField, s, sFile, i
‘如果是64位系统,则把vbs切换到32位模式运行
Set oWS = CreateObject(“WScript.Shell”)
Set oFSO = CreateObject(“Scripting.FileSystemObject”)
s = oWS.ExpandEnvironmentStrings(“%windir%\SysWOW64\WScript.exe”)
If oFSO.FileExists(s) And LCase(WScript.FullName) <> LCase(s) Then
oWS.Run s & ” “”” & WScript.ScriptFullName & “”””
WScript.Quit()
End If
sFile = “D:\1.xml”
‘如果xml文件已存在,则删除之
If oFSO.FileExists(sFile) Then oFSO.DeleteFile sFile, True
Set oRecordset = CreateObject(“Adodb.Recordset”) ‘新建一个Recordset记录集
oRecordset.Fields.Append “字段1”, adVarWChar, 4 ‘新建一个字段
Set oField = oRecordset.Fields.Item(“字段1”) ‘修改字段属性
oField.Type = adNumeric
oField.DefinedSize = 15
oField.Attributes = adFldFixed + adFldIsNullable + adFldMayBeNull _
+ adFldMayDefer + adFldUnknownUpdatable
oField.Precision = 10
oField.NumericScale = 2
oRecordset.Open()
oRecordset.AddNew “字段1”, 5.11 ‘添加一条记录
oRecordset.AddNew “字段1”, 5.22
oField.Value = 5.33 ‘修改当前记录的字段值
oRecordset.Save sFile, 1 ‘Recordset记录集保存为xml文件
s = “”
For i = 0 To oRecordset.Fields.Count – 1
s = s & oRecordset(i).Name & vbTab
Next
s = Left(s, Len(s) – 1) & vbLf & vbLf
Do Until oRecordset.EOF = True
For i = 0 To oRecordset.Fields.Count – 1
s = s & oRecordset(i).Value & vbTab
Next
s = Left(s, Len(s) – 1) & vbLf
oRecordset.MoveNext
Loop
oRecordset.Close()
MsgBox s
Views: 48