Office中国论坛/Access中国论坛

标题: 用SQL语言怎么将结果展示在窗体的文本框中 [打印本页]

作者: cao_yin    时间: 2010-12-21 12:43
标题: 用SQL语言怎么将结果展示在窗体的文本框中
目前我正在用的是先建一个查询,然后用查询创建一个子窗体,在把子窗体拖到窗体里。

另外一种方法就是用Dlookup。

目前我发现的困难就是用子窗体太麻烦了,不方便。

用Dlookup需要太长的参数,表达起来很麻烦

我就想用Sql语言在VBA里写,然后将SELECT结果直接展示在文本框中,这样查询代码清晰,也好维护。

但我不知道该怎么在VBA里实现,或者说VBA代码该怎么写才能达到这样的效果。

作者: todaynew    时间: 2010-12-21 12:55
不知所云
作者: cao_yin    时间: 2010-12-21 13:09
todaynew 发表于 2010-12-21 12:55
不知所云

我确实表达不太清楚,我主要想表达的意思就是:

我需要在窗体文本框1中输入数字,在文本框2中显示计算结果。

中间计算需要几个变量,这几个变量是存在2个参数表里的,而且变量内容是要根据文本框1中输入的不同数字进行匹配的。

我现在的方法是 第一步:先用Dlookup将1个参数表相应字段取出来。
                          第二步:建立一个查询,在查询里取另一个参数表的字段,然后将文本框1与所有变量计算。
                          第三步:将查询建立一个子窗体,放到主窗体里。

我希望的想法是不用子窗体,就能直接将结果显示在文本框中。
另外因为用DLookUP需要的参数太长,而且不便于计算过程的展示,我想能不能在窗体的代码里使用SQL语言直接进行计算
作者: todaynew    时间: 2010-12-21 13:15
说不明白时,最好的方法就是上传你的实例,然后依据实例描述问题。
作者: cao_yin    时间: 2010-12-21 13:15
我还有另外一个问题,和上述问题有一定相关性。

我在窗体里有N各输入框,同时对应着N各结果框。

所有计算过程都是一样的,如果用子窗体,只能建立N各查询,然后每个查询建立一个子窗体,然后再放到主窗体里,能不能有类似可变参数或者宏的功能来完成这个工作。

也就是说我只有一个查询,N各查询使用一个查询,然后输出各自的结果。
作者: cao_yin    时间: 2010-12-21 13:26
我的窗体里叫“测试1”就是主窗体。

里面放了3个子窗体,每个子窗体都是用查询创建的。

我想知道不用子窗体怎么能达到这个效果。

还就是我工资 和 奖金的算法其实是一样的,可是如果要同时显示2个,我只能建两个查询,然后弄两个子窗体。

我想知道怎么能不用子窗体,用一个查询或者不用查询,直接在窗体里用代码实现。

作者: todaynew    时间: 2010-12-21 13:37
cao_yin 发表于 2010-12-21 13:26
我的窗体里叫“测试1”就是主窗体。

里面放了3个子窗体,每个子窗体都是用查询创建的。

附件好像有毛病,不可识别。是不是07版或者10版?最好用03版上传实例。
作者: cao_yin    时间: 2010-12-21 13:39
本帖最后由 cao_yin 于 2010-12-21 13:45 编辑
todaynew 发表于 2010-12-21 13:37
附件好像有毛病,不可识别。是不是07版或者10版?最好用03版上传实例。


不好意思,单位电脑文档自动加密了,已经解密了,谢谢阿
作者: todaynew    时间: 2010-12-21 15:57
cao_yin 发表于 2010-12-21 13:39
不好意思,单位电脑文档自动加密了,已经解密了,谢谢阿

[attach]44449[/attach]

[attach]44450[/attach]

如果算式不对,可直接修改下列程序中的算式:
Sub 计算()
Dim i As Long
If IsNull(Me.城市ID.Value) = False And IsNull(Me.工资收入.Value) = False And IsNull(Me.奖金收入.Value) = False Then
    Me.应税收入.Value = (Val(Me.工资收入.Value) + Val(Me.奖金收入.Value)) * (1 - Val(Me.城市ID.Column(4))) - Me.城市ID.Column(3)
    For i = 1 To Me.税率.ListCount - 1
        If Val(Me.应税收入.Value) >= Val(Me.税率.Column(1, i)) And Val(Me.应税收入.Value) <= Val(Me.税率.Column(2, i)) Then
            Me.税率.Value = Me.税率.Column(0, i)
            Exit For
        End If
    Next
    Me.应交税金.Value = Me.应税收入.Value * Me.税率.Column(3) - Me.税率.Column(4)
    Me.税后收入.Value = Val(Me.工资收入.Value) + Val(Me.奖金收入.Value) - Val(Me.应交税金.Value)
End If
End Sub

作者: cao_yin    时间: 2010-12-21 22:11
回复 todaynew 的帖子

非常感谢
作者: cao_yin    时间: 2010-12-21 22:53
真的开阔了思路,太感谢了。。。。只是有一段代码还没有太搞懂,再麻烦您一下。。

  Me.税率.Value = Me.税率.Column(0, i)

这个意思是税率那个组合框,取了下拉列表的第I行的所有数据,还是就去了第一列的第I行数据呢?

如何是前者,那个0也可以换成1,2,3之类的吧。。。

作者: cao_yin    时间: 2010-12-21 23:02
真的开阔了思路,太感谢了。。。。只是有一段代码还没有太搞懂,再麻烦您一下。。

  Me.税率.Value = Me.税率.Column(0, i)

这个意思是税率那个组合框,取了下拉列表的第I行的所有数据,还是就去了第一列的第I行数据呢?

如何是前者,那个0也可以换成1,2,3之类的吧。。。

作者: cao_yin    时间: 2010-12-22 12:49
对ACCESS不太了解,还希望各位老师多指点
作者: cao_yin    时间: 2010-12-22 15:54
todaynew 发表于 2010-12-21 15:57
如果算式不对,可直接修改下列程序中的算式:
Sub 计算()
Dim i As Long

还有一个问题,再麻烦一下,为什么循环到列表行数-1;
而不是ListCount呢?
   For i = 1 To Me.税率.ListCount - 1

作者: todaynew    时间: 2010-12-22 15:56
cao_yin 发表于 2010-12-21 23:02
真的开阔了思路,太感谢了。。。。只是有一段代码还没有太搞懂,再麻烦您一下。。

  Me.税率.Value = Me ...

列表框或组合框的Column属性的第一个参数为列,第二个参数为行,均从0开始。如果有行标题的话,行的数据从1开始,因为0行为标题。
作者: todaynew    时间: 2010-12-22 15:59
cao_yin 发表于 2010-12-22 15:54
还有一个问题,再麻烦一下,为什么循环到列表行数-1;
而不是ListCount呢?
   For i = 1 To Me.税率.L ...

因为设了行标题,所有Listcount为记录数加1,我们取数时,从1行开始到Me.税率.ListCount - 1
结束。
作者: cao_yin    时间: 2010-12-22 16:00
todaynew 发表于 2010-12-22 15:56
列表框或组合框的Column属性的第一个参数为列,第二个参数为行,均从0开始。如果有行标题的话,行的数据从 ...

那  Me.税率.Value = Me.税率.Column(0, i) 等于就取了第一列的第I行数据,

可是从后面代码来看, Me.税率.Value 是包含所有子段的内容阿?

作者: todaynew    时间: 2010-12-22 16:08
本帖最后由 todaynew 于 2010-12-22 16:10 编辑

不包含。Me.税率.Value 为组合框绑定列当前的值,组合框或列表框的Column则可以看成一个组数,这个数组包含了行来源的所有字段及记录。
作者: cao_yin    时间: 2010-12-22 20:41
todaynew 发表于 2010-12-22 16:08
不包含。Me.税率.Value 为组合框绑定列当前的值,组合框或列表框的Column则可以看成一个组数,这个数组包含 ...

Me.税率.Value = Me.税率.Column(0, i)

还是那个问题,我刚才尝试把Column(0, i) 改成Column(1, i)

结果报错了,这是为什么呢???

0表示第一列,Column(0 i) 就是组合框第i行的第一个字段的值啊??

到了下面怎么就能表示成第i行所有字段了呢?

我还是没理解,可能是比较笨吧。。


作者: todaynew    时间: 2010-12-23 07:22
Me.税率.Value 只能等于绑定列现有记录范围内的值。

作者: ty_1029    时间: 2010-12-23 11:34
其实也可以考虑用LISTVIEW控件,集合SQL的记录集,做查询也是很方便的
作者: cao_yin    时间: 2010-12-23 13:36
todaynew 发表于 2010-12-23 07:22
Me.税率.Value 只能等于绑定列现有记录范围内的值。

如何我组合框绑定列是2的话,那么就要写Column(1 i)了?
作者: todaynew    时间: 2010-12-23 13:55
cao_yin 发表于 2010-12-23 13:36
如何我组合框绑定列是2的话,那么就要写Column(1 i)了?

yes
作者: cao_yin    时间: 2010-12-23 15:57
todaynew 发表于 2010-12-23 13:55
yes

太感谢您了,看我真的要好好学习一下了。




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