注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

汇总技巧

你快乐我快乐.... 汇集各类技巧,传播技巧,让我们共同熟练运用技巧..

 
 
 

日志

 
 

ADO对象中的字段对象的使用方法  

2011-06-04 18:42:45|  分类: ◆ASP技巧 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

使用字段对象
本文将就如何使用字段对象研究数据的属性(主要就是些书写检查类似的功能)和
如何格式化显示数据库中一行数据。
为了配合使用下面的例子,先介绍了一个专门用来测试的生成一个Table的SQL语句如下:
文件fields.asp用来判断数据库中到底是怎么处理字段用的。主要是让你看看字段对象
到底有些什么属性你可以反复的在其他数据库的表中使用该代码。
%
'count属性表示表中到底有多少个字段
Response.Write "Field Count: "  rs.Fields.Count  "BR"
For Each objField in rs.Fields
Response.Write "Name = "  objField.Name  "BR"
Response.Write "ActualSize = "  objField.ActualSize  "BR"
Response.Write "Attributes = "  objField.Attributes  "BR"
Response.Write "DefinedSize = "  objField.DefinedSize  "BR"
Response.Write "NumericScale = "  objField.NumericScale  "BR"
Response.Write "Precision = "  objField.Precision "BR"
Response.Write "Type = "  objField.Type  "BR"
你自己可以来用用下面注释掉的两行,一般的设计者不常用而已。
'Response.Write "OriginalValue = "  objField.OriginalValue  "BR"
'Response.Write "UnderlyingValue = "  objField.UnderlyingValue "BR"
Response.Write "Value = "  objField.Value  "BRBR"
Next
%
下面是输出结果:
Name = test_id
ActualSize = 4
Attributes = 16
DefinedSize = 4
NumericScale = 255
Precision = 10
Type = 3
Value = 1
现在让我们来研究一下这些结果:
Name:RecordSet中每一列的名字
Value:每一列的数值,大家使用得最多的属性了,它也是字段对象的默认属性。
DefinedSize:该字段能够在数据库中占用的最多字节数目,一般而言对于同一个字段
该属性的值应该是一样的。除了:如果字段类型是varchar(30),并且该
字段中只有10个字符的话,将会出现这种情况,DefinedSize=30,ActualSize=10
因此,DefinedSize属性更有用些
Type:字段中的数据类型.你可以在adovbs.inc文件中找到到底有些什么数据类型
Precision:定义十进制数的精确度用的属性
NumericScale:只对数值类型的数据有用,表明该字段只能够存储的最大数值
Attributes:有点奇怪的属性,它的数值是字段对象中所有属性(可以在adovbs.inc中的FieldAttributeEnum
部分找到这些数值)数值加起来的值。 呵呵,可以使用这个属性来检查字段的NULL
If (rsFields(strName).Attributes And adFldIsNullable) = 0 Then
IsRequiredField = True
或则可以来检查该字段是否可以被更新(象一个自动编号的字段就不能够更新的呀)
If (rsFields(strName).Attributes And intUpdatable) = False Then
CanUpdateField = False
具体细节可以去参考ADO的文档
现在我们来谈谈那被注释掉的两个属性:
OriginalValue and UnderlyingValue . 注意哦,SQL Server 6.5不支持这两个属性
他们是干吗用的了,前一个是来说明在数据库中,这个字段的内容被更新前的内容,而
后一个则是字段中当前的内容。
但是由于不同的ODBC Driver支持不同的属性,所以先注释掉了,不过这两个属性还是很有意思的哦。
格式化一个字段的输出:
文件fields2.asp
'------------------------------------------------------------------------------
' Inputs: strName- HTML form名称
'strVal- 要显示的数据内容
'intSize- HTML显示的大小
'intMax- HTML元素能够接受的最大字节数目
'strReq- 表明是否为必填字段
'strType- 表明数据类型
'------------------------------------------------------------------------------
Sub ShowField(strName, strVal, intSize, intMax, strReq, strType)
Response.Write "tdINPUT TYPE=Text NAME="  strName
Response.Write " SIZE="  intSize  " MAXLENGTH="  intMax
Response.Write " VALUE ="  strVal  " onFocus=select()"
IF strType = "N" THEN
Response.Write " onChange="  chr(34)  "CheckNumber(this.value, '"  strReq  "')"  chr(34)
ELSEIF strType = "D" THEN
Response.Write " onChange="  chr(34)  "CheckDate(this.value, '"  strReq  "')"  chr(34)
ELSE
Response.Write " onChange="  chr(34)  "CheckText(this.value, '"  strReq  "')"  chr(34)
END I
Response.Write " /td/tr"
End Sub
Function NumericSize (Precision)
NumericSize = Precision + (Precision \3) + 1
END FUNCTION
%
Response.Write "table"
For Each objField in rsFields.Fields
Response.Write "trtd" objField.Name  "/td"
strElName = Replace(objField.Name, " ", "")
strRequired = "N"
If (rsFields(objField.Name).Attributes And adFldIsNullable) = 0 Then
strRequired = "Y"
End I
If objField.Type = adLongVarChar THEN
ShowTextArea strElName, objField.Value
ELSE
SELECT CASE objField.Type
CASE adTinyInt , adSmallInt , adInteger, adBigInt, adUnsignedTinyInt,
adUnsignedSmallInt, adUnsignedInt, adUnsignedBigInt, adDecimal,
adNumeric, adSingle, adDouble
IF objField.NumericScale  255 THEN
strValue = FormatNumber(objField.Value)
ELSE
strValue = objField.Value
END I
strSize = NumericSize (objField.Precision)
strMaxSize = StrSize
strType = "N"
CASE adCurrency
strValue = FormatCurrency(objField.Value)
strSize= NumericSize (objField.Precision) + 1
strMaxSize = StrSize
strType= "N"
CASE adDate, adDBDate, adDBTimeStamp
strValue = FormatDateTime(objField.Value)
strSize = 22
strMaxSize = 22
strType = "D"
CASE adChar, adVarChar
StrValue = objField.Value
IF objField.DefinedSize  25 THEN
strSize = 25
ELSE
strSize = objField.DefinedSize
END I
strMaxSize = objField.DefinedSize
strType= "C"
END SELECT
END I
NEXT
Response.Write "/table"
%

  评论这张
 
阅读(103)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017