61阅读

access数据库修复-Delphi修改Access密码,压缩与修复,建立Access数据库文件

发布时间:2017-09-15 所属栏目:编程

一 : Delphi修改Access密码,压缩与修复,建立Access数据库文件

1 unit UAccessOperate;  2 3 interface  4 5 uses Windows, Sysutils, ComObj, Dialogs, ActiveX;  6 7 8 9 //修改ACCESS数据库密码  10 function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;  11 12 //压缩与修复数据库,覆盖源文件  13 function CompactDatabase(AFileName,APassWord:string):boolean;  14 15 //建立Access文件,如果文件存在则失败  16 function CreateAccessFile(FileName:String;PassWord:string=''):boolean;  17 18 implementation  19 20 //声明连接字符串  21 Const  22 SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'  23 24 +'Jet OLEDB:Database Password=%s;';  25 26 27 28 //=============================================================================  29 30 // Procedure: GetTempPathFileName  31 32 // Author : ysai  33 34 // Date : 2003-01-27  35 36 // Arguments: (None)  37 38 // Result : string  39 40 //=============================================================================  41 42 function GetTempPathFileName():string;  43 44 //取得临时文件名  45 var  46 SPath,SFile:array [0..254] of char;  47 begin  48 GetTempPath(254,SPath);  49 GetTempFileName(SPath,'~SM',0,SFile);  50 result:=SFile;  51 DeleteFile(PChar(result));  52 end;  53 54 55 56 //=============================================================================  57 58 // Procedure: CreateAccessFile  59 60 // Author : ysai  61 62 // Date : 2003-01-27  63 64 // Arguments: FileName:String;PassWord:string=''  65 66 // Result : boolean  67 68 //=============================================================================  69 //建立Access文件,如果文件存在则失败  70 function CreateAccessFile(FileName:String;PassWord:string=''):boolean;  71 var  72 STempFileName:string;  73 vCatalog:OleVariant;  74 begin  75 STempFileName:=GetTempPathFileName;  76 try  77 vCatalog:=CreateOleObject('ADOX.Catalog');  78 vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));  79 result:=CopyFile(PChar(STempFileName),PChar(FileName),True);  80 DeleteFile(STempFileName);  81 except  82 result:=false;  83 end;  84 end;  85 86 87 88 //=============================================================================  89 90 // Procedure: CompactDatabase  91 92 // Author : ysai  93 94 // Date : 2003-01-27  95 96 // Arguments: AFileName,APassWord:string  97 98 // Result : boolean  99 100 //============================================================================= 101 102 function CompactDatabase(AFileName,APassWord:string):boolean; 103 //压缩与修复数据库,覆盖源文件 104 var 105 STempFileName:string; 106 vJE:OleVariant; 107 begin 108 STempFileName:=GetTempPathFileName; 109 try 110 vJE:=CreateOleObject('JRO.JetEngine'); 111 vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]), 112 format(SConnectionString,[STempFileName,APassWord])); 113 result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); 114 DeleteFile(STempFileName); 115 except 116 result:=false; 117 end; 118 end; 119 120 121 122 //============================================================================= 123 // Procedure: ChangeDatabasePassword 124 // Author : ysai 125 // Date : 2003-01-27 126 // Arguments: AFileName,AOldPassWord,ANewPassWord:string 127 // Result : boolean 128 //============================================================================= 129 //修改ACCESS数据库密码 130 function ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean; 131 var 132 STempFileName:string; 133 vJE:OleVariant; 134 begin 135 STempFileName:=GetTempPathFileName; 136 try 137 vJE:=CreateOleObject('JRO.JetEngine'); 138 vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]), 139 format(SConnectionString,[STempFileName,ANewPassWord])); 140 result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); 141 DeleteFile(STempFileName); 142 except 143 result:=false; 144 end; 145 end; 146 147 end.

扩展:access数据库压缩修复 / delphi access数据库 / access数据库压缩

二 : access压缩和修复数据库的方法

压缩和修复数据库

看到这儿,说明你已经能够独立完成一个Access数据库了,但是在工作当中,你还需要注意一下的这些问题,这可是很容易忽略的工作。

当你的数据库在经过你简单的操作都会发生崩溃的时候,数据库可能会被破坏。为了解决这个问题我们就需要修复这个数据库。

修复一个数据库,首先要求在其它用户关闭这个数据库的情况下,以管理者的身份打开数据库,然后单击“工具”菜单,然后指向“数据库实用工具”,单击“压缩和修复数据库”命令。Access就会自动的完成这个修复工作。

在这个命令上,还有一个“压缩”操作, 当我们删除窗体或报表时,ACCESS不会返回它们占用的空间,要使用这部分的空间,必须使用“压缩”操作。

转化数据库

由于不同版本的ACCESS数据库的数据结构不同,为了用不同版本的ACCESS建立的数据库在其它版本的ACCESS中,就需要将不同版本之间的数据库文件进行转化。

首先我们讲讲将旧版本的数据库转换到“Access2000”所能接收的数据库版本。单击工具栏上的“打开”按钮,选择旧的“数据库”文件,

然后单击“打开”。

单击“选项”按钮,决定是希望将数据库转换为Access2000的格式,然后单击“确定”按钮就完成了将旧版本的数据库转换为Access2000中的数据库了。

如果想把Access2000中的数据库转换成老版本的数据库,同样可以单击“工具”菜单,选择“数据库实用工具”,这样弹出一个菜单,单击菜单上的“到当前的Access数据库版本”。然后输入转换后的数据库名称和位置。完成这些后,单击“保存”按钮就可以了。

生成MDE文件

如果我们和其它人共享模块,就希望Access2000会删除可编辑的源代码。这样你的VBA程序还可以继续运行,但其他用户不能进行查看或编辑。

我们可以将这个数据库转换成“MDE”格式,这只要单击“工具”,然后选择“数据库实用工具”,然后单击“生成MDE文件”,然后选择要进行“MDE”转换的源数据库,然后单击“生成”按钮, 并为其指定位置,这时再输入“MDE”文件的名称。并单击“保存”按钮就可以了。

解决Access2000问题

Access2000可以正确存储涉及到2000年以后的日期和日期函数。所以用它建立的数据库绝对不会产生2000年问题,这个问题其实在Access 7.0版本时就已经解决了,但是使用7.0以前的版本建立的数据库就会出现2000年问题。

我们可以将这些数据库载入Access2000中,将它们转换为新的数据库,就可以在2000年后继续使用它们了。

三 : 如何修复MySQL数据库表

一张损坏的表的症状通常是查询意外中断并且你能看到例如这些错误:

◆ “tbl_name.frm”被锁定不能改变。

◆ 不能找到文件“tbl_name.MYI”(Errcode :### )。

◆ 从表处理器的得到错误###(此时,错误135是一个例外)。

◆ 意外的文件结束。

◆ 记录文件被毁坏。

在这些情况下,你必须修复表。表的修复是一项非常困难的工作,很多情况下令人束手无策。然而,有一些常规的知道思想和过程,可以遵循它们来增加修正表的机会。通常,开始是可以用最快的修复方法,看看能否袖珍故障。如果发现不成功,可以逐步升级到更彻底的但更慢的修复方法。如果仍旧难以修复,就应该从备份中恢复了。在上一章已经详细介绍了这一部分内容。

简单安全的修复

为了修复一个表执行下列步骤:

◆ 首先,用--recover,-r选项修正表,并且用--quick,-q选项,来只根据索引文件的内容进行恢复。这样不接触数据文件来修复索引文件。(-r意味着“恢复模式”)

myisamchk -r -q tbl_name

isamchk -r -q tbl_name

◆ 如果问题仍旧存在,则忽略--quick选项,允许修复程序修改数据文件,因为这可能存在问题。下面的命令将从数据文件中删除不正确的记录和已被删除的记录并重建索引文件:

myisamchk -r tbl_name

isamchk -r tbl_name

◆ 如果前面的步骤失败,使用。安全恢复模式使用一个老的恢复方法,处理常规恢复模式不行的少数情况(但是更慢)。

myisamchk --safe-recover tbl_name

isamchk --safe-recover tbl_name

困难的修理

如果在索引文件的第一个16K块被破坏,或包含不正确的信息,或如果索引文件丢失,你只应该到这个阶段 。在这种情况下,创建一个新的索引文件是必要的。按如下这样的步骤做:

◆ 定位到包含崩溃表的数据库目录中

◆ 把数据文件移更安全的地方。

◆ 使用表描述文件创建新的(空)数据和索引文件:

shell> mysql db_name

mysql> DELETE FROM tbl_name;

mysql> quit

上述语句将重新创建新的空表,并使用表的的描述文件tbl_name.frm重新生成新的数据和索引文件。

◆ 将老的数据文件拷贝到新创建的数据文件之中。(不要只是将老文件移回新文件之中;你要保留一个副本以防某些东西出错。)

◆ 在使用标准的修复方法。现在myisamchk -r -q应该工作了。(这不应该是一个无限循环)。

如果你拥有表的备份文件,那么一切过程就容易的多。从备份文件中可以恢复表的描述文件,然后在检查表,有可能还要继续使用标准的修复方法,应该纠可以解决问题了。

非常困难的修复

只有描述文件也破坏了,你才应该到达这个阶段。这应该从未发生过,因为在表被创建以后,描述文件就不再改变了。

从一个备份恢复描述文件并且回到阶段2。你也可以恢复索引文件并且回到阶段1。对于后者,你应该用myisamchk -r启动。

如果因为某种原因,数据的备份文件丢失或者没有备份文件,但是你还记得建立表的CREATE TABLE语句,那么太好了,这样还是可以恢复索引文件:

◆ 定位到包含崩溃表的数据库目录中

◆ 把数据文件移更安全的地方。再把数据库目录中的对应的目录删去.。

◆ 调用mysql并发复CREATE TABLE语句建立该表。

◆ 退出mysql,将原始的数据文件和索引文件移回到数据库的目录中,替换刚才新建的文件。

◆ 然后回到阶段2,修复表。也可以只移回数据文件,这样保留新的描述和索引文件,然后回到阶段1,继续用标准的方法修复表。

四 : 不同情况下修复Access数据库的实用方法

修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理。Access数据库被损坏分以下几种情况:1、严重损坏;2、轻度损坏;3、有些表被损坏或有些表的部分记录被损坏。下面就分情况介绍解决办法。

1、使用Access97打不开数据库、系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的。损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见。

2、如果数据库损坏的不严重,只需要使用Access 97菜单上的“修复数据库”和“压缩数据库”就可以把数据库修复好。因为数据库轻微损坏的时候,一般也不会导致软件出什么问题,所以也不会引起人的注意,只有当数据库的某一个或几个表损坏了的时候,才会使软件变得不稳定,所以这种情况才是我们最常遇到的。

3、如何确定数据库中哪几个表有问题呢,我们首先利用Access 97建立一个空数据库,利用系统提供的“引入数据库”功能,选择目标数据库所有的表进行引入,Access 97当引入到有问题的表时系统会提示一些错误信息,把这个表的名字记下来以备以后修复时使用。

接下来利用Access97打开有问题的数据库,准备修复表。修复损坏的表的方法依照表损坏程度不同而不同,下面分情况介绍处理的办法:

一、表损坏的非常严重,表现为无法打开表,系统提示“Microsoft jet 找不到对象”、“没有读写权限”或“不可识别”等信息。

处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如“常用凭证表”、“科目共享锁定表”或“凭证共享锁定表”,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。

二、表中有几行内容非常混乱或字段内标有“#已删除”字样,但当要删除这些记录时就会出现错误信息不许删除。

处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如“凭证及明细账表GL_ACCVOUCH”中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:

以下为引用的内容:
SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP
FROM GL_ACCVOUCH WHERE {筛选的条件}
然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的
名字改为GL_ACCVOUCH即可解决问题。

修复ACCESS数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。

五 : 几种修复ACCESS数据库的实用方法

修复Access数据库,我们一般使用微软Office 97中带的Access 97对数据库进行修复和整理。Access数据库被损坏分以下几种情况:1、严重损坏;2、轻度损坏;3、有些表被损坏或有些表的部分记录被损坏。下面就分情况介绍解决办法。

1、使用Access97打不开数据库、系统提示"不可识别的数据库格式"或"不是该表的索引"等信息,这样的数据库都是损坏比较严重的。损害严重的数据库一般来说都是无法修复的,只有恢复备份了,好在这种情况比较少见。

2、如果数据库损坏的不严重,只需要使用Access 97菜单上的“修复数据库”和“压缩数据库”就可以把数据库修复好。因为数据库轻微损坏的时候,一般也不会导致软件出什么问题,所以也不会引起人的注意,只有当数据库的某一个或几个表损坏了的时候,才会使软件变得不稳定,所以这种情况才是我们最常遇到的。

3、如何确定数据库中哪几个表有问题呢,我们首先利用Access 97建立一个空数据库,利用系统提供的“引入数据库”功能,选择目标数据库所有的表进行引入,Access 97当引入到有问题的表时系统会提示一些错误信息,把这个表的名字记下来以备以后修复时使用。

接下来利用Access97打开有问题的数据库,准备修复表。修复损坏的表的方法依照表损坏程度不同而不同,下面分情况介绍处理的办法:

一、表损坏的非常严重,表现为无法打开表,系统提示“Microsoft jet 找不到对象”、“没有读写权限”或“不可识别”等信息。

处理方法:这种表的已经损坏得非常严重了,一般无法修复。如果这个表不很重要或通常情况下表的内容为空的话,例如“常用凭证表”、“科目共享锁定表”或“凭证共享锁定表”,我们可以通过引入的方法把其他数据库的表引入,然后把有问题的表删除即可。

二、表中有几行内容非常混乱或字段内标有“#已删除”字样,但当要删除这些记录时就会出现错误信息不许删除。

处理办法:既然不让删除这些记录,我们可以通过使用SQL语句把没有问题的记录复制到一个新的表中,然后把老表删除把新表的名字改过来即可。例如“凭证及明细账表GL_ACCVOUCH”中有错误记录有无法删除,我们可以使用如下SQL语句把好的记录复制到GL_ACCTEMP中:

SELECT GL_ACCVOUCH.* INTO GL_ACCTEMP

FROM GL_ACCVOUCH WHERE {筛选的条件}

然后删除表GL_ACCVOUCH,再把表GL_ACCTEMP的

名字改为GL_ACCVOUCH即可解决问题。

修复ACCESS数据库的注意事项,首先,我们在修复数据库前一定要做好备份,以防数据丢失或损坏;有一些数据库中有RELATION(关系)来维护数据的一致性,但当数据库异常后相关表的RELATION也就丢失了,在修复好数据库后一定要把RELATION再联好,有些软件可以自动修复RELATION,比如用友公司的ERP8.XX系列产品的数据库可以通过把表accinformation中的[cSysid]='AA' and [项目号]='99'的记录,把[设置值]和[缺省值]改为'8.0A0',重新进入系统时,系统会自动升级并重建索引。

本文标题:access数据库修复-Delphi修改Access密码,压缩与修复,建立Access数据库文件
本文地址: http://www.61k.com/1086893.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1