VB怎样在两个VB程序之间传递信息?

这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。

第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。

在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的中ByRef关键字,它代表传引用。

对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1.

再看第10行,对于过程B,它的方式使用了ByVal关键字(即传值)

对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。

上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。


看完上面解析是不是有一种想测试的冲动? 您可以下载:

 不错VB代码,收藏!!! 收藏

'定义一个连接对象.通常在一个工程中只要有一个就足够了,在启动之初建立连接,而在退出时销毁
'相关细节介绍见<ADO三大对象的属性、方法、事件及常数>

注意:上表所列属性是ADODB.Recordset对象的标准属性,即那些被关系数据库的大多数通用OLE DB数据提供者所支持的属性。带星号的属性表示它与DAO.Recordset或rdoResultset对象的相应属性完全一样或很接近。

注:事件处理模块的函数头几乎都用到了adReason参数。该参数的取值见adReason参数用到的常数。

adPosUnknown 数据提供者不支持页面,Recordset为空,或数据提供者不能确定页码。
adPosBOF 记录指针定位于文件开头(BOF属性值为True)
adPosEOF 记录指针定位于文件结尾(EOF属性值为True)

adUseServer 使用数据源提供的游标,通常(但非绝对)位于服务器上(默认值)

adEditAdd 临时添加一条记录,但尚未存入数据库的表中
adEditInProgress 当前记录中的数据已经改动,但尚未存入数据库的表中

Filter属性用到的常数

adLockOptimistic 使用乐观锁(仅在更新过程中才锁定记录或页面)
adLockPessimistic 使用悲观锁(编辑或更新整个过程中均锁定记录或页面)

我要回帖

更多关于 程序参数传递四种形式 的文章

 

随机推荐