如何恢复access中被删除的记录

qhzxcz 2002-04-09 05:51:39
在Access中,如果删除记录之后(无论用手工或程序删除),文件字节数并没有减少,说明数据还在里面,如何将它恢复回来。如果不恢复,又用什么方法,把多余的空间释放出来(要求编程解决)。
...全文
1143 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
weidegong 2002-04-10
  • 打赏
  • 举报
回复
这个问题是否算解决了?

用DAO压缩也是一个办法,没试过,但是感觉不是较好的方法:

首先我们看一下这段帮助文档:
压缩 Access 数据库或 Access 项目疑难解答
Microsoft Access 数据库或 Microsoft Access 项目不能压缩的原因有下列几点:
磁盘空间已经不能同时容纳原始与压缩的 Access 数据库或 Access 项目版本。请删除不必要的文件后重试一次。
没有“打开/运行”和“以独占方式打开”Access 数据库的权限。如果没有拥有此数据库,请与其拥有者联系以决定是否可以获得这个数据库的这两个权限。如果拥有此数据库,必须更新权限。
其他用户打开了 Access 数据库或 Access 项目。
Access 数据库或 Access 项目位于只读的共享网络中,或它的文件属性设置为“只读”。

1.假如发布在网站、C/S程序服务器上,可能会有很多人在线访问,如何判断时间可以“以独占方式打开”?
2.压缩后的新文件必须手工替换原有文件

而如果设置关闭时自动压缩,则所有问题交给Access自动处理了。
weidegong 2002-04-10
  • 打赏
  • 举报
回复
我想我知道问题的答案了:
Access在增加数据时,会增大数据库文件*.mdb的体积。但是在删除数据时,只是清空物理空间中的数据而没有收回所分配在硬盘上的空间。因此我们看到的*.mdb文件的大小是历史上这个文件体积的最大值。下面我举个例子:
比如,test.mdb中曾经保存了10M的数据,那么他的体积会是10M,删掉数据库中所有数据后,test.mdb文件的大小将仍然是10M.此时再增加新的数据,假如新增加的数据量有5M,此时test.mdb文件的大小依然是10M,而不是15M。

要解决这个问题其实很简单,下述文字摘自Access 2000的帮助文档某一页:
-----
关闭时自动压缩 Access 数据库或 Access 项目
Microsoft Access 可以在每次关闭时自动压缩 Microsoft Access 数据库或 Microsoft Access 项目。

打开想要 Microsoft Access 自动压缩的 Access 数据库或 Access 项目。


单击“工具”菜单中的“选项”命令。


单击“常规”选项卡。


选中“关闭时压缩”复选框。
注意 在关闭多用户(共享)数据库时,如果其他用户打开了该数据库,也不会压缩。


zjq5308 2002-04-10
  • 打赏
  • 举报
回复
关注,但太长了,我以后看吧
weidegong 2002-04-10
  • 打赏
  • 举报
回复
如果您在 Access 数据库、Access 项目中删除数据或对象,可能会产生碎片并导致磁盘空间使用效率的降低。同时,数据库文件的大小并未减小,而是不断的增大,直至您的硬盘没有空间。有没有好的处理方法呢?其实,在Access中可以对数据库进行压缩优化以提升Access 数据库和 Access 项目的性能,这样的压缩处理的实质是复制该文件,并重新组织文件在磁盘上的存储方式。但是,在 Access 项目中进行这样的压缩不会影响到数据库对象(例如表或视图),因为它们是存储在 Microsoft SQL Server 数据库中而不是在 Access 项目本身中。同样,这样的压缩也不会影响到 Access 项目中的自动编号。在 Access 数据库中,如果已经从表的末尾删除了记录,压缩该数据库是就会重新设置自动编号值。添加的下一个记录的自动编号值将会比表中没有删除的最后记录的自动编号值大一。

  下面介绍如何在VB中用一个CompactJetDatabase过程实现对Access数据库文件的压缩处理,在这个过程中有一个可选参数,就是在压缩前你是否需要把原有的数据库文件备份到临时目录(True或 False)。我用此办法使21.6MB的数据库压缩到仅仅300KB。

  ' 这些代码可放在模块中,在其他窗体也使用

  Public Declare Function GetTempPath Lib "kernel32" Alias _

    "GetTempPathA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long

  Public Const MAX_PATH = 260

  Public Sub CompactJetDatabase(Location As String, Optional BackupOriginal As Boolean = True)

  On Error GoTo CompactErr

  Dim strBackupFile As String

  Dim strTempFile As String

  '检查数据库文件是否存在

  If Len(Dir(Location)) Then

   ' 如果需要备份就执行备份

   If BackupOriginal = True Then

   strBackupFile = GetTemporaryPath & "backup.mdb"

   If Len(Dir(strBackupFile)) Then Kill strBackupFile

   FileCopy Location, strBackupFile

   End If

   ' 创建临时文件名

   strTempFile = GetTemporaryPath & "temp.mdb"

   If Len(Dir(strTempFile)) Then Kill strTempFile

   '通过DBEngine 压缩数据库文件

   DBEngine.CompactDatabase Location, strTempFile

   ' 删除原来的数据库文件

   Kill Location

   ' 拷贝刚刚压缩过临时数据库文件至原来位置

   FileCopy strTempFile, Location

  

   ' 删除临时文件

   Kill strTempFile

  Else

  End If

  CompactErr:

      Exit Sub

  End Sub

  Public Function GetTemporaryPath()

  Dim strFolder As String

  Dim lngResult As Long

  strFolder = String(MAX_PATH, 0)

  lngResult = GetTempPath(MAX_PATH, strFolder)

  If lngResult <> 0 Then

   GetTemporaryPath = Left(strFolder, InStr(strFolder, Chr(0)) - 1)

  Else

   GetTemporaryPath = ""

  End If

  End Function

  以后您在使用Access数据库时可以尝试进行这样的压缩,您应该会发现我说的没有错。
weidegong 2002-04-10
  • 打赏
  • 举报
回复
压缩 Access 数据库或 Access 项目 如果在 Access 数据库中删除数据或对象,或者在 Access 项目中删除对象,Access 数据库或 Access 项目可能会产生碎片并会降低磁盘空间的使用效率。压缩 Access 数据库或 Access 项目实际上是复制该文件,并重新组织文件在磁盘上的存储方式。

压缩同时优化了 Access 数据库和 Access 项目的性能。但是,在 Access 项目中,压缩不会影响数据库对象 ,例如表或视图,它们存储在 Microsoft SQL Server 数据库中而不是在 Access 项目本身中。同样,压缩不会影响 Access 项目中的自动编号。但是,在 Access 数据库中,如果已经从具有 AutoNumber 字段的表的末尾删除了记录,压缩该数据库就会重新设置自动编号值。添加的下一个记录的自动编号值将会比表中没有删除的最后记录的自动编号值大一。

weidegong 2002-04-10
  • 打赏
  • 举报
回复
删除记录之后(无论用手工或程序删除),文件字节数并没有减少,说明数据还在里面?

上面这句不一定正确,文件字节数没有减少,并不说明数据还在里面,只是空间没有回收而已吧
dgz01 2002-04-10
  • 打赏
  • 举报
回复
关键是怎么恢复呀
xxfeiyu 2002-04-09
  • 打赏
  • 举报
回复
用DAO压缩阿
DBEngine.CompactDatabase "C:\Old.Mdb", "C:\New.mdb", dbSimpleChinese & ";pwd=newpwd", , ";pwd=oldpwd"

8988 2002-04-09
  • 打赏
  • 举报
回复
难道VB都解决不了吗?
8988 2002-04-09
  • 打赏
  • 举报
回复
可以给出代码吗?
thorkhan 2002-04-09
  • 打赏
  • 举报
回复
刪除現在不清楚
壓縮嗎﹐妳看一下VB帶的VisData程序源代碼就知道了﹐別告訴我妳不知到visdata在哪儿
qhzxcz 2002-04-09
  • 打赏
  • 举报
回复
有解决好者,发短信到8988

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧