请问如何修改 Access数据库密码

gloom 2002-07-26 03:16:04
下面是在网上的一段代码,
#include <dao_2k.h>
#pragma link "DAO_2K"

//修改数据库密码
if (Edit2->Text!=Edit3->Text)
{
ShowMessage("输入的新密码与确认新密码不一致,请重新输入!");
return;
}
  //数据库文件名
AnsiString fName=ExtractFilePath(Application->ExeName)+"serial.mdb";
  AnsiString OldPwd=Edit1->Text;//旧密码
AnsiString NewPwd=Edit2->Text;//新密码
TCOM_DBEngine Engine=new CoDBEngine->Create();
DatabasePtr Database=Engine->OpenDatabase(WideString(fName),TVariantInParam(TRUE),TVariantInParam(FALSE),TVariantInParam(";PWD="+OldPwd));
Database->NewPassword(WideString(OldPwd),WideString(NewPwd));
delete Engine;

是不是在使用上有问题啊,请高手指教
...全文
131 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gloom 2002-08-01
  • 打赏
  • 举报
回复
找到原因了。
是这一句的最后一个参数的问题
DatabasePtr Database=Engine->OpenDatabase(WideString(fName),TVariantInParam(TRUE),TVariantInParam(FALSE),TVariantInParam(";PWD="+OldPwd));
由于O因OldPwd为AnsiStirng类型,但TVariantInParam()将AnsiString传进去后不能被DAO正确解析,这样写则没有问题

DatabasePtr Database=Engine->OpenDatabase(WideString(fname).c_bstr(),TVariantInParam(TRUE),TVariantInParam(FALSE),TVariantInParam(AnsiString(";PWD="+OldPwd).c_str()));
Database->NewPassword(WideString(OldPwd).c_bstr(),WideString(NewPwd).c_bstr());

但存在一个新问题,就是如果旧密码不正确,则DAO会提示出错,我用try
也不能捕捉到,应该怎么捕获这个异常啊?


AnsiString OldPwd=Edit1->Text;
AnsiString NewPwd=Edit2->Text;//新密码
TCOM_DBEngine Engine=new CoDBEngine->Create();
try
{
DatabasePtr Database=Engine->OpenDatabase(WideString(fname).c_bstr(),TVariantInParam(TRUE),TVariantInParam(FALSE),TVariantInParam(AnsiString(";PWD="+OldPwd).c_str()));
Database->NewPassword(WideString(OldPwd).c_bstr(),WideString(NewPwd).c_bstr());
}
catch (Exception& cep)
{
ShowMessage("你输入的原密码不正确!请重新输入正确的数据库密码!");
delete Engine;
return;
}
delete Engine;
ShowMessage("密码修改成功,请记住新密码!");

这们捕获不到这个异常啊
gloom 2002-08-01
  • 打赏
  • 举报
回复
难道真是参数的问题,我再多试几遍看看
gfh21cn 2002-07-31
  • 打赏
  • 举报
回复
本身就是个AnsiString 型吗
为什么还要先 WideString()
直接转换成char *(.c_str())不就行了吗
gfh21cn 2002-07-31
  • 打赏
  • 举报
回复
AnsiString.c_str();
gloom 2002-07-31
  • 打赏
  • 举报
回复
请高手关注一下吧。
hhhappy 2002-07-31
  • 打赏
  • 举报
回复
为什么不直接Wedstring??
zhangchao_7622 2002-07-31
  • 打赏
  • 举报
回复
关注
ljlln 2002-07-31
  • 打赏
  • 举报
回复
学习!
gloom 2002-07-30
  • 打赏
  • 举报
回复
WideString没有c_str()方法,我用WideString().c_bstr()也不行啊,一样出错,
rick555 2002-07-29
  • 打赏
  • 举报
回复
应该是 WideString(...).c_str() 把.
dejoy 2002-07-28
  • 打赏
  • 举报
回复
出错了吗?关注

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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