在 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 密碼清單移除
}
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 全域作用域與密碼管理安全性,即可實現無縫自動化存取。