C++ Builder修改Access数据库密码

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    AnsiString   f1= "AccoutMe.mdb ";           //   源库1
    AnsiString   psw1= "123456";                //   密码1,若设置错误也会报“意外错误”
    AnsiString   f2= "AccoutMe_new.mdb ";       //   源库2
    AnsiString   psw2= "abc";                   //   新密码2
    bool flg_Success = false;

    AnsiString   dir = ExtractFilePath(Application-> ExeName);
    f1=dir+f1;                              //新数据库绝对路径
    f2=dir+f2;

    if (FileExists( f2 ) )      //若目标文件已存在,先删除
            DeleteFileA(f2);

    char Provider1[512] = { 0 }, Provider2[512] = { 0 };

    sprintf(Provider1,
            "Provider=Microsoft.Jet.OLEDB.4.0;"
             "Data Source='%s';"
             "Jet OLEDB:Database Password='%s'" , f1, psw1
           );

//    sprintf(Provider2,
//            "Provider=Microsoft.Jet.4.0.OLE DB.Provider;"
//            "Data Source='%s';"
//            "Jet OLEDB:Database Password='%s'"
//            , f2, psw2
//            );   // 注意提供正确的Provider写法,否则提示“意外错误”

    sprintf(Provider2,
            "Provider=Microsoft.Jet.OLEDB.4.0;"
            "Data Source='%s';"
            "Jet OLEDB:Database Password='%s'" , f2, psw2
           );

    Variant Adoobj = Variant::CreateObject( "JRO.JetEngine");
    
    try
    {
        Adoobj.OleProcedure( "CompactDatabase", WideString(Provider1), WideString(Provider2) );

        if (FileExists(f1))
            DeleteFileA(f1);

        RenameFile(f2, f1);

        flg_Success = true;
    }
    __finally
    {
        Adoobj.Clear();
        Adoobj = Unassigned;
    }
    ShowMessage( BoolToStr(flg_Success, true) ) ;

}


这是OLE的方法,由于代码较简洁就不多写注释了。

原帖子见:http://topic.csdn.net/u/20120214/17/6bde8f44-3afb-4f8d-afc1-f971c879e3d9.html 

特别感谢老妖!

 

PS:

OLE报错太不友好了。

不论是用独占方式打开ACCESS用SQL语句ALTER DATABASE PASSWORD "旧密码"   "新密码",

还是用ADOQuery等控件,设置独占打开方式和 ADO 控件的SQL属性为"alter…………"修改ACCESS密码,都没有成功。

调试中ing...

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用 C++Builder 连接 Access 数据库的步骤: 1.首先需要在工程中添加 Vcl.OleDB.hpp 头文件。这个头文件包含了连接数据库所需的类和方法。 2.在工程中添加 TADOConnection 和 TADOTable 控件。TADOConnection 控件用于连接数据库,TADOTable 控件用于操作数据表。 3.在 TADOConnection 控件中设置连接字符串,连接字符串的格式如下: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;Persist Security Info=False 其中,Provider 指定数据提供程序,Data Source 指定数据库文件的路径。 4.在 TADOTable 控件中设置 TableName 属性,指定要操作的数据表名。 5.在需要操作数据表的代码中,可以使用 TADOTable 控件的 Open、Close、Insert、Edit、Delete 等方法来实现对数据表的增删改查操作。 以下是一个简单的示例代码: ```c++ #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include <Vcl.OleDB.hpp> #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=database.mdb;Persist Security Info=False"; ADOConnection1->Open(); ADOTable1->TableName = "Table1"; ADOTable1->Active = true; } void __fastcall TForm1::Button1Click(TObject *Sender) { ADOTable1->Insert(); ADOTable1->FieldByName("Name")->AsString = Edit1->Text; ADOTable1->FieldByName("Age")->AsInteger = StrToInt(Edit2->Text); ADOTable1->Post(); } void __fastcall TForm1::Button2Click(TObject *Sender) { ADOTable1->Delete(); } void __fastcall TForm1::Button3Click(TObject *Sender) { ADOTable1->Edit(); ADOTable1->FieldByName("Name")->AsString = Edit1->Text; ADOTable1->FieldByName("Age")->AsInteger = StrToInt(Edit2->Text); ADOTable1->Post(); } ``` 在这个示例代码中,我们使用了 TADOConnection 控件连接了名为 database.mdb 的 Access 数据库,并使用了 TADOTable 控件操作了 Table1 数据表。在按钮的 Click 事件中,我们可以使用 TADOTable 控件的 Insert、Delete、Edit、Post 方法实现对数据表的增删改查操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值