首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ Builder 資料庫密碼自動傳遞:Session.AddPassword 實戰技巧

     編輯:關於C++

場景:受密碼保護的 Paradox/dBase 資料表自動開啟

在 C++ Builder (VCL) 開發中,若資料表檔案設有密碼,設計時期或執行時期嘗試開啟 `TTable` 會彈出密碼對話框。若需無人值守自動化,必須在程式碼中預先將密碼註冊到 `TSession`。

三步驟完成自動解密

// 1. 設計階段:拖放 TTable、TDataSource,設定 DatabaseName、TableName
//    關鍵:Table->Active = false (預設關閉)

// 2. 執行時期:開啟前註冊密碼
void __fastcall TForm1::OpenProtectedTable()
{
    // 假設密碼為 "12345"
    Session->AddPassword("12345");   // 將密碼加入當前 Session 的密碼清單

    Table1->Active = true;           // 此時自動使用已註冊密碼開啟,不彈視窗
}

// 3. 關閉/切換資料表時:移除密碼 (良好習慣,避免污染其他資料表)
void __fastcall TForm1::CloseProtectedTable()
{
    Table1->Active = false;
    Session->RemovePassword("12345"); // 從 Session 密碼清單移除
}

關鍵細節與避坑指南

  • Session 是全域的:`AddPassword` 影響應用程式內**所有**使用同一 `TSession` 的資料集。多執行緒或多資料庫時,建議建立獨立 `TSession` 實例隔離。
  • 密碼區分大小寫:Paradox/dBase 密碼嚴格區分大小寫,勿誤輸入。
  • 多密碼共存:可多次呼叫 `AddPassword` 註冊不同密碼,`TTable` 開啟時會依序嘗試。
  • 安全性提醒:原始碼寫死密碼有洩漏風險。生產環境建議:
    • 加密儲存於設定檔/登錄表,執行時解密。
    • 或改用資料庫伺服器 (Firebird/InterBase/SQL Server) 的使用者驗證機制,避免檔案級密碼。
  • 適用範圍:僅適用於 BDE (Borland Database Engine) 驅動的本地資料表。ADO/dbExpress/FireDAC 有各自的連接字串密碼參數 (`Password=...`)。

完整範例:按鈕點擊開啟/關閉

void __fastcall TForm1::btnOpenClick(TObject *Sender)
{
    try {
        Session->AddPassword("MySecretPwd");
        Table1->Active = true;
        btnOpen->Enabled = false;
        btnClose->Enabled = true;
    }
    catch (Exception &E) {
        ShowMessage("開啟失敗:" + E.Message);
        Session->RemovePassword("MySecretPwd");
    }
}

void __fastcall TForm1::btnCloseClick(TObject *Sender)
{
    Table1->Active = false;
    Session->RemovePassword("MySecretPwd");
    btnOpen->Enabled = true;
    btnClose->Enabled = false;
}

總結

`Session->AddPassword/RemovePassword` 是 BDE 時代處理本地加密資料表的標準作法。掌握「開啟前加、關閉後減」的配對原則,並注意 Session 全域作用域與密碼管理安全性,即可實現無縫自動化存取。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved