设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1760|回复: 8
打印 上一主题 下一主题

[窗体] 【求助】执行查询后,子窗体temp表得不到查询中指定列的数据

[复制链接]
跳转到指定楼层
1#
发表于 2016-1-18 10:41:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 紫风 于 2016-1-18 10:50 编辑

    主窗体 cbo线路 刷新后,需要执行查询"qry库存"(这是个联合查询,应该没有问题吧?),然后将查询到的特定字段值给到表"tbl明细temp",代码如下,好像哪里出问题了,麻烦大家帮忙看一下,谢谢!

    If IsNull(DLookup("[单号]", "tbl出库", strfilter)) Then
        DoCmd.OpenQuery "qry库存"
        stemp = "select [qry库存].[货物],[qry库存].[城市],[qry库存].[品牌],[qry库存].[库存数] from [qry库存] where 线路= ' " & Me.cbo线路 & " '"
        DoCmd.RunSQL "Delete [tbl明细temp].* FROM [tbl明细temp]"
        DoCmd.RunSQL "insert into tbl明细temp(货物,城市,品牌,预出数) values(stemp.[货物],stemp.[城市],stemp.[品牌],stemp.[库存数])"
        
    End If
   
    Me.frm明细chd.Requery

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2016-1-18 11:23:12 | 只看该作者
本帖最后由 roych 于 2016-1-18 11:27 编辑

If IsNull(DLookup("[单号]", "tbl出库", strfilter)) Then
        DoCmd.OpenQuery "qry库存"
'-----选择查询是不需要打开的。
        stemp = "select [qry库存].[货物],[qry库存].[城市],[qry库存].[品牌],[qry库存].[库存数] from [qry库存] where 线路= ' " & Me.cbo线路 & " '"
'-----这句用来干什么不清楚。如果是用来创建查询请先建立,如果已存在则请定义QueryDef,再以此语句来设置SQL。
        DoCmd.RunSQL "Delete [tbl明细temp].* FROM [tbl明细temp]"
        DoCmd.RunSQL "insert into tbl明细temp(货物,城市,品牌,预出数) values(stemp.[货物],stemp.[城市],stemp.[品牌],stemp.[库存数])"
'这句绝对是有问题的。如果需要使用查询的值,请使用ADO【当然,也可以在打开查询后复制查询的值,不过并不比上面的方法方便】.
'如果需要使用窗体的值,请修改查询语句。

    End If
   
    Me.frm明细chd.Requery

-------------------------------
好了,不说了。简单的解决办法是:
1、以库存为源建立一个查询,条件为:Me.cbo线路,假定为“库存子窗体查询”
2、将该查询绑定到一个子窗体中。
3、创建一个追加查询,条件设置为子窗体的值。大体语句如下:
  1. INSERT INTO  tbl明细temp(货物,城市,品牌,预出数)
  2. SELECT [Forms]![frm主窗体][库存子窗体]![货物] AS 货物, [Forms]![frm主窗体][库存子窗体]![城市]  AS 城市, [Forms]![frm主窗体][库存子窗体]![品牌] AS 品牌 [Forms]![frm主窗体][库存子窗体]![预出数]  AS 预出数
  3. FROM 库存子窗体查询;
复制代码
注:用values也是可以的,不过需要考虑到文本和数字的区别。"INSERT INTO  tbl明细temp(货物,城市,品牌,预出数)  values(' " & [Forms]![frm主窗体][库存子窗体]![货物] &"',"………………
3#
 楼主| 发表于 2016-1-18 12:14:00 | 只看该作者
roych 发表于 2016-1-18 11:23
If IsNull(DLookup("[单号]", "tbl出库", strfilter)) Then
        DoCmd.OpenQuery "qry库存"
'-----选 ...

谢谢 ROYCH 版主!
库存是列出来了,但是代码只能将库存的第一行数据插入到temp表中。
详细说:
就是列出了49行库存,每行是不同的城市,但是追加到temp表中的数据都只是第一行城市的库存,而且重复49次了……
4#
发表于 2016-1-18 12:20:22 | 只看该作者
紫风 发表于 2016-1-18 12:14
谢谢 ROYCH 版主!
库存是列出来了,但是代码只能将库存的第一行数据插入到temp表中。
详细说:

是的。这个代码里只能将第一行追加进去。如果有多行的话,请将子窗体的数据源作为查询的数据源,重新建立一个追加查询。
不过我觉得你的数据库逻辑应该是有问题的。
5#
 楼主| 发表于 2016-1-21 15:13:12 | 只看该作者
roych 发表于 2016-1-18 12:20
是的。这个代码里只能将第一行追加进去。如果有多行的话,请将子窗体的数据源作为查询的数据源,重新建立 ...

版主,库存我列出来也插入到temp表里了,但是主窗体里有个me.单号,但是列出的库存不会有这个单号,我想插入temp表时也将主窗体的单号插入进去,可以实现吗?
代码如下,麻烦帮看看,谢谢!
Private Sub cbo线路_AfterUpdate()
    Dim strfilter As String
        strfilter = "[单号] = '" & Me.单号 & "'"
        If IsNull(DLookup("[单号]", "tbl出库", strfilter)) Then
            Me.Form.Refresh
            DoCmd.SetWarnings False
            DoCmd.RunSQL "Delete [tbl明细temp].* FROM [tbl明细temp]"
            DoCmd.RunSQL "insert into tbl明细temp SELECT [qry库存].[货物],[qry库存].[城市],[qry库存].[品牌],[qry库存].[库存数] AS [预出数] FROM [qry库存]"
            DoCmd.SetWarnings True
               
        Else
            Exit Sub
        End If
        
        Me.frm明细chd.Requery
            
End Sub
6#
发表于 2016-1-21 15:49:14 | 只看该作者
引用过去就好了,像我在2L的SQL语句那样。
7#
 楼主| 发表于 2016-1-21 15:57:02 | 只看该作者
roych 发表于 2016-1-21 15:49
引用过去就好了,像我在2L的SQL语句那样。

谢谢版主的意见,可以2L的不是只能插入一行记录吗?我是要将查询出来的所有库存记录都插入TEMP表哦……
等于就是:
在TEMP表每插入一行,temp.单号=[forms]![主窗体].[单号],每行的单号都和主窗体的单号相同,而其它如货物、品牌、城市、数量那些,就都根据查询出来的库存来。
8#
发表于 2016-1-21 16:08:22 | 只看该作者
本帖最后由 roych 于 2016-1-21 16:19 编辑
紫风 发表于 2016-1-21 15:57
谢谢版主的意见,可以2L的不是只能插入一行记录吗?我是要将查询出来的所有库存记录都插入TEMP表哦……
...

INSERT INTO  tbl明细temp(货物,城市,品牌,预出数)
SELECT [Forms]![frm主窗体]![货物] AS 货物,  库存子窗体查询.城市, 库存子窗体查询.品牌 [Forms]![frm主窗体]库存子窗体查询.预出数
FROM 库存子窗体查询;
---这里假定库存子窗体查询是一个查询
可能你不太理解吧。由于前面那段代码没有涉及到查询数据源的数据,所以只有1条记录。像上面的代码就不可能只有1条记录了,——除非查询数据源只有1条记录。
好好理解里面的查询语句吧。。。。最后说一句,如果需要 解决问题,应该上传附件,而不是一味地贴代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
 楼主| 发表于 2016-1-21 16:35:23 | 只看该作者
roych 发表于 2016-1-21 16:08
INSERT INTO  tbl明细temp(货物,城市,品牌,预出数)
SELECT [Forms]![frm主窗体]![货物] AS 货物,  库存 ...

谢谢版主!我明白了,一直以为SELECT都是只能从一个表或查询里拿数据……原来还可以这样的。
问题解决了,万分感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-7 20:38 , Processed in 0.405581 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表