访问进行表查询

时间:2015-03-11 16:13:54

标签: ms-access

我在运行Make Table Query时遇到了一些麻烦。该查询可以作为选择查询正常工作,返回包含我需要的所有列的数据表。但是,当我尝试将其作为Make Table查询运行时,它会卡住(几小时没有进展)。

有没有办法在不使用Make Table查询的情况下使用select查询的结果创建表?数据集大约有350,000条记录。 Make Table查询使用大约30,000条记录的测试数据库。使用350,000记录数据库的子集(30,000)运行Make Table查询也不起作用。

1 个答案:

答案 0 :(得分:0)

可能发生的事情是内存和磁盘资源限制。 N = 350,000个记录上的Make-Table查询正在扩展数据库并使现有数据的大小加倍(即,除了其派生数据之外)。记住行数不是大小的唯一因素:表的宽度(最多255个)和数据类型(双重与整数,备忘录与文本字段等)也会影响数据库大小。正如此SO post所示,您可以拥有一个包含800万条记录的700列记录的四列整数表!

此外,与普通的Select查询相比,Make-Table查询多次运行相同的完整或选择表扫描,具体取决于连接数(想想记录中的笛卡尔积)以及它扩展以创建新的数据库对象,即表格及其所有定义。这个过程很容易膨胀并达到Access' 2GB限制或接近它会减慢处理速度。如果你保持足够长的时间,可能会出现错误消息:临时磁盘上没有足够的空间。 (错误3183)可能会出现。

考虑将Make Table传递到外部,空或较小的Access数据库,然后将其表链接到当前数据库:

SELECT * INTO [NewTable] 
IN 'C:\Path\To\ExternalDatabase.accdb' 
FROM [QueryName]

使用自动VBA表链接:

DoCmd.TransferDatabase acLink, "Microsoft Access", _
"C:\Path\To\ExternalDatabase.accdb", acTable, _
"SrcTableName", "DestTableName"

或者,链接预先存在的外部空/较小Access表并在当前数据库中运行追加查询:

INSERT INTO [LinkedTabe] SELECT * FROM [QueryName]