设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] 用查询(已附例):表字段的记录添加到查询的字段记录

[复制链接]
跳转到指定楼层
1#
发表于 2009-5-19 22:24:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 luhao 于 2009-5-20 18:40 编辑

如主表A
流水单  备注
123
明细表B
流水单ID 产品   数量
123       产品1  5
123       产品2  15
查询结果如下:

流水单 备注 所有产品            所有数量
123           产品1、 产品2      20

这是很特殊的查询的。第一次例子传在三楼可能很难找,现再传在顶楼。请老师们指教。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2009-5-19 23:33:24 | 只看该作者
传例子
3#
 楼主| 发表于 2009-5-20 18:38:16 | 只看该作者
传例子
Henry D. Sy 发表于 2009-5-19 23:33

请过目

本帖子中包含更多资源

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

x
4#
 楼主| 发表于 2009-5-21 07:16:46 | 只看该作者
请问有没老师帮我可以解决
5#
发表于 2009-5-21 09:56:27 | 只看该作者
一个不太好的办法:
建个二个函数 产品字符 数量合计
产品字符:通过DISTINCT对流水单ID查询唯一值 循环用 & 连起来生成你要的产品字符串
数量合计:也一样,用 + 累加
(这样做就是感觉数据多的话会慢,期待有更好的办法)
6#
发表于 2009-5-21 11:49:52 | 只看该作者
Private Sub Command8_Click()
    Dim rs As New ADODB.Recordset
    Dim rsSource As New ADODB.Recordset
    Dim strSQL As String
    Dim i As Integer
    Dim a As String, b As Long
    Dim WhereArray() As String

    If IsHere("Newtbl") Then
        CurrentDb.Execute "drop table newtbl"
    End If
    strSQL = "create table Newtbl(流水号 text,备注 text ,产品 text,数量 long)"
    CurrentDb.Execute strSQL

    strSQL = "select distinct 流水单id from 明细表"
    With rsSource
        .Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
        ReDim WhereArray(.RecordCount - 1) As String
        For i = 1 To .RecordCount
            WhereArray(i - 1) = .Fields(0)
            .MoveNext
        Next
        .Close
    End With
    With rs
        .Open "Newtbl", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
        For i = 0 To UBound(WhereArray)
            strSQL = "select  * from 明细表 where 流水单id='" & WhereArray(i) & "'"
            rsSource.Open strSQL, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
            Do While Not rsSource.EOF
                a = a & rsSource.Fields(1) & " "
                b = b + rsSource.Fields(2)
                rsSource.MoveNext
            Loop
            rsSource.Close
            .AddNew
            .Fields(0) = WhereArray(i)
            .Fields(2) = a
            .Fields(3) = b
            .Update
            a = ""
            b = 0
        Next
        .Close
    End With
    Set rs = Nothing
    Set rsSource = Nothing
    DoCmd.OpenTable "Newtbl"
End Sub

Function IsHere(tblName As String) As Boolean
    Dim tbl As DAO.TableDef
    IsHere = False
    For Each tbl In CurrentDb.TableDefs
        If tbl.Name = tblName Then
            IsHere = True
            Exit For
        End If
    Next
End Function

本帖子中包含更多资源

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

x
7#
 楼主| 发表于 2009-5-21 12:16:15 | 只看该作者
本帖最后由 luhao 于 2009-5-21 19:40 编辑
Private Sub Command8_Click()
    Dim rs As New ADODB.Recordset
    Dim rsSource As New ADODB.Recordset
    Dim strSQL As String
    Dim i As Integer
    Dim a As String, b As Long
    Dim WhereA ...
Henry D. Sy 发表于 2009-5-21 11:49

首先多谢你,如果换成生成查询表,会不会很慢的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-22 15:38 , Processed in 0.095710 second(s), 32 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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