Office中国论坛/Access中国论坛

标题: [已解决]如何把多张格式相同的表链接成一张? [打印本页]

作者: canghua    时间: 2008-4-20 09:37
标题: [已解决]如何把多张格式相同的表链接成一张?
比如有
cellkpi20080310
cellkpi20080311
............
cellkpi20080416
有这几张表。

比如想把从20080416倒数10天的表全部组合成一张表。

请问如何运用程序完成呢?谢谢。

[ 本帖最后由 canghua 于 2008-4-20 23:12 编辑 ]
作者: andymark    时间: 2008-4-20 09:45
联合查询
select * from cellkpi20080310
union
select * from cellkpi20080311
union
select * from cellkpi20080312
union
select * from cellkpi20080313
........
作者: canghua    时间: 2008-4-20 10:02
呵呵,谢谢andymark.
但是如果我想做成动态的呢?
cellkpi20080311这后面的日期会变化
还有就是union的表个数也会变化
请问该如何写呢?
作者: andymark    时间: 2008-4-20 10:12
那需要借助VBA动态生成查询了
作者: canghua    时间: 2008-4-20 10:14
是的。
我也是这样想的。
但是不知具体该如何实现。
作者: canghua    时间: 2008-4-20 10:51
哈哈
没人帮忙??
作者: huangqinyong    时间: 2008-4-20 13:01
不知你这些表是如何出现在ACCESS数据库中的?它不可能无限制的出现下去。这些如果表如果一直出现新的,那肯定是你的操作思路有问题。下面是给一个处理的思路:
1、是从EXCLE中导入的吗?如果是的话,你可以在导入时直接导入到一张表中。从而不必再麻烦做后期的工作。
2、如果是输入进去的,你可以进行整合,在窗体中数据的来源进行设置。
3、已经成在了,即一次性的,就按2楼管理员的方法进行处理。
作者: canghua    时间: 2008-4-20 14:43
谢谢楼上的哥们。
是的,这些表每天都会生成一个。
数据量比较大,如果都放在一个表里头的确是很方便,但是如果一年的数据,读取出来再做成图表速度就非常慢了。
而我们平时也就观察20天的指标变化,因此最好能够不要放在一张表里头,每天一个表,这样的话,不管access数据库在一直增长,但是我取得都是20个表的数据联合起来的结果。
这些表是通过导入txt文件得到的。
作者: canghua    时间: 2008-4-20 14:44
2、如果是输入进去的,你可以进行整合,在窗体中数据的来源进行设置。

现在就是整合的VBA程序,我不知道该怎么写,
我也很清楚,需要用联合查询,现在就是要做一个循环。
作者: huangqinyong    时间: 2008-4-20 15:38
楼主像挤牙膏,有想法一块说,别这个问题解决一部分,又冒出其它新问题。
你用是TXT文件导入,论坛里有TXT一次性导入一个ACC表的实例,你查一下;
另外,你怕一年的数据,读取出来再做成图表速度就非常慢?你何必导入到一个ACC里面,可以分日期导入多个ACC,然后,有一个主数据对这些数据源进行读取,即:多个按日期的ACC(里面只有表)+主控操作ACC(含导入和图表分析功能),这样即使你数据再多,也不会影响你的操作,不是与你的设想的要求接近了嘛。否则,你把数据全集中在一个ACC中,ACC也有一定的容量要求的,不是无限大的,而且,也同样存在读取速度的问题吗?这是我个人的建议,仅供参考。
作者: canghua    时间: 2008-4-20 16:01
多谢楼上的。
听你这么一说,的确是可以通过这种形式完成。
呵呵。
谢谢了。
作者: huangqinyong    时间: 2008-4-20 16:14
数据库设计思路是多种多样的,我有时候也会钻入死胡同,最后会卡在哪里。因此,当出现这种情况时,想想自己的这种思路是否出问题了,同时,在技术层面上有没有现有的资料可参考,这样可少走一些弯路。
作者: canghua    时间: 2008-4-20 22:53
多谢大家的支持。我已经搞定了。
Sub union()
Dim str As String
Dim end_day As Date
end_day = #4/20/2008#
For i = end_day To end_day - 10 Step -1
If fExistTable("plmn_kpi" & Format(i, "yyyymmdd")) Then
str = "select * from plmn_kpi" & Format(i, "yyyymmdd")
Exit For
End If
Next

For i = end_day To end_day - 10 Step -1

If fExistTable("plmn_kpi" & Format(i, "yyyymmdd")) Then
str = str & " union select * from plmn_kpi" & Format(i, "yyyymmdd")
End If
Next

DoCmd.RunSQL ("select * into plmn_kpi from (" & str & ")")
End Sub


Function fExistTable(strTableName As String) As Integer
Dim db As Database
Dim i As Integer
    Set db = DBEngine.Workspaces(0).Databases(0)
    fExistTable = False
    db.TableDefs.Refresh
    For i = 0 To db.TableDefs.Count - 1
        If strTableName = db.TableDefs(i).Name Then
            'Table Exists
            fExistTable = True
            Exit For
        End If
    Next i
    Set db = Nothing
End Function




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