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

求救使用者登入的問題

尚未結案
jayko
一般會員


發表:2
回覆:5
積分:1
註冊:2004-05-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-05 20:10:15 IP:163.23.xxx.xxx 未訂閱
程式部分: procedure TForm1.Button1Click(Sender: TObject); begin clientdataset1.First; if not clientdataset1.eof then begin if ClientDataSet1.Locate('loginname',sUserName,[])then begin pwd:=ClientDataSet1.lookup('loginname',sUserName,'password'); edit1.Text :=VarToStr(pwd); edit2.Text :=VarToStr(pwd); if pwd <> sUserPWD then begin Application.MessageBox('輸入的用戶名或密碼不對,請您重新檢查','注意',MB_OK); end else if pwd = sUserPWD then showmessage('OK'); end; end; end; 在上面的程式碼執行後,會出現一個問題-> 在第一次click後會先執行application.messagebox,在第二次click時才會執行showmessage,請問要如何解決(sUserName & sUserPWD的輸入均正確)??
pillar62
資深會員


發表:9
回覆:324
積分:271
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-06 10:29:45 IP:210.64.xxx.xxx 未訂閱
你好 可以試試看在 pwd:=ClientDataSet1.lookup('loginname',sUserName,'password'); 這一段程式碼的部分下中斷點看一下所找到的資料為何!! Pillar Wang
------
Pillar Wang
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-06 11:57:04 IP:202.62.xxx.xxx 未訂閱
您好﹗    改成這樣試試﹕
begin
  clientdataset1.First;
  if not clientdataset1.eof then
    begin
      if ClientDataSet1.Locate('loginname',sUserName,[])then
        begin
          pwd:=ClientDataSet1.lookup('loginname',sUserName,'password');
          edit1.Text :=VarToStr(pwd);
          edit2.Text :=VarToStr(pwd);
          if pwd <> sUserPWD then
            Application.MessageBox('輸入的用戶名或密碼不對,請您重新檢查','注意',MB_OK)
          else
            showmessage('OK');
        end;
    end;
end;
在上貼程式碼的時候﹐您可使用格式列中的[插入code]功能對程式碼進行縮排﹐以便觀察程式碼的流程﹒ ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/04/06 12:09:10
------
忻晟
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-06 12:06:07 IP:202.62.xxx.xxx 未訂閱
您好﹗    在改一下﹐因為您是利用Locate的方法先來判斷sUserName是否是正确的用戶名﹐若是的話﹐才會進入密碼正确与否的判斷中﹐所以可單獨顯示用戶名的錯誤還是密碼的錯誤﹐如下﹕
begin
  clientdataset1.First;
  if not clientdataset1.eof then
    begin
      if ClientDataSet1.Locate('loginname',sUserName,[])then
        begin
          pwd:=ClientDataSet1.lookup('loginname',sUserName,'password');
          edit1.Text :=VarToStr(pwd);
          edit2.Text :=VarToStr(pwd);
          if pwd <> sUserPWD then
            Application.MessageBox('輸入的密碼不對,請您重新檢查','注意',MB_OK)
          else
            showmessage('OK');
        end
      else
        begin
          Application.MessageBox('輸入的用戶名不對,請您重新檢查','注意',MB_OK);
        end;
    end;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
jayko
一般會員


發表:2
回覆:5
積分:1
註冊:2004-05-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-06 13:20:35 IP:61.221.xxx.xxx 未訂閱
cashxin2002大大: 改成上述程式後,他直接show給用戶名不對的那個messagebox,感謝你的回答!!
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-06 14:01:29 IP:202.62.xxx.xxx 未訂閱
您好﹗    這就說明在執行下句的Locate方法時﹐資料庫中沒有相符合sUserName的資料錄﹒ if ClientDataSet1.Locate('loginname',sUserName,[])then ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
jayko
一般會員


發表:2
回覆:5
積分:1
註冊:2004-05-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-06 16:41:48 IP:163.23.xxx.xxx 未訂閱
所輸入的sUserName確實存在於資料錄中,仍然出現相同的問題。 目前採sUserName和sUserPWD同時check是可pass的,只是無法個別show出error是在username 或 password,我會再研究看看~~感謝你的回答!!^^ 再請教大大~~ 在開發OCX(ActiveForm)時,使用ClientDataSet1.Locate('loginname;password',VarArrayOf([sUserName,sUserPWD]),[])時會出現[Error] onlinetestImpl1.pas(405): Undeclared identifier: 'VarArrayOf' 此情形要如何解決呢?? 發表人 - jayko 於 2005/04/06 22:31:14
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-07 09:25:16 IP:202.62.xxx.xxx 未訂閱
您好﹗    在Uses中加入Variants uses   Windows, Messages, SysUtils, Variants ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
系統時間:2024-06-29 3:52:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!