VB 重入问题
VB 是很古老的开发语言了, 当你使用过 java 等 OO 开发之后, 如果再使用VB , 那你会尝试 VB 使用 OO 开发,
事实上, 仍是可行了. 象 MVC 这样的模式也可以类似地做到(就象 asp ,php 现也是使用 MVC 一样). 最重要的原因是, VB 也可以使用 class
java 中, 有 ORM 技术, 自己尝试做了个 VB 的 ORM 类, 自己使用还可以.
这个一个类, 使用如下:
dim dbRow as cls_dbrow Set dbRow = new cls_dbrow rs.Open SQL, cn, 3, 3 dbRow.setRecord rs msgbox dbRow.g("name")
对于效能如何, 我不知道, 只是想自己开发方便.
然这两天, 让我差点放弃了这个类, 原因是开发一个项目, 在一个页面上使用这个类, 开发状态下没有异常, 生成exe文件, 运行后总是报错, 然后就强行被关闭程序. 这个一个严重的问题, 让人如何使用?
可是心有不甘, 这个类也花了不少时间才完成的, 就这么放弃了事小, 主要是开发变得困难了, 有时要分别取几次SQL数据, 然后对这些数据进行判断, 进行整合, 得到新数据, 有cls_dbrow, 可以方便点.
耐心地调试, 跟踪代码, 之前使用的是 自认为是最笨的方法了, 在多处程序中打印 log, 看出问题是在哪些代码段. 如果 log 可以打印出来, 就认为 log 之前的代码是正确的. 这次的事实说明, 是有例外的.
dbrow.g("...") ... ... msgbox "test 1" ....
由于有显示 "test 1", 而程序是在显示这个这后, 才被强制关闭的. 所以总在 "test 1" 之后的代码中找问题. 没有结果.
今天刚想到之前 dbrow 运行了这么多次, 并没有问题, 是不是之前某段的代码有问题导致的? 有这个思路后, 就对"test 1"之前的代码进行分段屏蔽, 看是什么代码导致程序异常, 终于找到了问题代码:
If dbRow.g("status") = common.DB_RECORD_STATUS_CONFIRM Or dbRow.g("status") = common.DB_RECORD_STATUS_DELETE Then ... end if
在这个 if 语句中, 调用了两次 dbRow.g("..."), 进一步测试:
msgbox dbRow.g("status") & dbRow.g("id")
这一行没有问题.
因此, 判断认为: IF语句有重入问题. 就是说: 运行IF 语句, 是同时进行判断 语句中的条件. 这样导致问题. 再测试以下, 使用两个实例, 就没有问题了.
If dbRow1.g("status") = common.DB_RECORD_STATUS_CONFIRM Or dbRow2.g("status") = common.DB_RECORD_STATUS_DELETE Then ... end if
目前看起来无解, 只有记住 if 语句中, 不使用使用两次以上 dbrow. 幸运的是, 记住这个就可以继续使用 dbrow 了.
后记: 以上解析很自认为, 然后调整一下代码, if 语句是还是可以使用两次 dbrow 的, 这样的话, dbrow 是不是不能使用了呢?
如何知道, 什么时候可用还是不可用?