首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

求教Save和OpenDialog备份和还原数据库(小分帖已结,妖哥,nbzip,zephyr,来这吧),该如何处理

2012-02-03 
求教Save和OpenDialog备份和还原数据库(小分帖已结,妖哥,nbzip,zephyr,来这吧)简单的说,问题出在中文文件

求教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);

先查找一下就行了,没有就创建或者让用户自己选择就行了.
[解决办法]

探讨
C++Builder6对中文目录支持的确实不好. 2009应该没有这问题了.

[解决办法]
经常会有一些中文或者符号文件名的问题
建议升级到Update4

热点排行