我正在寻找一种方法在Microsoft Access中创建一个临时表,其行为类似于Oracle,因为它的内容在mdb关闭后消失了。
据我所知,这是不可能的,但我愿意接受纠正。
如果不可能,我仍然在寻找一种使用临时表的方法,但是如果(例如)mdb未正确关闭,请确保临时表和/或其内容不会使mdb混乱。< / p>
答案 0 :(得分:3)
您不会被更正,Microsoft Access不直接支持临时表。必须显式删除在数据库中创建的所有表以删除它们,并且所有用户都可以看到这些表。
解决此问题的“传统”方法是使用两个Access数据库,一个使用共享数据,另一个使用具有用户界面元素的私有副本。第二个数据库具有链接的第一个表和第二个数据库中创建的任何表对用户是私有的。在这种情况下(假设您不想保留用户特定的数据),您可以经常清空私有数据库并压缩它,甚至只是定期从网络上复制一个新数据库(您需要这样做以更新用户界面)进行更改时。
答案 1 :(得分:2)
Microsoft Access不直接 支持临时表
如果查看SHOWPLAN.OUT查询执行计划,很明显引擎可以创建临时表。
如果查看Access 2007 Help,可能很容易向最终用户公开临时表功能:
CREATE TABLE语句
CREATE [TEMPORARY] TABLE
...创建
TEMPORARY
表时 仅在会话中可见 它是创建的。它是 会话时自动删除 被终止。临时表可以 由多个用户访问。
据我所知,没有人为这个明显的文档错误提出解释。当我在Access2003中出现时,我已经向Access Team报告了它(当然没有回复),对于Access2007也是如此。谁知道,也许临时表即将推出......?
答案 2 :(得分:1)
答案 3 :(得分:1)
除了可能已断开连接的记录集外,没有任何内容会自动删除。
请参阅我的网站上的TempTables.MDB page,其中说明了如何在您的应用中使用临时MDB。
答案 4 :(得分:1)
您可能会考虑使用交易。通过这种方式,您可以在事务中创建表,使用它执行所需的操作,然后最后将其回滚,即避免最终提交。这也可以让你避免ADO,这是断开连接的记录集所必需的。
您不希望在前端或后端创建此表,即使在要回滚的事务中也是如此,因为它可能导致碎片和膨胀(即使没有删除数据页< em>已已提交)。也就是说,虽然尚未提交的事务中的数据存储在临时文件中而不存储在目标数据库中,但肯定会有一定量的开销可以避免。因此,如果我正在进行交易,我会在临时数据库上进行,以免以任何方式影响生产前端或后端。
答案 5 :(得分:0)
也许你可以设置你的访问数据库来紧凑并修复。为此(根据您的版本,执行以下操作):
Access数据库旨在允许自己不断增加大小。从数据库中删除记录时,为该记录分配的空间将继续由数据库保留,并且不会释放以供重用。同样,通过修改和缩短记录创建的额外空间不会被释放以供重用。压缩和修复可以缓解这种情况。
紧凑和修复实用程序通过精确复制数据库来减少数据库的物理大小,同时还可以消除数据库中删除和修改数据所产生的任何多余空间。 Compact Utility重组表记录和对象,然后将它们存储在连续的内存块中,从而消除浪费的空间。该实用程序还更新表统计信息以反映重组数据的数据库特征。对数据库执行的添加,删除和修改越多,就越应该压缩它们
如果您从未压缩访问数据库,则数据库将保留“浪费”空间并继续占用额外空间以容纳其他数据。例如,如果从1MB Microsoft Access数据库中删除所有记录,然后添加2MB数据,则数据库将超过3MB。分配给已删除记录的1MB空间由数据库保存为浪费空间,仅用于破坏数据库并分割数据。