Office中国论坛/Access中国论坛

标题: 请问这段代码错在哪里 [打印本页]

作者: 简    时间: 2011-4-2 11:04
标题: 请问这段代码错在哪里

Private Sub cmdsave_Click()
Dim strFrm As Form
Dim strcount As Integer
   
        Set strFrm = Forms!frmCXgr

        strcount = DCount("*", "tbl0", strFrm.Form.sub1.Form.Filter)
        if strcount=0 then
          ……
       else
         ……
       endif

        MsgBox strcount

End Sub

我的本义是,在tbl0表中查找满足strFrm.Form.sub1.Form.Filter条件的记录。
如果有满足条件的记录,Dcount的值应该是满足条件的记录数,这些记录进行删除并把strFrm.Form.sub1子窗体中满足条件的记录重新插入tbl0表中;如果没有满足条件的记录,Dcount值应该为0,则直接插入即可。

在调试运行中,当有tbl0中没有满足条件的记录时,弹出的错误提示是:
运行时错误:3464
标准表达式中数据类型不匹配。

我找不到原因,所以请教大家,我的代码错在哪呢,应该怎么修改呢,在此先谢了。

作者: sun.gd    时间: 2011-4-2 15:24
把 strcount = DCount("*", "tbl0", strFrm.Form.sub1.Form.Filter)改成
strcount = DCount("*", "tbl0", strFrm!sub1.Form.Filter)
试下

作者: todaynew    时间: 2011-4-2 20:45
简 发表于 2011-4-2 11:04
Private Sub cmdsave_Click()
Dim strFrm As Form
Dim strcount As Integer

strFrm.Form.sub1.Form.Filter改为:
strFrm.controls("sub1").form.filter
也可这样:
set frm=forms("frmCXgr").controls("sub1").form
frm.filter

作者: adsl0125    时间: 2011-4-2 21:40
简 发表于 2011-4-2 11:04
Private Sub cmdsave_Click()
Dim strFrm As Form
Dim strcount As Integer

在调试运行中,当有tbl0中没有满足条件的记录时,弹出的错误提示是:
运行时错误:3464
标准表达式中数据类型不匹配。

出现这个点"调试",代码停在哪错哪
作者: 简    时间: 2011-4-4 10:37
再看看这段代码又错在哪里呢。

我在文本框txthxianxs属性卡上的控件来源中输入:=IIf(Val([txthxian])=0,Null,(Val([txthxian])*Val([txthx0])))
运行成功,显示正确。

因为需要,我将上述表达式放在代码中,代码如下:
Me.txthxianxs.ControlSource = IIf(Val(Me.txthxian) = 0, Null, (Val(Me.txthxian) * val(Me.txtpt0))

结果运行老是失败,错误提示是:无效使用NULL。

这是怎么回事呢,应该怎么改呢。
作者: t小宝    时间: 2011-4-4 10:45
你是要设置控件来源属性还是设置控件值,如果是控件来源应当:
Me.txthxianxs.ControlSource ="= IIf(Val(Me.txthxian) = 0, Null, (Val(Me.txthxian) * val(Me.txtpt0))"

作者: 简    时间: 2011-4-4 10:50
t小宝 发表于 2011-4-4 10:45
你是要设置控件来源属性还是设置控件值,如果是控件来源应当:
Me.txthxianxs.ControlSource ="= IIf(Val( ...

我是要用代码来设置控件值。
作者: t小宝    时间: 2011-4-4 10:52
Me.txthxianxs= IIf(Val(nz(Me.txthxian)) = 0, Null, (Val(nz(Me.txthxian)) * val(nz(Me.txtpt0)))

作者: 简    时间: 2011-4-4 10:57
t小宝 发表于 2011-4-4 10:52
Me.txthxianxs= IIf(Val(nz(Me.txthxian)) = 0, Null, (Val(nz(Me.txthxian)) * val(nz(Me.txtpt0)))

上述代码运行还是失败,提示无效使用NULL。

只有用这段代码,运行就正常。
Me.txthxianxs.ControlSource = "=IIf(Val([txthxian])=0,Null,(Val([txthxian])*Val([txthx0])))"

为什么会这样呢。
作者: t小宝    时间: 2011-4-4 11:03
试试:
Me.txthxianxs= IIf(Nz(Me.txthxian,0)=0, Null, nz(Me.txthxian,0) * nz(Me.txtpt0,0))

作者: 简    时间: 2011-4-4 11:19
t小宝 发表于 2011-4-4 11:03
试试:
Me.txthxianxs= IIf(Nz(Me.txthxian,0)=0, Null, nz(Me.txthxian,0) * nz(Me.txtpt0,0))

也不行,错误提示是:类型不匹配。

在窗体中,me.txthxian的值有可能是"",或者是数字。
作者: todaynew    时间: 2011-4-4 15:50
本帖最后由 todaynew 于 2011-4-4 15:52 编辑
简 发表于 2011-4-4 10:57
上述代码运行还是失败,提示无效使用NULL。

只有用这段代码,运行就正常。


呵呵,可算把小宝同志绕糊涂了。

正解在这里:
使用 ControlSource 属性可以指定在控件中显示的数据。可以显示和编辑绑定到表、查询或 SQL 语句中的数据。还可以显示表达式的结果。String 型,可读/写。

这就是9楼的答案为什么正确的原因所在。



作者: t小宝    时间: 2011-4-4 20:42
真是糊涂,这样应该可以:
Me.txthxianxs= IIf(Nz(Me.txthxian,0)=0 Or Nz(Me.txthxian,"")="", Null, nz(Me.txthxian,0) * nz(Me.txtpt0,0))

作者: 简    时间: 2011-4-4 21:54
t小宝 发表于 2011-4-4 20:42
真是糊涂,这样应该可以:
Me.txthxianxs= IIf(Nz(Me.txthxian,0)=0 Or Nz(Me.txthxian,"")="", Null, nz( ...

还是不行,还是提示,类型不匹配。
作者: t小宝    时间: 2011-4-4 23:11
   
作者: adsl0125    时间: 2011-4-5 05:27
Null
请参阅
Null 关键字被用来作为 Variant 子类型。它说明变量不包含有效数据。

Dim S as String
Dim I as Integer
Dim V as Variant
S = Null '无效使用Null
I = Null '无效使用Null
V = Null '正确

对于字符串,请使用 vbNullString





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3