線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1071
推到 Plurk!
推到 Facebook!

利用ADOQuery查询Access的疑惑?

答題得分者是:Chance36
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-02 01:21:07 IP:211.162.xxx.xxx 未訂閱
大大们好,能看看下面这个问题,指点一下我,好吗? 我想利用ADOQuery来检查用户的合法性,在认真看了 http://delphi.ktop.com.tw/topic.php?topic_id=46238 http://delphi.ktop.com.tw/topic.php?topic_id=43414 后,试着自己来做,code如下:

procedure TForm1.Button1Click(Sender: TObject);
var
  sUser,sPWD,sSQL:  String;
begin
  sUser := Edit1.Text;
  sPWD  := Edit2.Text;
  sSQL  := 'select * from 员工管理 where 员工编号 = ' + sUser + ' and 密码 = ' + sPWD;      ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add(sSQL);
  ADOQuery1.Active := True;
  if ADOQuery1.RecordCount = 0 then
  begin
    ShowMessage('用户名或密码有错!请检查一下');
    Exit;
  end;
  ADOQuery1.Close;
end;    
我用的是Access2000,在按下F9时没有错,但一执行时(Edit1和Edit2不为空,输入了数据的),就出错了 哇,在Access里我设置的员工编号密码数据类型都是文本类型啊,怎么又会出现上面的错误呢?真诚期待您的指点,谢谢先 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-02 02:07:06 IP:203.204.xxx.xxx 未訂閱
引言: sUser := Edit1.Text; sPWD := Edit2.Text; sSQL := 'select * from 员工管理 where 员工编号 = ' sUser ' and 密码 = ' sPWD;
bigdogchina 你好 上面片段改成如下 sSQL := 'select * from 员工管理 where 员工编号 = ''' sUser ''' and 密码 = ''' sPWD '''';
bigdogchina
版主


發表:238
回覆:523
積分:312
註冊:2003-04-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-02 10:16:17 IP:211.162.xxx.xxx 未訂閱
Chance36大大,您真是太强了,高手一出手,便知有没有,四两拨千金! sSQL := 'select * from 员工管理 where 员工编号 = ''' sUser ''' and 密码 = ''' sPWD '''';答题分已奉上,能否解释一下,为什么要在sUser和sPWD前后加上""吗,我很想知道为什么这样做 < class="code"> =============== 人生在勤,不索何获? ===============
------
人生在勤,不索何获?
Chance36
版主


發表:31
回覆:1033
積分:792
註冊:2002-12-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-03 18:13:44 IP:203.204.xxx.xxx 未訂閱
bigdogchina 你好     如果不加兩個引號會如何?假設sUser:='aaa' sPWD:='bbb',經過列字串結合後的結果會是什麼?    sSQL := 'select * from 员工管理 where 员工编号 = ' + sUser + ' and 密码 = ' + sPWD; ==> sSQL := 'select * from 员工管理 where 员工编号 = aaa and 密码 = bbb ' ; 應該為>sSQL := 'select * from 员工管理 where 员工编号 = 'aaa' and 密码 = 'bbb' ' ; 但字串是以[']單引號括住的,而字串中必須有[']時,那麼須在字串內容的[']前再補個[']形成['']現象,這就是所謂的跳脫字元,好像在C 裏面使用'\'的作用是一樣的,所以在引號內的兩個引號你要把它當成一個引號看待。最後就變成下面的結果了 sSQL := 'select * from 员工管理 where 员工编号 = ''' sUser ''' and 密码 = ''' sPWD '''';
系統時間:2024-07-01 4:05:25
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!