在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

Hi, I’m vbsgirl

办公职员