给你提个变通的主意可以判断一下 当然是if条件句 if str=null then str=0 end if 之类,如果觉得麻烦可以写成一个过程或函数!
or iif(isnull(rs("field")),0,rs("field") )
我也遇到过类似的问题,我觉得最好的解决办法,我认为是在设计数据库的时候就将这些数值型的字段的默认值设为0,还有一种方法就是在执行这些语句之前写一个UPDATE语句,把所有为NULL的记录置为0,具体做法如下 dim cmd as command set cmd=new command cmd.activeconnection=conn cmd.execute "update temp set a_count=0 where a_count is null" 这几个语句我并没有调试,也许有的关键字会有错误的。 上面的一些方法也是可以的,不过我不主张把数值型的数据填为NULL,因为这样在统计的时候一定会出现问题,这个我是深有体会,我曾经做过一个纵向求和,也就是列求和,这是不能采取上面的方法的,这就只能用我的这种方法了。
//在VB中解决 :) 定义公共的记录集对象 public rs as ADODB.Recordset再定义一个转换的函数 Function myConvert(Bool As Boolean, Fieldname As String) As Long If Bool = False Then myConvert = rs(name).Value Else myConvert = 0 End If End Function调用: set rs=myred Do Until myred.EOF total1 = myConvert(isnull(myred("a_count")),"a_count") + myConvert(isnull(myred("b_count")),"b_count") + .....
定义一个函数: '如果字段值为NULL值或空串,则设其为0 Public Function ifZero(ByVal Var As Variant) As Variant If IsNull(Var) Or Trim(Var) = "" Then ifZero = 0 Else ifZero = Var End If End Function
'如果字段值为NULL值或空串,则设其为0 Public Function ifZero(ByVal Var As Variant) As Variant If IsNull(Var) Or Trim(Var) = "" Then ifZero = 0 Else ifZero = Var End If End Function
'如果字段值为NULL值或空串,则设其为0 Public Function ifZero(ByVal Var As Variant) As Variant If IsNull(Var) Or Trim(Var) = "" Then ifZero = 0 Else ifZero = Var End If End Function
'相关处理
end if
当然是if条件句
if str=null then
str=0
end if
之类,如果觉得麻烦可以写成一个过程或函数!
iif(isnull(rs("field")),0,rs("field") )
dim cmd as command
set cmd=new command
cmd.activeconnection=conn
cmd.execute "update temp set a_count=0 where a_count is null"
这几个语句我并没有调试,也许有的关键字会有错误的。
上面的一些方法也是可以的,不过我不主张把数值型的数据填为NULL,因为这样在统计的时候一定会出现问题,这个我是深有体会,我曾经做过一个纵向求和,也就是列求和,这是不能采取上面的方法的,这就只能用我的这种方法了。
上面的看得懂吗??
那么 val(NUll&"")=0 看得懂吗?那么现在处理数据库中会出现的问题
对于任何形态的字段,最怕的就是Null
string型
rst("aaa")&""
如果rst("aaa")=Null
那么rst("aaa")&""=""
否则
假设rst("aaa")="abc"
那么rst("aaa")="abc"没什么影响吧数值型 val(rst("aaa")&"")
如果rst("aaa")=Null
那么rst("aaa")&""=""
val(rst("aaa")&"")=0
如果rst("aaa")=9
那么 val(rst("aaa")&"")=9没什么影响吧所以,在获取数据库的字段的值的时候先 &""然后作类型转换就可以避免Null了
不用写什么方法去判断修改了
但是,我想知道在VB程序中如何将数字型字段的值为Null的字段一次性批量替换成0。
total1 = val(.Fields("a_count")&"") + val(.Fields("b_count")&"") + val( .Fields("c_count")&"") + val( .Fields("d_count")&"")
换成这样你调试一下看看!
记住这一点,任何字符串&""都与它本身或"",所以利用val函数会将""转换成0这一特性,我们不用判断就可以将Null转换成 0,其他数值不变!你自己在立即窗体下试验一下如下代码
?val("")
?val("dhfhg67")
?val("123fghj565")
?val("35647.00")
看看是什么结果!
定义公共的记录集对象
public rs as ADODB.Recordset再定义一个转换的函数
Function myConvert(Bool As Boolean, Fieldname As String) As Long
If Bool = False Then
myConvert = rs(name).Value
Else
myConvert = 0
End If
End Function调用:
set rs=myred
Do Until myred.EOF
total1 = myConvert(isnull(myred("a_count")),"a_count") + myConvert(isnull(myred("b_count")),"b_count") + .....
'如果字段值为NULL值或空串,则设其为0
Public Function ifZero(ByVal Var As Variant) As Variant
If IsNull(Var) Or Trim(Var) = "" Then
ifZero = 0
Else
ifZero = Var
End If
End Function
Public Function ifZero(ByVal Var As Variant) As Variant
If IsNull(Var) Or Trim(Var) = "" Then
ifZero = 0
Else
ifZero = Var
End If
End Function
Public Function ifZero(ByVal Var As Variant) As Variant
If IsNull(Var) Or Trim(Var) = "" Then
ifZero = 0
Else
ifZero = Var
End If
End Function