本地数据库的备份问题

abcdefg171459 2003-02-22 06:43:04
delphi做的单机版项目,用的是本地机的paradox数据库,要在程序里实现数据库备份恢复操作,我想让用户先选择目录,然后在他指定的目录下把数据库文件夹复制过来,就是完全拷贝,用户要恢复,我再把这个文件夹拷贝过去。有几个问题:
1 首先我不知道这样做对不对
2 我不知道该用什么控件显示目录来让用户指定
3 怎样实现把一个文件夹从一个目录复制到另一个目录,是否要用API函数?用哪个?
4 如果要压缩备份的话,怎样在程序里实现呢?
...全文
22 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzty 2003-02-24
  • 打赏
  • 举报
回复
以下是备份
statusbar1.Panels[1].Text:='正在备份中......';
try
waitfrm.LabelText.Caption:='正在备份数据库,所需时间视数据库大小而定!';
WaitFrm.Show;
application.ProcessMessages;
with Adoquery1 do
begin
close;
sql.Clear;
sql.add('USE master EXEC sp_dboption goldenstone ,'+'''dbo use only'''+' , '+'''TRUE''');
Execsql;
close;
sql.Clear;
sql.Add('use master backup database 数据库名 to disk='''+trim(EdtFilename.Text)+''' with init');


execsql;
application.ProcessMessages;
waitfrm.Close;

end;
statusbar1.Panels[1].Text:='备份完成!';

恢复
statusbar1.Panels[1].Text:='正在恢复中....';
isstart:=true;
try
with adoquery1 do
begin
close;
sql.Clear;
sql.Add('use master restore database shichangbu from disk='''+trim(edtFilename.text)+''' with replace');
waitfrm.LabelText.Caption:='正在恢复数据库,所需时间视数据库大小而定!';
WaitFrm.Show;
screen.Cursor:=crHourGlass;
application.ProcessMessages;
execsql;
//application.ProcessMessages;
screen.Cursor:=crdefault;
waitfrm.Close;
end;//with do
abcdefg171459 2003-02-24
  • 打赏
  • 举报
回复
我这个数据库特别别扭,数据库文件夹叫data,在这个文件夹下面又有一个文件夹叫data和一些数据库文件,现在实现复制没问题,我把data文件夹拷到c盘下的data目录,第一次没问题,子目录连同文件都拷过去了,因为原先c盘根目录下根本没有这个目录。可是第二次再复制时,
我以为会是这样的:文件夹覆盖文件夹,文件覆盖文件,就是同名覆盖嘛。
可是结果是这样的:子文件夹没有覆盖,而是在其目录下又创建了一个 data目录,而文件也不知道覆盖了没有。
我不知道我说清楚了没有,其实只要简单试一试就知道了。
如果一直备份的话,那子目录会一直的创建下去,这根本不是人们所希望的那样,归根结底就是当一个目录里既有多个文件也有多个目录时,怎样实现覆盖拷贝啊?
请大家多帮忙,谢谢。
zhourongbiao 2003-02-23
  • 打赏
  • 举报
回复
1。可以,我就这么干过!
2。win32那一页不就有吗?
3。use ShellApi;
//拷贝一个目录下所有文件到另一个目录下
function CopyDirectory(const Source, Dest: string): boolean;
var
fo: TSHFILEOPSTRUCT;
begin
FillChar(fo, SizeOf(fo), 0);
with fo do
begin
Wnd := 0;
wFunc := FO_COPY;
pFrom := PChar(source+#0);
pTo := PChar(Dest+#0);
fFlags := FOF_NOCONFIRMATION+FOF_NOCONFIRMMKDIR ;
end;
Result := (SHFileOperation(fo) = 0);
end;
撒加的天使 2003-02-23
  • 打赏
  • 举报
回复
建议不要用BDE连接数据库,ado直接连接,备份起来多方便!
flyingsnowfox 2003-02-23
  • 打赏
  • 举报
回复
extractfilepath(application.exename);
sysu 2003-02-23
  • 打赏
  • 举报
回复
得到本程序所在路径:
ExtractFilePath(ParamStr(0))
abcdefg171459 2003-02-23
  • 打赏
  • 举报
回复
程序执行时,用什么办法能得到本程序所在路径?如果我这个程序给用户安装以后,数据库文件夹和.exe文件是在一个目录下,我要复制数据库文件夹,就要得到它的路径,我的程序里用的都是数据库别名,不知道它的 物理路径.如果知道可执行文件的路径也可以,到底用什么函数啊?
csdnyong 2003-02-22
  • 打赏
  • 举报
回复
CopyFile()!!!
sysu 2003-02-22
  • 打赏
  • 举报
回复
1 可以
2 uses FileCtrl; SelectDirectory函数,用法按F1看帮助
3 uses ShellApi; SHFileOperation函数,例子参见
http://expert.csdn.net/Expert/topic/1216/1216762.xml?temp=.1960871
4 找一个压缩控件吧,www.playicq.com ,查找:压缩(类别选控件)

5,391

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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