求教Save和OpenDialog备份和还原数据库(小分帖已结,妖哥,nbzip,zephyr,来这吧)
简单的说,问题出在中文文件夹上,备份数据库:
try
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("backup database "+str+" to disk=:path");
ADOQuery1->Parameters->ParamByName("path")->Value=SaveDialog1->FileName+" ";
ADOQuery1->ExecSQL();
Form2->Close();
delete Form2;
ShowMessage("数据库备份成功!");
}
备份时,如果是中文文件夹,有个几个中文,文件保存时,从后往前,少几个,包括“.”也算,不是完整的文件形式XXX.bak
是XXX.b或XXX形式,我将就解决的办法是SaveDialog1->FileName路径后,多加了N个空格。。。。。。,备份不是中午文件夹没事,字母或符号的文件夹,都没问题。
还原数据库:
AnsiString name;
name="sanbjc1";
//FileListBox1->Items->Strings[FileListBox1->ItemIndex];
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("restore database "+name+" from disk=:path");
ADOQuery1->Parameters->ParamByName("path")->Value=FileListBox1->FileName; //+".bak"
ADOQuery1->ExecSQL();
还原到不会文件少字母,就是如果在中文件夹下,还原时报错“无法打开备份设备'd:\新建文件夹\ddd',设备出现错误或设备脱机”。字母或符号文件夹下没事
[解决办法]
嗯,学习学习
[解决办法]
不要用中文文件夹。
[解决办法]
C++Builder6对中文目录支持的确实不好. 2009应该没有这问题了.
[解决办法]
至于还原路径的问题,在还原前先用DirectoryExists判断目录是否存在,如果不存在,就用ForceDirectories创建目录先,然后再还原文件.
其实备份时也有这个必要,先判断目标目录是否存在.
[解决办法]
ADOQuery1->SQL->Text是widestring还是AnsiString,很久不用6.0记不清了.如果是widestring转一下码试试.
如果在别的计算机上,不存在当初备份的路径,就会报错了,怎么解决?
用FindFirst
在指定的文件目录内,搜寻符合特定属性参数的文件,如果成功地查找到符合条件的文件,
则函数返回0,否则函数返回一个错误代码,函数原型如下:
int __fastcall FindFirst(const System::AnsiString Path,int Attr,TSearchRec &F);
先查找一下就行了,没有就创建或者让用户自己选择就行了.
[解决办法]