利用DELPHI压缩和修复MS ACCESS 2000的数据库文件

合集下载

Access数据库的压缩与修复

Access数据库的压缩与修复
access数据库的压缩与修复access数据库长时间使用后容易出现数据库过大数据库损坏等现像微软的office软件中access是带有修复和压缩功能的
Access数据库的压缩与修复
Access数据库长时间使用后容易出现数据库过大、数据库损坏等现像,微软的Office软件中Access是带有修复和压缩功能的,具体操作共分为二步方法如下:
1、打开您的.mdb数据库
2、点击上方菜单栏中的工具——》数据库实用工具——》点击压缩和修复数据库即可
压缩和修பைடு நூலகம்Access数据库操作起来比较容易,在操作前您本地电脑上需要安装Office软件中的Access软件。
注:为保证您数据库安全,建议压缩与修复数据库之前做好备份工作

DELPHI中实现数据库的恢复与同步

DELPHI中实现数据库的恢复与同步

EquipmentManufactringTechnologyNO.1,2007数据库的备份与恢复问题是开发应用系统中必不可少的一个功能模块。

虽然在数据库管理系统中都提供了数据库的备份与恢复功能,但都是在后台进行的手工操作,如何能在程序中自动实现这些功能,应该说是一个程序开发人员要面对的问题。

因此笔者就自身经历向读者展示在DELPHI中实现SQLServer2000数据库的备份、恢复与同步的方法。

1DELPHI中实现数据库的恢复与同步的编程方法Delphi是Windows系统平台下优秀的可视化编程环境,是当今流行的Windows程序开发环境之一。

Delphi被称为第四代编程语言,它是Borland/Inprise公司的主要产品之一,是基于Windows的面向对象的可视化软件开发系统,具有高效、优化和或扩展的数据库技术等优点[1]。

利用Delphi的客户/服务器功能,可以在本地或远程数据库服务器上开发客户/服务器模式的应用程序,笔者开发的许多应用系统都是基于Delphi的开发环境,充分体会到了Delphi的优势。

1.1数据库备份为保证系统中数据的安全性,数据库的备份是必不可少的一项操作。

假设要备份的数据库名为DB,其代码如下:adoconnection1.connection:=true;;//连接到本应用程序的连接adoquery1close;//连接到adoconnection1数据库的ado-query1adoquery1.SQL.Clear;adoquery1.SQL.Add('backupdatabase[db]to');adoquery1.SQL.Add('disk='''+edit1.Text+'''withnoinit,');//edit文本框内容是备份的目标地址adoquery1.SQL.add('nounload,name=''db备份'',');adoquery1.sql.add('noskip,stats=10,noformat');adoconnection1.begintrans;//开始事务tryadoquery1.execsql;adoconnection1.committrans;showmessage('备份成功!');exceptadoconnection1.rollbacktrans;showmessage('备份失败!');1.2数据库恢复在执行数据库恢复时要注意,必须没有其他程序连接到要恢复的这个数据库上,包括程序自身。

2000数据库自动备份和恢复步骤

2000数据库自动备份和恢复步骤

2000数据库自动备份和恢复步骤随着信息技术的快速发展,数据库作为数据存储和管理的重要工具,承载着企业和个人的大量数据。

而数据库的备份和恢复则是保障数据安全和可靠的重要手段之一。

本文将介绍2000数据库的自动备份和恢复步骤,帮助读者更好地掌握数据库备份和恢复的方法。

一、备份步骤1. 创建备份设备:在开始备份之前,我们首先需要创建一个备份设备。

在 SQL Server 2000 中,可以使用“设备管理器”来创建备份设备。

进入设备管理器后,选择“新建”来创建一个新的备份设备,并为其指定一个设备名称。

2. 创建备份任务:在 SQL Server 2000 中,可以使用“数据库维护计划向导”来创建备份任务。

打开维护计划向导后,选择“添加一个新的维护计划”,然后按照向导的指引逐步操作。

在创建备份任务时,需要指定备份设备、备份类型(完全备份、差异备份或日志备份)、备份频率(每天、每周、每月等)、备份时间等参数。

3. 配置备份选项:在备份任务创建完成后,我们可以进一步配置备份选项以满足具体需求。

在备份选项中,可以选择是否备份事务日志、是否压缩备份、是否验证备份等。

根据实际需求选择相应的选项,并进行相应的配置。

4. 定义备份策略:在进行自动备份时,我们需要定义合理的备份策略。

备份策略包括备份的频率、备份的保留期等。

在定义备份策略时,需要根据数据库的性质和重要程度来决定备份频率和保留期。

一般而言,对于重要的数据库,可以选择每天备份,并保留一定的历史备份。

5. 测试备份任务:在完成备份任务的创建和配置后,我们需要进行测试以确保备份任务的正常运行。

可以手动运行备份任务,观察备份过程中是否有异常情况发生,并检查备份文件是否生成。

如果测试没有问题,即可进行下一步操作。

二、恢复步骤1. 检查备份文件:在进行恢复操作之前,首先需要检查备份文件的完整性和正确性。

可以通过查看备份文件的属性、文件大小等信息来判断备份文件是否可用。

修复ACCESS数据库的几种常见方法

修复ACCESS数据库的几种常见方法

修复ACCESS数据库的几种常见方法1.数据库压缩和修复ACCESS数据库经常会因为长时间使用或者频繁的数据增删改操作而变得庞大而缓慢。

在这种情况下,可以使用ACCESS提供的压缩和修复功能来解决这个问题。

压缩和修复数据库的方法相对简单,在ACCESS软件中打开要修复的数据库,然后选择“文件”菜单中的“选项”,进入“当前数据库”选项卡,找到“压缩和修复数据库”按钮。

点击该按钮后,ACCESS会自动对数据库进行压缩和修复,删除无用的空间和恢复损坏的数据。

2.使用备份数据库如果ACCESS数据库已经严重损坏,并且压缩和修复功能无法解决问题,可以尝试使用备份数据库来恢复数据。

备份数据库是指在数据库没有损坏之前,定期将数据库复制到另外一个位置或设备上而形成的备份。

如果之前有定期备份数据库,那么可以通过还原备份数据库来恢复数据。

将备份数据库复制到原来的数据库位置,并将其更名为原数据库的文件名,然后重新打开ACCESS软件即可。

3.使用修复工具4.手动修复数据库如果以上方法都无法修复数据库,那么可能需要进行手动修复。

手动修复数据库需要一定的数据库知识和技巧。

首先需要将数据库文件复制到安全的位置备份,然后使用ACCESS软件打开故障的数据库文件。

在打开数据库时,选择“以数据库窗口模式打开”,然后按住“Shift”键,进入启用数据库修复模式。

在修复模式下,可以尝试使用一些命令和选项手动修复数据库。

比如可以使用“导入”功能将表格或查询导入到新的数据库中,然后再将数据导出到原数据库。

还可以使用“导出”功能导出数据并保存为其他格式,然后再重新导入到新的数据库中。

手动修复数据库涉及到一些高级的数据库操作和技术,不建议非专业人员进行尝试。

如果不确定或不熟悉相关操作,建议寻求专业的数据库管理员或技术人员的帮助。

综上所述,修复ACCESS数据库的方法包括数据库压缩和修复、使用备份数据库、使用修复工具和手动修复。

不同的方法适用于不同的数据库问题,需要根据具体情况选择合适的修复方式。

Delphi数据压缩处理

Delphi数据压缩处理

Delphi数据压缩处理Borland公司推出的RAD研发工具Delphi 5.0作为Windows平台上的主流研发工具,其可视化的研发环境和面向对象编程的强大功能已吸引了无数的研发人员。

但是,一些程式员在实际的研发过程中却时常为对大量的数据进行压缩而伤透脑筋,不得不去查找一些高效的压缩算法或在网上查找第三方的控件来实现压缩。

难道Delphi本身没有提供这个功能吗?其实Delphi的程式设计师早就考虑到了这一点,他们提供了Zlib.pas和Zlibconst.pas两个单元文档来解决数据压缩问题,实现了很高的数据压缩比率。

这两个文档保存在Delphi 5.0安装光盘上InfoExtras lib目录下,此外,在InfoExtras libObj目录中还保存了Zlib.pas 单元引用的Obj文档。

下面本文以压缩一个屏幕拷贝为例介绍如何使用这项功能。

解决思路首先利用屏幕拷贝捕获到当前整个屏幕的图像,然后在内存中保存为BMP文档格式。

压缩时,使用TCompressionStream对象对原始图像进行压缩并且保存为自定义的文档格式;解压缩时,使用TDecompressionStream对象对被压缩的图像进行解压缩,还原为BMP格式的图像文档。

具体实现新建一个项目文档,在主单元的接口部分引用Zlib.pas,在主表单上放置两个按钮Button1、Button2,在他们的OnClick事件中写上相应的过程调用代码。

部分程式源代码如下:unit Unit1;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,StdCtrls, Zlib;typeTForm1 = class(TForm)Button1: TButton;Button2: TButton;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R*.DFM}1.捕获全屏幕图像procedure GetScreen(var Bmp: TBitmap);varDc: HDC;MyCanvas: TCanvas;MyRect: TRect;beginDc := GetWindowDC(0);MyCanvas := TCanvas.Create;tryMyCanvas.Handle := Dc;MyRect:=Rect(0,0,Screen.Width, Screen.Height);file://图像为24位真彩色,也可根据实际需要调整Bmp.PixelFormat := pf24bit;Bmp.Width := MyRect.Right;Bmp.Height := MyRect.Bottom;file://捕获整个屏幕图像Bmp.Canvas.CopyRect(MyRect, MyCanvas, MyRect);finallyMyCanvas.Handle := 0;MyCanvas.Free;ReleaseDC(0, Dc);end;end;2.压缩图像procedure CompressBitmap(var CompressedStream: TMemoryStream;const CompressionLevel: TCompressionLevel);varSourceStream: TCompressionStream;DestStream: TMemoryStream;Count: Integer;Beginfile://获得图像流的原始尺寸Count := CompressedStream.Size;DestStream := TMemoryStream.Create;SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);Tryfile://SourceStream中保存着原始的图像流CompressedStream.SaveToStream(SourceStream);file://将原始图像流进行压缩,DestStream中保存着压缩后的图像流SourceStream.Free;CompressedStream.Clear;file://写入原始图像的尺寸CompressedStream.WriteBuffer(Count, SizeOf(Count));file://写入经过压缩的图像流CompressedStream.CopyFrom(DestStream, 0);finallyDestStream.Free;end;end;3.还原被压缩图像procedure UnCompressBitmap(const CompressedStream: TFileStream; var Bmp: TBitmap);varSourceStream: TDecompressionStream;DestStream: TMemoryStream;Buffer: PChar;Count: Integer;Beginfile://从被压缩的图像流中读出原始图像的尺寸CompressedStream.ReadBuffer(Count, SizeOf(Count));file://根据图像尺寸大小为将要读入的原始图像流分配内存块GetMem(Buffer, Count);DestStream := TMemoryStream.Create;SourceStream := TDecompressionStream.Create(CompressedStream);Tryfile://将被压缩的图像流解压缩,然后存入Buffer内存块中SourceStream.ReadBuffer(Buffer^, Count);file://将原始图像流保存至DestStream流中DestStream.WriteBuffer(Buffer^, Count);DestStream.Position := 0;//复位流指针//从DestStream流中载入原始图像流Bmp.LoadFromStream(DestStream);finallyFreeMem(Buffer);DestStream.Free;end;end;4.压缩按钮OnClick事件procedure TForm1.Button1Click(Sender: TObject);varBmp: TBitmap;CompressedStream: TMemoryStream;beginBmp := TBitmap.Create;CompressedStream := TMemoryStream.Create;Tryfile://捕获当前整个屏幕,将图像保存至Bmp对象中GetScreen(Bmp);file://将Bmp对象中的图像保存至内存流中Bmp.SaveToStream(CompressedStream);file://按缺省的压缩比例对原始图像流进行压缩CompressBitmap(CompressedStream, clDefault);file://将压缩之后的图像流保存为自定义格式的文档CompressedStream.SaveToFile(‘ C:cj.dat’ );finallyBmp.Free;CompressedStream.Free;end;end;5.解压缩按钮OnClick事件procedure TForm1.Button2Click(Sender: TObject);varCompressedStream: TFileStream;Bmp: TBitmap;beginBmp := TBitmap.Create;file://以文档流的只读方式打开自定义的压缩格式文档CompressedStream := TFileStream.Create(‘ C:cj.dat’ , fmOpenRead);Tryfile://将被压缩的图像流进行解压缩UnCompressBitmap(CompressedStream, Bmp);file://将原始图像流还原为指定的BMP文档Bmp.SaveToFile(‘ C:cj.bmp’ );finallyBmp.Free;CompressedStream.Free;end;end;此外TCompressionStream对象还提供了CompressionRate属性,该属性用于描述对原始数据进行压缩后的压缩比率,而OnProgress事件在压缩和解压缩过程中都会被触发,研发人员能够在该事件中编写用于显示进度的代码。

在Delphi中动态创建、压缩Access数据库

在Delphi中动态创建、压缩Access数据库

在Delphi中动态创建、压缩Access数据库
韩德宗
【期刊名称】《程序员》
【年(卷),期】2001(000)006
【摘要】Access数据库Delphi开发单机版的管理信息系统最常用的数据库之一,但是在实际应用过程中,Access数据库的维护一般需要安装Mjcrosoft Access97/2000作为支持,给操作者增加了不必要的难度。

本文主旨就是简化在Delphi
中维护Access数据库(创建、压缩)的过程。

【总页数】2页(P84-85)
【作者】韩德宗
【作者单位】无
【正文语种】中文
【中图分类】TP311
【相关文献】
1.动态创建、压缩Access数据库 [J], 秦艳友
2.通过Delphi实现压缩和修复Access数据库文件 [J], 吴艳艳;唐源;李霞
3.DelPhi环境下基于ADO对象动态创建和连接加密的Access数据库 [J], 田红宇;张斌;李国霞
4.DelPhi环境下基于ADO对象动态创建和连接加密的Access数据库 [J], 田红宇;张斌;李国霞
5.Delphi环境下基于ADO对象动态创建和连接加密的Access数据库 [J], 田红宇;张斌;李国霞
因版权原因,仅展示原文概要,查看原文内容请购买。

如何使用ADO来压缩或修复MicrosoftAccess文件

如何使用ADO来压缩或修复MicrosoftAccess文件

Dim jro As jro.JetEngine
Set jro = New jro.JetEngine
pactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\nwind2.mdb", _ '來源文件
1、新建一個新表单,选择功能表中的【控件】【設定引用項目】。
2、加入 Microsoft Jet and Replication Objects 3、在适当的地方加入以下的程序代码,記得要修改 data source 的內容及目地文件的路径:
在您安裝了 MDAC 2.1 或以上的版本之后,您就可以使用 ADO 來压缩或修复 Microsoft Access 文件,下面的步骤告訴您如何使用 CompactDatabase Method 來压缩 Microsoft Access 文件:
如何使用 ADO 來压缩或修复 Microsoft Access 文件?
版本:VB6
以前使用 DAO 時,Microsoft 有提供 CompactDatabase Method 來压缩 Microsoft Access 文件,RepairDatabase Method 來修复损坏的 Microsoft Access 文件,。可是自从 ADO 出來之后,好像忘了提供相对的压缩及修复 Microsoft Access 文件的功能。
現在 Microsoft 发现了这个问题了,也提供了解決方法,不过有版本上的限制!限制說明如下:
ActiveX Data Objects (ADO), version 2.1
Microsoft OLE DB Provider for Jet, version 4.0

利用ADO压缩和修复MSAccess2000数据库

利用ADO压缩和修复MSAccess2000数据库

利用ADO压缩和修复MSAccess2000数据库上次发表了一篇关于压缩和修复MS Access 2000文件的文章,得到网友的好评,在此深表感谢。

下面再奉献一篇利用ADO 压缩和修复MS Access 2000文件的文章,希望能对您有所帮助。

首先定义一个函数:function pressdatabase:boolean;constsProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';varsOldMDB,sNewMDB:string;MyObj:variant;beginresult:=false;OldFileName:='Delphi资料库.mdb';NewFileName:='Delphi资料库.mdb1';sOldMDB := sProvider + 'Data Source=' + OldFileName;sNewMDB := sProvider + 'Data Source=' + NewFileName;MyObj:=createoleobject('jro.jetengine.2.1');trytrypactDatabase(sOldMDB, sNewMDB);result:=true;exceptresult:=false;MyObj:=null;end;finallyMyObj:=null;end;end;调用示例:VarOldFileName,NewFileName:string; //全局变量procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);beginADOConnection1.Connected :=false; //调用之前必须先关闭数据库连接if not n1.Checked then exit; //假若“关闭时压缩数据库”为假,则退出tryif not CompressDatabase then beginShowMessage(' 压缩数据库失败!');exitelse ShowMessage(' 压缩数据库成功!');if DeleteFile(OldFileName) thenRenameFile(NewFileName,OldFileName);else ShowMessage('不能重命名文件');finally// OldFileName:='';// NewFileName:='';end;end;注意:1- 在你的uses语句中必须加入ComCtrls单元。

利用Delphi压缩和修复MS Access 2000的数据库文件

利用Delphi压缩和修复MS Access 2000的数据库文件

在使用MS Access 2000的过程中,我们发现随着时间的推移,由于Access会给数据库自动保留一份副本集,这样造成了数据库占用的空间越来越大。

如果在Access环境中,我们可以通过点选菜单(工具-数据库实用工具-压缩和修复数据库),来将Access数据库压缩。

那么通过Delphi能不能压缩和修复Access数据库呢?答案是肯定的。

利用下面的这个函数,成功的实现了实现这个功能。

代码如下:Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;constsProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';varoJetEng : JetEngine;beginsOldMDB := sProvider + 'Data Source=' + sOldMDB;sNewMDB := sProvider + 'Data Source=' + sNewMDB;tryoJetEng := CoJetEngine.Create;pactDatabase(sOldMDB, sNewMDB);oJetEng := Nil;Result := True;exceptoJetEng := Nil;Result := False;end;end;使用该函数的例子如下:if CompactAndRepair('d:\db\Old.mdb', 'd:\db\New.mdb') thenShowMessage('操作成功')elseShowMessage('操作失败');应注意的是,在压缩和修复数据库的过程中,不能有其它的操作打开该数据库,否则操作会失败。

另外,要想上面的函数编译通过,你需要先把Microsoft Jet and Replication Objects 2.1 Library 导入到Delphi中,步骤如下:1、在Delphi集成开发环境中,点选菜单(Project-Import Type Library)。

2000数据库自动备份和恢复步骤

2000数据库自动备份和恢复步骤

2000数据库自动备份和恢复步骤一、引言在进行数据库管理时,备份和恢复是非常重要的操作。

数据库的备份可以保护数据免受意外删除、系统故障或其他灾难性事件的影响。

而数据库的恢复可以在数据丢失或损坏时,将数据库恢复到先前的状态。

本文将介绍2000数据库自动备份和恢复的步骤。

二、自动备份步骤1. 创建备份计划在SQL Server 2000中,可以通过“Enterprise Manager”创建备份计划。

打开“Enterprise Manager”,选择要备份的数据库,右键点击该数据库,选择“属性”。

然后,在“属性”对话框中,选择“备份计划”选项卡,点击“添加”按钮来创建新的备份计划。

2. 配置备份选项在“备份计划向导”中,可以配置备份的选项。

首先,选择备份类型,可以选择完全备份、差异备份或事务日志备份。

然后,选择备份的时间,可以选择每天、每周或每月的某个时间进行备份。

此外,还可以设置备份的文件路径和文件名,以及备份的保留时间等选项。

3. 定义备份任务在“备份计划向导”的下一步,可以定义备份任务的详细信息。

可以指定备份的频率、开始时间和结束时间等。

还可以选择备份时是否进行压缩,以及备份时是否进行校验等选项。

4. 完成备份计划在“备份计划向导”的最后一步,可以查看备份计划的摘要信息,并进行必要的修改。

点击“完成”按钮后,备份计划就创建成功了。

5. 自动执行备份计划创建好备份计划后,SQL Server 2000将自动执行备份计划中定义的任务。

可以通过“Enterprise Manager”中的“备份日志”查看备份任务的执行情况。

三、自动恢复步骤1. 准备恢复文件在进行自动恢复之前,需要事先准备好备份文件。

备份文件可以是完全备份、差异备份或事务日志备份。

确保备份文件是可用的,并存放在恢复的目标位置上。

2. 创建恢复计划与创建备份计划类似,可以通过“Enterprise Manager”来创建恢复计划。

选择要恢复的数据库,右键点击该数据库,选择“属性”。

如何对Access 数据库进行压缩?

如何对Access 数据库进行压缩?

如何对Access 数据库进行压缩?具体见下:Class DatabaseToolsPublic function CreateDBfile(byVal dbFileName,byVal DbVer,byVal SavePath)' 建立数据库文件:DbVer为0创建Access97 数据库,为1则创建Access2000 dbFileOn error resume NextIf Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid (dbFileName,2,Len(dbFileName)))If DbExists(SavePath & dbFileName) ThenResponse.Write ("对不起,该数据库已经存在!")CreateDBfile = FalseElseDim CaSet Ca = Server.CreateObject("ADOX.Catalog")If Err.number<>0 ThenResponse.Write ("数据库建立失败,请检查后再操作!<br>" & Err.number & "<br>"& Err.Description)Err.ClearExit functionEnd IfIf DbVer=0 Thencall Ca.Create("Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" &SavePath & dbFileName)Elsecall Ca.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" &SavePath & dbFileName)End IfSet Ca = NothingCreateDBfile = TrueEnd IfEnd functionPublic function CompactDatabase(byVal dbFileName,byVal DbVer,byVal SavePath) ' 压缩数据库文件,0为access 97, 1 为access 2000On Error resume nextIf Right(SavePath,1)<>"\" Or Right(SavePath,1)<>"/" Then SavePath = Trim(SavePath) & "\"If Left(dbFileName,1)="\" Or Left(dbFileName,1)="/" Then dbFileName = Trim(Mid (dbFileName,2,Len(dbFileName)))If DbExists(SavePath & dbFileName) ThenResponse.Write ("对不起,该数据库已经存在!")CompactDatabase = FalseElseDim CdSet Cd =Server.CreateObject("JRO.JetEngine")If Err.number<>0 ThenResponse.Write ("数据库压缩失败,请检查后再操作!<br>" & Err.number & "<br>"& Err.Description)Err.ClearExit functionEnd IfIf DbVer=0 Thencall pactDatabase("Provider=Microsoft.Jet.OLEDB.3.51;DataSource=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.3.51;Data Source=" & SavePath & dbFileName& ".bak.mdb;Jet OLEDB;Encrypt Database=True")Elsecall pactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=" & SavePath & dbFileName,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & SavePath & dbFileName& ".bak.mdb;Jet OLEDB;Encrypt Database=True")End Ifcall DeleteFile(SavePath & dbFileName)' 删除旧的数据库文件call RenameFile(SavePath & dbFileName & ".bak.mdb",SavePath & dbFileName)' 将压缩后的数据库文件还原Set Cd = FalseCompactDatabase = TrueEnd Ifend functionPublic function DbExists(byVal dbPath)' 检查数据库文件是否存在On Error resume NextDim cSet c = Server.CreateObject("ADODB.Connection")c.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPathIf Err.number<>0 ThenErr.ClearDbExists = falseelseDbExists = TrueEnd Ifset c = nothingEnd functionPublic function AppPath()' 取当前真实路径AppPath = Server.MapPath("./")End functionPublic function AppName()' 取当前程序名称AppName = Mid(Request.ServerVariables("SCRIPT_NAME"),(InStrRev(Request.ServerVariables ("SCRIPT_NAME") ,"/",-1,1))+1,Len(Request.ServerVariables("SCRIPT_NAME"))) End FunctionPublic function DeleteFile(filespec)' 删除一个文件Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")If Err.number<>0 ThenResponse.Write("文件删除失败,请检查后再操作!<br>" &Err.number & "<br>" &Err.Description)Err.ClearDeleteFile = FalseEnd Ifcall fso.DeleteFile(filespec)Set fso = NothingDeleteFile = TrueEnd functionPublic function RenameFile(filespec1,filespec2)' 修改一个文件Dim fsoSet fso = CreateObject("Scripting.FileSystemObject")If Err.number<>0 ThenResponse.Write("文件名修改失败, 请检查后再操作! <br>" & Err.number & "<br>"& Err.Description)Err.ClearRenameFile = FalseEnd Ifcall fso.CopyFile(filespec1,filespec2,True)call fso.DeleteFile(filespec1)Set fso = NothingRenameFile = TrueEnd functionEnd Class%>。

Access 数据损坏修复方法

Access 数据损坏修复方法

Access数据损坏修复方法金蝶2000部门级财务软件,由于采用Access数据库,有时可能产生数据库记录丢失、损坏的现象。

严重时可能导致数据库无法打开,使用Access97也无法打开,修复、压缩。

最终“账毁套亡”。

发生原因:最根本的是Access数据库本身有局限性,在大数据量、多用户网络频繁访问时,就容易出现这种情况。

请注意以下几种情况:1. 软件看起来可以使用,但是数据库无法修复,或者修复时提示出错。

2. 软件无法修复,Access97也无法修复,提示3343错误或者索引丢失之类。

如何避免:多备份,千万不要为了省几张软盘的钱来拿您几年的数据开玩笑!如果您经常出现这类问题,请每天做硬盘备份,花2000元买一个光盘刻录机做每星期光盘备份,每个月做软盘备份。

多修复,每天备份后做一次修复、压缩工作解决方法:这种错误很可怕,谁见了都头痛。

许多分支机构或客户会将帐套数据发送到总部请求修复。

但是实际上,我们也没有什么秘诀,很多时候也无法修复。

如果使用金蝶软件和Access都无法修复,就只能使用 WinNT/Win2000的ODBC修复。

方法如下:打开WindowsNT/Windows2000的控制面板,打开ODBC数据源,(2000在管理工具里)选择MS Access97 Database ,点击 〔配置〕,选择您需要修复的数据库,选择系统数据库system.mda,在高级选项里输入数据库密码。

然后就可以修复、压缩数据了。

这样修复后,如果成功,一定要使用 CHECK帐套检查工具 检查是否有丢数据现象进入金蝶软件,检查是否有无法丢凭证、报表等单据、是否可以正常查看报表。

如果有丢失现象,打开最近的备份,将损坏的账套中完好的数据追加到备份数据中去。

经过上述尝试,如果失败,那就什么办法都没有了。

金蝶技术支持部。

java中access数据库压缩和修复语句

java中access数据库压缩和修复语句

一、概述在Java开发中,常常需要与数据库进行交互,而Access数据库是一种常用的轻量级数据库。

在使用过程中,我们可能会遇到数据库文件变得过大或者损坏的情况,这时候就需要对数据库进行压缩和修复操作。

本文将介绍如何在Java中使用SQL语句对Access数据库进行压缩和修复。

二、压缩数据库1. 打开连接在使用SQL语句对Access数据库进行操作之前,首先需要建立与数据库的连接。

可以使用Java中的JDBC技术来完成这一步操作。

2. 编写SQL语句压缩Access数据库的SQL语句如下所示:```StringpressQuery = "ALTER DATABASEpact";```3. 执行SQL语句接下来,我们需要执行上述的SQL语句来实现数据库的压缩操作。

可以使用JDBC中的Statement或者PreparedStatement来执行SQL 语句。

4. 关闭连接在完成压缩操作后,记得及时关闭与数据库的连接,释放资源。

三、修复数据库1. 打开连接与压缩操作类似,修复数据库之前也需要先建立与数据库的连接。

2. 编写SQL语句修复Access数据库的SQL语句如下所示:```String rep本人rQuery = "REP本人R DATABASE";```3. 执行SQL语句同样地,使用JDBC中的Statement或者PreparedStatement来执行修复数据库的SQL语句。

4. 关闭连接修复操作完成后,记得关闭与数据库的连接。

四、异常处理在实际开发中,对数据库进行操作时往往会遇到各种异常情况,比如连接超时、SQL语句执行失败等。

对于数据库操作来说,严谨的异常处理是非常重要的。

五、总结通过本文的介绍,可以看出在Java中使用SQL语句对Access数据库进行压缩和修复是一件非常简单的事情。

只要掌握了JDBC的基础知识,就能轻松实现对数据库的操作。

Delphi实现考试系统数据库题目信息的压缩与解压缩

Delphi实现考试系统数据库题目信息的压缩与解压缩

Delphi实现考试系统数据库题目信息的压缩与解压缩林远明;黄聪;田民格【摘要】通过对Delphi压缩和解压缩流类的研究,结合第三方控件TRxRichEdit 实现了压缩RTF格式数据的显示和编辑的方法,丰富了考试系统题目信息的存储和显示方式,解决了考试系统数据库题目信息量与存储容量和网络传输的矛盾问题。

%Through the research of TCompressionStream and TDecompressionStream of Delphi, the display and edit methods of R'FF format data compressed are realized with third-party control TrxRiehEdit, the way of storage and display of examination system question information is enriched,the contradictions between the question information capacity of examination system and the storage capacity and network transmission is srlved.【期刊名称】《武夷学院学报》【年(卷),期】2011(030)005【总页数】6页(P13-18)【关键词】压缩和解压缩;RTF格式数据;题目信息;数据库【作者】林远明;黄聪;田民格【作者单位】三明学院数学与信息工程学院,福建三明365004;三明学院数学与信息工程学院,福建三明365004;三明学院数学与信息工程学院,福建三明365004【正文语种】中文【中图分类】TP311.13考试系统[1-3]数据库题目信息若使用纯文本格式进行存储,存储容量少,但无法表示字体、数学公式、图片等信息,更无法达到图文并茂的效果;若使用RTF格式进行存储,丰富了题目的表示形式,但信息量却指数增长,特别是题目中的插图将转换为BMP格式,即无任何压缩的位图格式进行存储。

数据库管理中的数据压缩与恢复方法

数据库管理中的数据压缩与恢复方法

数据库管理中的数据压缩与恢复方法数据压缩在数据库管理中起着至关重要的作用。

通过对数据库中的数据进行压缩,可以有效减少存储空间的占用,并提高数据库的性能和响应速度。

同时,对于恢复方法,确保数据库数据的安全性和完整性是至关重要的。

在数据库管理中,有多种数据压缩和恢复方法可供选择。

以下将介绍几种常用的数据压缩和恢复方法。

1. 压缩方法1.1 利用压缩算法进行数据压缩压缩算法可以对数据库中的数据进行压缩,以减少存储空间的使用。

常见的压缩算法包括LZ77、LZ78、Huffman、Deflate等。

这些算法可以根据数据的特点进行智能压缩,并在解压缩时保持数据的完整性和准确性。

1.2 分区压缩对数据库中的数据进行分区压缩是另一种常见的压缩方法。

可以将大型数据库表根据不同的特征(例如时间戳、地理位置等)进行分区,然后对每个分区进行压缩。

这样做可以减少整个数据库表的存储空间占用,并提高查询性能。

1.3 列压缩在数据库管理中,常常会遇到大量的重复列。

对于这些重复列,可以使用列压缩方法。

列压缩可以将相同的数值或字符编码为一个公共字典,并将相同的值替换为字典中的索引值。

这样可以减少存储空间的使用,并提高查询和分析性能。

2. 恢复方法2.1 定期备份定期备份是数据库管理中最重要的恢复方法之一。

通过定期备份数据库,可以在意外损坏或数据丢失的情况下恢复数据库到最近的备份点。

备份可以在本地磁盘或远程服务器上进行存储,以防止单点故障。

此外,备份的完整性和可用性也是非常重要的,必须确保备份文件没有损坏并可以正确恢复。

2.2 日志恢复数据库的事务日志可以用来恢复数据库到一个特定的时间点。

事务日志记录了数据库的所有操作,包括插入、更新和删除等。

当数据库遇到故障或意外情况导致数据损坏时,可以使用事务日志来还原数据库到最近的一致状态。

2.3 在线备份和恢复除了定期备份和事务日志恢复之外,还可以使用在线备份和恢复方法来保证数据库数据的安全性和可用性。

Win7下使用Delphi7及MSSQLServer2000开发中遇到的问题和解决方法

Win7下使用Delphi7及MSSQLServer2000开发中遇到的问题和解决方法

Win7下使用Delphi7及MSSQLServer2000开发中遇到的问题和解决方法这几天帮别人写了一个数据库应用程序,使用的是已经非常熟悉的技术,就是Delphi加SQL Server2000来进行搭配,这样的程序已经做了很多,按道理应该轻车熟路的,可是在新的Win7下还是遇到了一些小的问题,经过一系列的处理解决了,觉得记录下来以备后查。

1、Win7下安装Delphi的问题问题:在Win7下安装Delphi,我的还是64位的Win7。

运行安装程序会提示程序不兼容,不能执行的情况;还有就是强制兼容安装了以后运行时报错的情况。

方法:先右键属性对安装程序进行兼容性设置,当然选择XP兼容了;再右键以管理员身份执行安装,这时的兼容提示可以不用管它,记得安装的时候不要安装在默认目录,最好分配到系统之外盘符。

剩下的就一路正常了。

可以安装但安装后执行错误的情况一般是因为安装时没选管理员身份,而且进行默认安装后有些目录Delphi没有权限的关系。

2、Win7下安装SQL Server的问题问题:我的64位Win7进行安装的时候照旧提示兼容性错误,无法安装。

方法:不要直接执行安装autorun.exe进行安装,可以进目录x86/setup,执行下面的setupsql.exe来进行安装,安装前一样设置兼容性,同时右键以管理员身份执行,剩下的也就一路正常了。

需要说明的是,安装好之后,默认自带的服务管理器可能由于权限的原因在我这里无法获取和控制SQL服务,这个没啥关系,可以进Win7的管理-服务中对名为MSSQLSERVER 的服务进行设置,手动自动就随便你了。

3、Delphi中自带的Rave报表组件发布时完全汉化的问题问题:Delphi中自带的Rave组件发布时的汉化是这样操作的:直接将Delphi7安装目录下的Rave5\Lib中的几个.dfm和.xfm中的字符串汉化,以后编译出的执行程序中的Rave组件的设置、预览、状态信息就变成中文的了,但是你会注意到这几个窗体的标题仍旧是英文的,没有完全汉化。

DELPHI中操作ACCESS数据库

DELPHI中操作ACCESS数据库

DELPHI中操作ACCESS数据库1.DELPHI中操作ACCESS数据库(建立.mdb文件,压缩数据库)以下代码在WIN2K,D6,MDAC2.6下测试通过,编译好的程序在WIN98第二版无ACCESS环境下运行成功.//在之前uses ComObj,ActiveX//声明连接字符串ConstSConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'+'Jet OLEDB:Database Password=%s;';//=================================================================== ==========// Procedure: GetTempPathFileName// Author : ysai// Date : 2003-01-27// Arguments: (None)// Result : string//=================================================================== ==========function GetTempPathFileName():string;//取得临时文件名varSPath,SFile:array [0..254] of char;beginGetTempPath(254,SPath);GetTempFileName(SPath,'~SM',0,SFile);result:=SFile;DeleteFile(PChar(result));end;//=================================================================== ==========// Procedure: CreateAccessFile// Author : ysai// Date : 2003-01-27// Arguments: FileName:String;PassWord:string=''// Result : boolean//=================================================================== ==========functionCreateAccessFile(FileName:String;PassWord:string=''):boolean;//建立Access文件,如果文件存在则失败varSTempFileName:string;vCatalog:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvCatalog:=CreateOleObject('ADOX.Catalog');vCatalog.Create(format(SConnectionString,[STempFileName,PassWord])); result:=CopyFile(PChar(STempFileName),PChar(FileName),True);DeleteFile(STempFileName);exceptresult:=false;end;end;//=================================================================== ==========// Procedure: CompactDatabase// Author : ysai// Date : 2003-01-27// Arguments: AFileName,APassWord:string// Result : boolean//=================================================================== ==========function CompactDatabase(AFileName,APassWord:string):boolean;//压缩与修复数据库,覆盖源文件varSTempFileName:string;vJE:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvJE:=CreateOleObject('JRO.JetEngine');pactDatabase(format(SConnectionString,[AFileName,APassWord]), format(SConnectionString,[STempFileName,APassWord]));result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName);exceptresult:=false;end;end;//=================================================================== ==========// Procedure: ChangeDatabasePassword// Author : ysai// Date : 2003-01-27// Arguments: AFileName,AOldPassWord,ANewPassWord:string// Result : boolean//=================================================================== ==========functionChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):bo olean;//压缩数据库并修改ACCESS数据库密码varSTempFileName:string;vJE:OleVariant;beginSTempFileName:=GetTempPathFileName;tryvJE:=CreateOleObject('JRO.JetEngine');pactDatabase(format(SConnectionString,[AFileName,AOldPassWord] ),format(SConnectionString,[STempFileName,ANewPassWord]));result:=CopyFile(PChar(STempFileName),PChar(AFileName),false); DeleteFile(STempFileName);exceptresult:=false;end;end;2.ACCESS中使用SQL语句应注意的地方及几点技巧以下SQL语句在ACCESS XP的查询中测试通过建表:Create Table Tab1 (ID Counter,Name string,Age integer,[Date] DateTime);技巧:自增字段用 Counter 声明.字段名为关键字的字段用方括号[]括起来,数字作为字段名也可行.建立索引:下面的语句在Tab1的Date列上建立可重复索引Create Index iDate ON Tab1 ([Date]);完成后ACCESS中字段Date索引属性显示为 - 有(有重复).下面的语句在Tab1的Name列上建立不可重复索引Create Unique Index iName ON Tab1 (Name);完成后ACCESS中字段Name索引属性显示为 - 有(无重复).下面的语句删除刚才建立的两个索引Drop Index iDate ON Tab1;Drop Index iName ON Tab1;ACCESS与SQLSERVER中的UPDATE语句对比:SQLSERVER中更新多表的UPDATE语句:UPDATE Tab1SET = FROM Tab1 a,Tab2 bWHERE a.ID = b.ID;同样功能的SQL语句在ACCESS中应该是UPDATE Tab1 a,Tab2 bSET = WHERE a.ID = b.ID;即:ACCESS中的UPDATE语句没有FROM子句,所有引用的表都列在UPDATE关键字后.上例中如果Tab2可以不是一个表,而是一个查询,例:UPDATE Tab1 a,(Select ID,Name From Tab2) bSET = WHERE a.ID = b.ID;访问多个不同的ACCESS数据库-在SQL中使用In子句:Select a.*,b.* From Tab1 a,Tab2 b In 'db2.mdb' Where a.ID=b.ID;上面的SQL语句查询出当前数据库中Tab1和db2.mdb(当前文件夹中)中Tab2以ID为关联的所有记录.缺点-外部数据库不能带密码.补充:看到ugvanxk在一贴中的答复,可以用Select * from [c:\aa\a.mdb;pwd=1111].table1;ACCESS XP测试通过在ACCESS中访问其它ODBC数据源下例在ACCESS中查询SQLSERVER中的数据SELECT * FROM Tab1 IN [ODBC][ODBC;Driver=SQLServer;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]外部数据源连接属性的完整参数是:[ODBC;DRIVER=driver;SERVER=server;DATABASE=database;UID=user;PWD=pass word;]其中的DRIVER=driver可以在注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\中找到异构数据库之间导数据参见碧血剑的/delphibbs/dispq.asp?lid=1691966ACCESS支持子查询ACCESS支持外连接,但不包括完整外部联接,如支持LEFT JOIN 或 RIGHT JOIN但不支持FULL OUTER JOIN 或 FULL JOINACCESS中的日期查询注意:ACCESS中的日期时间分隔符是#而不是引号Select * From Tab1 Where [Date]>#2002-1-1#;在DELPHI中我这样用SQL.Add(Format('Select * From Tab1 Where [Date]>#%s#;',[DateToStr(Date)]));ACCESS中的字符串可以用双引号分隔,但SQLSERVER不认,所以为了迁移方便和兼容,建议用单引号作为字符串分隔符.ACCESS的约束在JET SQL参考中关于约束的内容不够详细,可以参考SQL Server 的联机丛书下面的SQL为a表的Name字段增加非空约束ALTER TABLE a ADD CONSTRAINT a_checkname CHECK (Not [Name] is Null) 注意:每一个约束都是一个对象,都有一个名字为一个表设置主键下面的语句把id列设置为主键Alter Table [表] Add Primary Key (Id)下面的语句把id列改为自动编号类型,并且设置为主键Alter Table [表] Alter [id] Counter Constraint [表_p] Primary Key 修改ACCESS数据库的密码//引用ComObj单元//=================================================================== ==========// Procedure: ChangeAccessPassword// Author : ysai// Date : 2004-02-10// Arguments: const AFileName : string; const AOldPassword : string; const ANewPassword : string// Result : Boolean//=================================================================== ==========function ChangeAccessPassword(const AFileName : string;const AOldPassword : string;const ANewPassword : string):Boolean;//修改ACCESS数据库密码,必须独占打开数据库,使用前请确保没有其他程序使用数据库constSAlterDatabasePassword = 'ALTER DATABASE PASSWORD %s %s';varacn : OleVariant;sOld : string;sNew : string;beginif AOldPassword = '' thensOld := 'Null'elsesOld := '[' + AOldPassword + ']';if ANewPassword = '' thensNew := 'Null'elsesNew := '[' + ANewPassword + ']';tryacn := CreateOleObject('ADODB.Connection');//Delphi中的cmShareExclusive,ADO中的adModeShareExclusive//用排它方式打开,直接用数字可以不用引用ADO单元acn.Mode := 12;acn.Provider := 'Microsoft.Jet.OLEDB.4.0';acn.Properties('Jet OLEDB:Database Password') := AOldPassword; acn.Open('Data Source=' + AFileName);tryacn.Execute(Format(SAlterDatabasePassword,[sNew,sOld]));finallyacn.Close;end;Result := True;exceptResult := False;end;end;添加复合主键下面的SQL为tb_demo表添加复合主键(id,id2).Alter Table tb_demoAdd Constraint tb_demo_pkPrimary Key (id,id2)。

DELPHI备份数据库和恢复

DELPHI备份数据库和恢复

先记下来,空了去看看//开始备份with adoquery1 dobeginclose;sql.Clear;sql.Add('Backup database library to disk=:p1 with init');parameters.ParamByName('p1').Value:=self.SaveDialog1.FileName;tryExecsql;ShowMessage('备份成功!!');exceptShowMessage('备份失败!!');exit;end;end; //End of 备份下面来说一下还原,还原与备份不一样,备份不需要关闭数据库,但还原就要先关闭数据库才行.第一次写的代码如下:with ADOQuery1 dobeginClose;SQL.Clear;SQL.Add('use master alter database library set offline WITH ROLLBACK IMMEDIATE ');SQL.Add('restore database library from disk=:p1 with REPLACE');SQL.Add('alter database library set online with rollback immediate');parameters.ParamByName('p1').Value := self.Edit1.Text;tryExecSQL;ShowMessage('还原成功!!');exceptShowmessage('还原失败!!');exit;end;end;运行,还原成功!!但是數據庫會變爲脫機狀態,導致其他用戶不能連接。

解決的辦法有两种:一:用存储过程:在master数据库中加入下面的存储过程if exists(select name from sysobjects where name='usp_restoredb')drop proc usp_restoredbgo/*exec usp_restoredb "library","D:\bak.bak"*/create proc usp_restoredb(@dbname varchar(255), --数据库名字@filepath varchar(255) --文件路径)asset nocount on--exec ('use master go')exec ('alter database '+@dbname+' set offline WITH ROLLBACK IMMEDIATE') exec ('restore database '+@dbname+' from disk="'+@filepath+'" with REPLACE') exec ('alter database '+@dbname+' set online with rollback IMMEDIATE')if @@error<>0beginselect 'F','数据库恢复失败'returnendelsebeginselect 'T','数据库恢复成功'returnend运行.然后在Delphi的调用这一存储过程,调用过程如下://注意:这时的ADOQuery1要连到master数据库,不能连到library数据库!!with ADOQuery1 doBeginClose;SQL.Clear;// filename是你备份文件的路径加文件名SQL.Add('exec usp_restoredb "Library","'+ filename+'"');Open;if ADOQuery1.Fields[0].AsString='F' thenShowMessage('还原失败!!')elseShowMessage('还原成功!!');end;运行成功!且library数据库不会变为脱机!第二种方法:也是运行ADOQuery1来实现,不用存储过程,ADOQuery1一定要连到master数据库,否则就会让library脱机!,代码如下:beginDataModule17.ADOConnection1.Close;//这个是连到library数据库的,所以要先断开with ADOQuery1 dobeginClose;SQL.Clear;SQL.Add('use master alter database library set offline WITH ROLLBACK IMMEDIATE ');SQL.Add('restore database library from disk=:p1 with REPLACE');SQL.Add('alter database library set online with rollback immediate');parameters.ParamByName('p1').Value := self.Edit1.Text;//显示备份文件的路径和文件名tryExecSQL;ShowMessage('还原成功!!');exceptShowmessage('还原失败!!');exit;end;end;end; //End Of 还原数据库运行成功!library数据库被还原。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;操作成功')
else
ShowMessage('操作失败');
应注意的是,在压缩和修复数据库的过程中,不能有其它的操作打开该数据库,否则操作会失败。
另外,要想上面的函数编译通过,你需要先把Microsoft Jet and Replication Objects 2.1 Library导入到Delphi中,步骤如下:
Function CompactAndRepair(sOldMDB : String; sNewMDB : String) : Boolean;
const
sProvider = 'Provider=Microsoft.Jet.OLEDB.4.0;';
var
oJetEng : JetEngine;
begin
sOldMDB := sProvider + 'Data Source=' + sOldMDB;
sNewMDB := sProvider + 'Data Source=' + sNewMDB;
try
oJetEng := CoJetEngine.Create;
pactDatabase(sOldMDB, sNewMDB);
在使用MS Access 2000的过程中,我们发现随着时间的推移,由于Access会给数据库自动保留一份副本集,这样造成了数据库占用的空间越来越大。如果在Access环境中,我们可以通过点选菜单(工具-数据库实用工具-压缩和修复数据库),来将Access数据库压缩。那么通过Delphi能不能压缩和修复Access数据库呢?答案是肯定的。利用下面的这个函数,成功的实现了实现这个功能。代码如下:
1、在Delphi集成开发环境中,点选菜单(Project-Import Type Library)。
2、在弹出的对话框中,移动滚动条,找到Microsoft Jet and Replication Objects 2.1 Library。
oJetEng := Nil;
Result := True;
except
oJetEng := Nil;
Result := False;
end;
end;
使用该函数的例子如下:
if CompactAndRepair('d:\db\Old.mdb', 'd:\db\New.mdb') then
相关文档
最新文档