2005年经历的VB及Oracle SQL的几则编程经验?

以下是在程序的修改过程中我收集的自己或他人遇到的几个常见问题及解决办法,希望对大家有所帮助.

地雷1:

msf.cols做为计算基础,msf.TextMatrix(3,4)按固定列引用,这两种情况都为将来的程序修改埋下了隐患.

排雷:

使用枚举变量或常量

地雷2:

integer的使用,cint的使用,由于记录数或行数超过数据类型的最大值而出错,

排雷:

最好用long型变量和clng函数,除非你确认只有非常少的数据.

地雷3:

SetFocus时,窗体未显示,cbo.text赋值时,窗体未显示

排雷:

在控件的SetFocus调用和cbo.text赋值时先判断可见性.

地雷4:

对于同一个记录集对象,如果第一次使用时用了Filter或MoveNext等方法,

第二次使用时,只用了rstmp.close方法,再打开新的记录集,则会出现错误:

ADO没找到应用程序要求的对应名称或序号,在对应所需名称或序数的集合中,未找到项目。

排雷:

在第二次使用同一个记录集之前,重新创建新实例,set rstmp=new ADODB.Recordset

或者使用不重新创建对象,直接使用rstmp.filter=""

-----------------------------------------------------------------------

有时,一些看起来正确的事情,实际上不一定正确,有时是因为我们的误解或疏忽。

1. 通过SQL分析看到,使用了索引,就不会有性能问题

几天前,费用汇总表虽然用到了索引,但没有用到最合适的索引。

所以,有些重要的语句,我们在分析SQL时,不但要观察是否存在全表扫描,且而要观察是否用到了最合适的索引。

2. Nvl(字段1,0)=Nvl(字段2,0)可以比较两个值是否相等

Null是不能参加运算的,所以如果其中一个为空,<>运算结果是Flase

正确的应该是: 字段1 Is Null And 字段2 Is Null Or 字段1=字段2

3. MshFlexGrid网格控件,没有指定每列列宽,采用缺省列宽,保存窗体状态后,可以恢复列宽。

虽然界面上看到有列宽,但实际上列宽值是-1,只有在你调整宽度后才会有值。所以,如果打印预览,将看不到未调整过列宽的列。

4. 存储过程中,Select Fied1 Into v_variable From Table1,即:如果从表的一行记录中取一个值赋给一个变量,值为空时要出错,需要加上防错处理。

其实,值为空时,是不会出错的,只有取不到任何记录时,才会出错,所以,不必加上不必要的Begin Exception End;

另外,在函数中,即使取不到任何记录,也不会出错。