全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1736
推到 Plurk!
推到 Facebook!

使用者登入框的問題

尚未結案
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-24 10:28:52 IP:202.181.xxx.xxx 未訂閱
小弟有些問題想請教各位大大 我想要在登入資料庫前  先做一個id 與 password的登入確認動作 當我id and password確認正確  才可以進一步操作資料庫 程式碼如下:

int LoginNum;
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 AnsiString sID,sPassword;
 sID=LabeledEdit1->Text;
 sPassword=LabeledEdit2->Text;
 if (sID.Length()==0 && sPassword.Length()==0)
 {
    MessageDlg("請輸入帳號或密碼錯誤!", mtError, TMsgDlgButtons() <<  mbOK, 0);
   return;
 }
 AnsiString sQuery;
 sQuery="Select * From 使用者 Where uID='" sID "' And  uPasswd='" sPassword "'";
 ADOQuery1->Active=false;
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add(sQuery);
 ADOQuery1->Active=true;     if(ADOQuery1->RecordCount!=0) //.
 {
    MessageDlg("登入成功!", mtConfirmation, TMsgDlgButtons() << mbOK,  0);
    Form2->Show();
    我的問題是在這裡如何show form2後 立即把form1關掉呢??
 }
 else
 {
    MessageDlg("錯誤:請輸入正確的帳號或密碼!", mtError,  TMsgDlgButtons() << mbOK, 0);
    LoginNum  ;
    if (LoginNum == 3)
    {
      ShowMessage("Bye!!");
      Form1->Close();
    }
 }
 ADOQuery1->Close();
}
 
期待各位的回覆....
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-24 12:51:04 IP:219.137.xxx.xxx 未訂閱
odyaho 您好:    Form1 是您整個程式的 MainForm 吧?那麼您所謂的 "關掉" 指的是 "結束" 掉,還是 "隱藏" 起來?如果是關掉的話,那就等於是結束整個程式,如果是隱藏起來的話,那就使用 Form1->Hide(); 即可,但是您必須要自己做好相關的處理,例如:關閉 Form2 前要恢復 Form1 的顯示,因為當您關閉 Form2 時,Form1 是不會自動顯示出來的,這樣將會變成沒有操作介面的狀態。
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-24 16:02:52 IP:202.181.xxx.xxx 未訂閱
Dear RedSnow: 我的主畫面是Form2  ,Form1是顯示登入畫面而已 依照您的意見 我應該要把主畫面改成Form1,登入框改為Form2嗎?? 假設我更改了 我將一開始show的畫面更改為form2(登入畫面) 當帳號密碼登入成功後 即進入form1(主畫面) 我知道可以將form2設為隱藏 可是可以直接將form2 delete掉嗎?? 只剩下Form1(主畫面)呢?? 謝謝您的回覆...
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-24 16:26:39 IP:219.137.xxx.xxx 未訂閱
odyaho 您好:    無論 MainForm 是那一個 Form 都好,總之 MainForm 不存在的話,其它的 Form 也不能單獨存在的,只要您的流程能正確的運作,Form 的名稱並不重要。    MainForm 之外的 Form 可以在不需要使用時將其 delete 掉,如果要再使用的話,重新 new 一次就可以了。 發表人 - RedSnow 於 2005/05/24 16:35:28
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-24 16:56:50 IP:202.181.xxx.xxx 未訂閱
Dear RedSnow: 我先假設 if form1 is mainform, form2 is loginform 一開始要出現loginform怎麼寫呢?? 是到project->options->forms裡設定嗎?? 假設我設定loginform為起始視窗.. 然後 且當登入成功後 要進入mainform.... 在來 怎麼寫 是將loginform隱藏呢?? 還是??? 隱藏會消耗記憶體嗎?? 多謝您的回覆
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-24 17:43:11 IP:219.137.xxx.xxx 未訂閱
odyaho 您好:    您可以將 MainForm 的 Visible 屬性先設為 false,這樣子 MainForm 就不會先顯示出來,然後在 OnShow 事件中處理相關動作,例如:
void __fastcall TMainForm::FormShow(TObject *Sender)
{
    LogingForm->ShowModal();  // 叫出 Login 視窗,該視窗關閉後才會執行下列動作
    delete LogingForm;  // 刪除掉 Login 視窗
    LogingForm = NULL;
    Show();  // 顯示 MainForm
}
您參考一下。
odyaho
初階會員


發表:60
回覆:104
積分:42
註冊:2005-02-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-24 20:45:09 IP:219.86.xxx.xxx 未訂閱
Dear RedSnow:    Ok  I'll try it..    Thanks....
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-25 01:30:52 IP:221.169.xxx.xxx 未訂閱
odyaho您好:
提供另一種方式供參考!我寫飯店前檯作業時,使用者一開始要Login,
交班也要重新Login,所以我將loginform的處理是放置於MainForm裡面的
LoginUser()函數處理!
一開始
void __fastcall MainForm::FormCreate(TObject *Sender)
{
  ...
  ...
  LoginUser();
}
void __fastcall MainForm::LogInUser()
{
  bool PassOk=false; // 假設認證不過
  Tloginform *loginform;
  try
  {
    loginform->ShowModal();
    PassOk=loginform->IsOk; // 傳回loginform的認證
    delete loginform;
  }
  catch (...)
  {
    delete loginform;
  }
  if (!PassOk)
    PostQuitMessage(WM_QUIT);  // 關閉程式
}
// 重新輸入密碼時用!
void __fastcall MainForm::Login1Click(TObject *Sender)
{
  LogInUser();
}
注意我只是於MainForm的FormCreate上處理而已
請參考!
Andy Chang
------
Andy Chang
系統時間:2024-05-04 9:54:58
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!