Office中国论坛/Access中国论坛

标题: [求助]如何在Access里合并文本? [打印本页]

作者: yiyucoco    时间: 2011-7-29 15:32
标题: [求助]如何在Access里合并文本?
D订单  货名
1 1101  ACCESS
2 1102  ACCESS
3 1103  ACCESS
4 1104  EXCEL
5 1105  EXCEL

我想把上面的记录变成:
ID 订单 货名
1.2.3 1101.1102.1103 ACCESS
4.5  1104.1105 EXCEL

应该怎么做呢?请教~
作者: roych    时间: 2011-7-29 16:05
用ADO打开记录集,再用For循环写入,详细可搜索“来回折腾”。
作者: yiyucoco    时间: 2011-7-29 16:35
有没有SQL语句可以实现?
因为我希望做成的结果可以生成一个查询表,我还要用这个表来做报表源数据呢。。。
作者: roych    时间: 2011-7-29 17:30
本身是必须要建立一个表才能用ADO写入的(总不能写在原表上吧?)。只是这样做,统计起来并不太顺利吧?
实例先学着,不懂的地方再提问。
作者: yiyucoco    时间: 2011-7-29 17:41
我泪目了。。。完全看不懂。还没到能看懂的层次。
前天刚买了书,我先研究一下争取能看懂那些代码不懂再来问好了。
作者: zhuyiwen    时间: 2011-7-29 19:58
自定义函数 - 字段字符串聚合连接函数 DCONCAT
http://www.office-cn.net/thread-69179-1-1.html
作者: zhuyiwen    时间: 2011-7-29 21:53
回复 zhuyiwen 的帖子

我也做了一个DCountact
  1. Public Function DContact(expr As String, domain As String, grpFld As String, grpValue As Variant, Optional sp As String = ",") As String
  2.     Dim SQL As String
  3.     Dim vType As String
  4.     vType = TypeName(grpValue)
  5.    
  6.     If vType = "String" Or vType = "Date" Then
  7.         SQL = "SELECT " & expr & " FROM " & domain & " WHERE " & grpFld & " = '" & grpValue & "'"
  8.     Else
  9.         SQL = "SELECT " & expr & " FROM " & domain & " WHERE " & grpFld & " = " & grpValue
  10.     End If
  11.    
  12.     Dim rs As Recordset
  13.     Set rs = CurrentDb().OpenRecordset(SQL)
  14.    
  15.     Dim s As String
  16.     Dim i As Long, n As Long, c As Long
  17.    
  18.     n = rs.Fields.Count
  19.     Do While Not rs.EOF()
  20.         For i = 0 To n - 1
  21.             If c = 0 Then
  22.                 s = rs(i)
  23.             Else
  24.                 s = s & sp & rs(i)
  25.             End If
  26.             c = c + 1
  27.         Next
  28.         rs.MoveNext
  29.     Loop
  30.     rs.Close
  31.     Set rs = Nothing
  32.    
  33.     DContact = s
  34. End Function
复制代码

假设把你的数据存放在 表1 中,则做如下查询:
  1. SELECT DContact('ID','表1','货名',货名) AS ID, DContact('订单','表1','货名',货名) AS 订单, 货名
  2. FROM (SELECT DISTINCT 货名 FROM 表1)  AS A;
复制代码

可得如下结果:
[attach]46224[/attach]



作者: yiyucoco    时间: 2011-8-1 11:36
FROM (SELECT DISTINCT 货名 FROM 表1)  AS A

这个A是什么?

还有,DContact('ID','表1','货名',货名)
我看了您教的DCONCAT函数,字段是:DCONCAT(expr, domain, [criteria],[delimiter])
即DCONCAT(字段名, 表名,条件,分隔符)
所以我就迷惑了。。。后面两个货名是什么意思啊?

啊啊。。这个对我来说太难了。。能不能求QQ一步一步指教?谢谢啦~~
作者: roych    时间: 2011-8-1 16:14
1、A表示的是将获取的查询命名为A。有时候不想做太多查询,想嵌套子查询进去的话,往往通过临时命名一下(按这个实例,通过分组查询应该可以简化一下,不过暂时没调试,你可以先试下)。
2、这个自定义函数可能还没达到你看懂的时候。第一个是需要显示的查询字段名,第二个是查询数据源的表名称,第三个是查询条件的字段名,第四个是查询条件值(即货名:Access、Excel等等)。
这个要有些基础才好说(貌似在打击你……请见谅),至少要对ADO和For循环等语句有所了解,讲起来才方便。
作者: tz-chf    时间: 2011-8-3 11:44
做记录集,按货名排序,再循环,如果你会操作记录集的话。




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