Office中国论坛/Access中国论坛

标题: 请教VBA里的查询问题 [打印本页]

作者: htkcdj    时间: 2005-9-8 16:28
标题: 请教VBA里的查询问题
请问在ACCESS的代码里写了一个查询语句,希望能作为一个子窗体的数据源,可是无法运行个查询,用docmd.runsql和execute均无法执行,最后从帮助文件里看到runsql是用在宏里面,那么在VBA里用什么命令来执行用代码写成的查询呢?

另外,我还使用了如下语句也不行

         Form_CLJG.RecordSource=""SELECT  *  " & _

                                                  "FROM 材料价格 " & _

                                                  "WHERE ((材料价格.材料ID)=CLID)" "

[此贴子已经被作者于2005-9-8 9:09:41编辑过]


作者: 海狸先生    时间: 2005-9-8 17:07
请把完整语句贴上来
作者: LucasLynn    时间: 2005-9-8 17:55
以下是引用htkcdj在2005-9-8 8:28:00的发言:



请问在ACCESS的代码里写了一个查询语句,希望能作为一个子窗体的数据源,可是无法运行个查询,用docmd.runsql和execute均无法执行,最后从帮助文件里看到runsql是用在宏里面,那么在VBA里用什么命令来执行用代码写成的查询呢?

另外,我还使用了如下语句也不行

         Form_CLJG.RecordSource=""SELECT  *  " & _

                                                  "FROM 材料价格 " & _

                                                  "WHERE ((材料价格.材料ID)=CLID)" "





引号用法问题,等号后面的语法必须是标准的VBA表达式。
作者: htkcdj    时间: 2005-9-8 18:04
Private Sub 施工项目名称_GotFocus()

    Dim CL As String

    Dim CLID As Integer    CLID = Form_xmdj.[材料ID]

    Form_CLJG.RecordSource = ""

    CL = "SELECT 材料价格.ID, 材料价格.材料名称及规格型号, 材料价格.单位, 材料价格.供应单价(元), 材料价格.备注, 材料价格.工程类别, 材料价格.分包方式, 材料价格.所在地区, 材料价格.分包时间, 材料价格.材料ID INTO 材料" & _

         "FROM 材料价格 " & _

          "WHERE ((材料价格.材料ID)=CLID)"

   

     'Execute (CL)

     'DoCmd.RunSQL CL

     Form_CLJG.RecordSource = CL

     Form_CLJG.Requery

     Form_CLJG.RefreshEnd Sub请海狸先生帮帮忙
作者: LucasLynn    时间: 2005-9-8 18:06
至少:

"INTO 材料"和"FROM"之间缺少空格。
作者: htkcdj    时间: 2005-9-8 18:08
这是我在这里写错了,我刚将将完整的代码贴上去。
作者: LucasLynn    时间: 2005-9-8 18:08
以下是引用htkcdj在2005-9-8 10:08:00的发言:

这是我在这里写错了,我刚将将完整的代码贴上去。



说的就是你的完整代码
作者: htkcdj    时间: 2005-9-8 18:10
into 材料 是我最后加上去的,我在宏里面执行时可以另外生成一个材料表,最初是没有into 的,在宏里面没有into是不行的。
作者: htkcdj    时间: 2005-9-8 18:12
现在是运行到Form_CLJG.RecordSource = CL就不行了


作者: LucasLynn    时间: 2005-9-8 18:14
以下是引用htkcdj在2005-9-8 10:10:00的发言:

into 材料 是我最后加上去的,我在宏里面执行时可以另外生成一个材料表,最初是没有into 的,在宏里面没有into是不行的。

你这个SQL表达式能作为数据源吗?宏里面的SQL不要求返回数据集,但是作为数据源必须有数据集返回,也就是选择表查询,而你这个是生成表查询,是不能作为数据源的。

并不是所有合法的SQL语句都能作为数据源。

[此贴子已经被作者于2005-9-8 10:14:28编辑过]


作者: htkcdj    时间: 2005-9-8 18:14
'Execute (CL)

     'DoCmd.RunSQL CL

     Form_CLJG.RecordSource = CL

这三条语句均不能运行,我用的是OFFICE XP版本的ACCESS
作者: htkcdj    时间: 2005-9-8 18:17
我说的最初是没有INTO的,也不能作为数据源,最后想生成一个表来作为数据源,所以加了INTO,和Form_CLJG.RecordSource ="材料" 可是还是不行啊,最后没有改过来。


作者: LucasLynn    时间: 2005-9-8 18:18
以下是引用htkcdj在2005-9-8 10:14:00的发言:



'Execute (CL)

     'DoCmd.RunSQL CL

     Form_CLJG.RecordSource = CL

这三条语句均不能运行,我用的是OFFICE XP版本的ACCESS

这三句里面:

Execute是过程调用命令,和SQL根本无关。

DoCmd.RunSQL可以正确执行。

RecordSource必须要求你的SQL执行结果是一个数据集。
作者: LucasLynn    时间: 2005-9-8 18:19
以下是引用htkcdj在2005-9-8 10:17:00的发言:



我说的最初是没有INTO的,也不能作为数据源,最后想生成一个表来作为数据源,所以加了INTO,和Form_CLJG.RecordSource ="材料"

可是还是不行啊,最后没有改过来。



去掉INTO,就能作为数据源了。
作者: htkcdj    时间: 2005-9-8 18:21
谢谢,我去试试看
作者: htkcdj    时间: 2005-9-8 18:23
谢谢,可以作为数据源了,非常感谢,但是最初用docmd.runsql是不能运行的。
作者: LucasLynn    时间: 2005-9-8 18:24
以下是引用htkcdj在2005-9-8 10:23:00的发言:



谢谢,可以作为数据源了,非常感谢,但是最初用docmd.runsql是不能运行的。



DoCmd.RunSQL当然不能运行了。
作者: htkcdj    时间: 2005-9-8 18:38
还得再请教版主,我已通过CLID = Form_xmdj.[材料ID]将当前行材料ID值赋给CLID,在运行时也可以看到确实也赋成功了,为什么运行时还要我输入CLID的值呢?
作者: LucasLynn    时间: 2005-9-8 18:44
VBA里面没有这样的写法。去掉方括号。
作者: htkcdj    时间: 2005-9-8 18:46
已去,结果还是一样
作者: LucasLynn    时间: 2005-9-8 18:50
以下是引用htkcdj在2005-9-8 10:46:00的发言:

已去,结果还是一样



程序发上来。
作者: htkcdj    时间: 2005-9-8 19:13
我已把文件打包了,可没有往论坛上传过,如何把程序发到论坛上。
作者: htkcdj    时间: 2005-9-8 19:25
我现在在局域网上,无法通过超级连接把程序给传上来
作者: htkcdj    时间: 2005-9-9 00:53
版主您好,我无法将程序传上来,我在这里将情况详细向你介绍一下,希望能再得到你的指导。我上面说SQL查询语句可以作为数据源了,但那个查询是参数查询,需要每次输入参数。原来的代码如下: CLID = Form_xmdj.[材料ID]

    Form_CLJG.RecordSource = ""

    CL = "SELECT 材料价格.ID, 材料价格.材料名称及规格型号, 材料价格.单位, 材料价格.供应单价(元), 材料价格.备注, 材料价格.工程类别, 材料价格.分包方式, 材料价格.所在地区, 材料价格.分包时间, 材料价格.材料ID " & _

         "FROM 材料价格 " & _

          "WHERE ((材料价格.材料ID)=CLID)"在这些代码里,CLID = Form_xmdj.材料ID 确实把Form_xmdj.材料ID赋给了CLID,但是在"WHERE ((材料价格.材料ID)=CLID)"里,CLID仅是提醒用户输入的参数,它的值并没有作为查询的条件。如果将CLID改为“请输入材料ID”,仍然可以运行,照样是要求输入参数。我现在希望它能自动运行,只需要这个控件获得焦点,与其相对应的材料就自动被查询出来,不用再手工输入参数,还有其他办法能解决这个问题吗?




作者: LucasLynn    时间: 2005-9-9 00:56
以下是引用htkcdj在2005-9-8 11:13:00的发言:



我已把文件打包了,可没有往论坛上传过,如何把程序发到论坛上。

不要总是用帖子下面的回复来回复,点回复本贴,就能上传附件。
作者: htkcdj    时间: 2005-9-9 01:05
主要是form_xmdj里的那一段代码,请版主指教。
作者: htkcdj    时间: 2005-9-9 01:06
[attach]12997[/attach]


作者: htkcdj    时间: 2005-9-9 01:09
在打开的窗体里点“施工项目名称”就会出现那个问题。
作者: LucasLynn    时间: 2005-9-9 01:53
         "WHERE 材料价格.材料ID = Forms![分包价格信息]![分包单价信息].Form![材料ID]"
作者: LucasLynn    时间: 2005-9-9 01:54
窗体作为子窗体载入的时候,不会触发Form_Load,也不会加入Forms集合,所以用Forms直接索引是找不到的。
作者: htkcdj    时间: 2005-9-9 17:07
非常感谢版主!现在可以运行了。




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