Rss & SiteMap
Foxtable(狐表) http://www.foxtable.com
数据转换函数
在程序开发的过程中,我们经常需要将某一类型的数据转换为其它数据类型后使用。
为此Visual Basic提供了以下转换函数:
示例
Dim
s As String = "123.12"
带判断的转换
显然任何类型的数据,都可以转换为字符型。
但是对于其它类型的数据,却有转换失败的可能,例如:
Dim
如果在命令窗口执行上面的代码,会出现错误提示:字符串"abc"无法转转位长整数。
为了解决这个问题,我们可以采用另一种转换方法。
除了String(字符)类型外,所有的基本数据类型,都有一个TryParse方法,用于将其它类型的数据转换为本类型的数据。
语法
Type.TryParse(Value,Variant)
说明
Type: 目标数据类型,例如Date、Integer、Long、Double等等。
Value: 要进行转换的数据。
Variant: 用于存放转换结果的变量,变量的类型必须和Type指定的类型一致。
如果转换成功,则将转换结果存储在变量Variant中,并返回True,否则返回False。
例如:
Dim
再例如:
Dim
d As Date '变量d用于存储转换结果最直接的转换
前面已经讲到,使用转换函数转换数据类型,在转换失败的情况下,会出现错误提示。
使用TryParse方法,可以避免错误提示,但是代码略显繁琐。
Visual Basic提供了一个Val函数,用于将字符转换为数值,即使转换失败,也不会报错,而是返回0。
例如:
Dim
虽然变量s1是无法转换为数值的,但是在命令窗口执行上面的代码,却不会有任何错误提示,因为Val函数将s1被转换为0了。
日期列的一个意外
大多数时候,我们可以直接使用日期列的值。
例如假定当前表有一个日期列,可以在名称窗口正常执行下面的代码:
Dim
但是如果你在命令窗口执行下面的代码,却会出现错误提示:
Dim
要使上面的代码正确执行,可以修改为:
Dim
上面的代码用CDate将列中的值转换为日期,你也许会奇怪,本来就是日期,何来转换之说,这是因为我们从某列取值的时候,不管列类型如何,得到的始终是一个Object类型的值,但是Visual Basic会自动判断真实的值类型,所以我们直接使用即可。唯一的例外就是上面这个例子:日期之间相减的时候,用CDate函数明确地转换一下。
除了用CDdate转换外,还可以:
Dim
变量的作用范围
在代码的任何位置,我们都可以用Dim语句定义变量,但是不同位置定义的变量,其作用范围是不同的。
变量的作用范围原理如下:如果在流程语句之内定义的,则只在该流程语句之内以及嵌套的字流程语句内有效,如果在流程语句之外定义的,则在该段代码的任何位置有效。
为说明上述原理,我们哟内一些例子说明,这些代码本身没有意义,甚至显得非常冗余,但是可以很好地说明问题:
示例一
下面的代码能够正常执行:
Dim
示例二
下面的会报错,问题出在最后一行代码,因为变量n是在If语句内定义的,不能在If语句之外使用:
Dim
示例三
不同的流程语句内,可以定义同名的变量,例如在下面的代码中,我们在四个地方定义了名称为n的变量:
Dim
实际使用的时候,如果某一个变量需要在不同的流程中使用,应该直接在流程外定义,如果某个变量只在流程内使用,那么就应该在该流程内定义。
示例四
在流程语句之内定义的变量,可以在子流程内使用,例如下面的代码中,变量n是在If语句中定义的,在嵌套的子流程Select Case语句中也使用了该变量:
Dim
m As Integer = 1
示例五
流程内和流程外,不能有同名的变量,例如下面的代码会出现错误,这是因为变量n同时在流程内和流程外定义了:
Dim
m As integer再谈空值
我们前面已经提到过,空值用Nothing表示。例如需要删除订单表某行客户列的内容,可以:
Tables(
或
DataTables("订单").DataRows(1)("客户") = Nothing
如果要判断某一列的内容为空,可以:
If Tables(
或
If DataTables("订单").DataRows(1).IsNull("客户") Then
'代码
End If
你也许会感到奇怪,为什么要用IsNull判断,而不能用下面的方法判断呢:
If Tables("订单").Rows(1)("客户") Is Nothing Then
'代码
End If
这是因为即使某列的值为空,其返回的值也不会是Nothing。
在某列内容为空的时候,会根据不同的列类型,返回不同的值,规则如下:
字符列:""
数值列:0
逻辑列:False
日期列:#0001-01-01 0:00:00#
收到
写入帮助中