C++Builder6.0代码修改access数据库密码

用了adoquery来执行sql,网上的资料基本都是又长又蛋疼的delphi代码,而且都是利用了ADO的压缩MDB数据库实现。我需要用sql直接实现。这样用户可能很方便的修改access数据库密码。

修改数据库密码的sql大家都知道的 alter database password newpwd oldpwd 

但是仍有2个细节需要注意

1,access需要以独占方式打开或者链接。

 ExpandedBlockStart.gif代码

dm_Main -> ado_Conn -> ConnectionString = " Provider=Microsoft.Jet.OLEDB.4.0;\
                Data Source = ' "+ strPath +" ' ;Mode = Share Deny Read | Share Deny Write;Persist  Security Info = false ;\
                Jet OLEDB:Database Password
= ' "+ strDBPWD +" ' ; " ; //这里的关键在于Mode参数的赋值为独占方式

dm_Main->ado_Conn->LoginPrompt =false;

 

2,执行修改的sql语句在bcb环境下不要包含参数。 

 ExpandedBlockStart.gif代码

// 首先先看一段我之前的错误代码
ado_Query_Set -> Connection  =  dm_Main -> ado_Conn;
ado_Query_Set
-> Close();
ado_Query_Set
-> SQL -> Clear() ;
ado_Query_Set
-> Parameters -> Clear();
ado_Query_Set
-> SQL -> Add( " alter database password :new :old " ) ;
ado_Query_Set
-> Parameters -> ParamByName( " new " ) -> Value  =  edt_NewDBPWD -> Text.Trim() ;
ado_Query_Set
-> Parameters -> ParamByName( " old " ) -> Value  =  edt_OldDBPWD -> Text.Trim() ;
if (ado_Query_Set -> ExecSQL() > 0 )
{
     ShowMessage(
" 数据库密码修改成功,请使用新密码 " );
}
// 这里我的逻辑没有问题,但是却用了参数方式执行

// 那么我们来看正确代码
ado_Query_Set -> Connection  =  dm_Main -> ado_Conn;
ado_Query_Set
-> Close();
ado_Query_Set
-> SQL -> Clear() ;
ado_Query_Set
-> SQL -> Text  =  String().sprintf(
                TEXT(
" alter database password [%s] [%s] " ),
                    edt_NewDBPWD
-> Text.Trim(), edt_OldDBPWD -> Text.Trim());
ado_Query_Set
-> ExecSQL();
ShowMessage(
" 数据库密码修改成功,请使用新密码 " ); 

// 错误代码和正确代码有2个细节区别,
// 1是正确代码没有用Parameters参数查询,
// 2是正确代码里ado_Query_Set->ExecSQL()没有判断返回值。
// 因为alter database是无返回值的,所以这里我们需要用try catch捕捉下异常来判断即可。

 这里感谢妖哥的指点,才晓得这个细节。特分享给大家。


 

 

转载于:https://www.cnblogs.com/lifw/articles/1786151.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值