关于SQL语句的初级问题 |
答題得分者是:frappe
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
frappe
中階會員 發表:88 回覆:114 積分:95 註冊:2008-10-21 發送簡訊給我 |
我自己會習慣把SQL語法設一個String
[code delphi] str:='select * from rd where 提醒人=''' edit1.text ''''; ABSQuery1.SQL.Text:=str; [/code] 接下來講解 提醒人=''' edit1.text ''''; 為什麼要那麼多撇 左邊3撇的原因........第1,2撇:SQL命令是單引號,但是單引號會判定為斷點,所以用2撇 第3撇: 斷點分隔文字和變數 右邊4撇................1 : 斷點 2,3: 單引號 4: 接 str:=' 的引號 如果寫久了我都會用自己創的白癡口訣............. 文字變數在中間....左3右3 文字變數在最後....左3右4 加油嚕^^ ===================引 用 zhouying82 文 章=================== ABSQuery1.SQL.Text :='select*from rd where 提醒人=''爷爷'''; end. 我要怎么样把“爷爷”改成edit1.text ? ABSQuery1.SQL.Text :='select*from rd where 提醒人=edit1.text'; 提示有问题啊,还有想请问,SQL语句里面单引号是不是应该用''表示? 那么我经常看到有'''',这个是代表什么啊? |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
skywin
一般會員 發表:0 回覆:2 積分:0 註冊:2007-05-06 發送簡訊給我 |
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin SqlLink; case cbb1.ItemIndex of 4: begin try absqry.SQL.text:='select*from rd where 提醒人=' QuotedStr(lowercase(labelededit1.Text) ); absqry.Active:=true; except if absqry.RecordCount =0 then begin MessageBox(0,'数据库中没有此票记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); absqry.SQL.text:='select*from rd' end; end; end; 0: begin end; end; end; //sql数据库连接; procedure TForm1.SqlLink; begin DataSource1.DataSet :=absqry ; DBGrid1.DataSource :=DataSource1 ; DBGrid1.DataSource.DataSet :=absqry ; ABSDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName) DataBaseFileName; ABSDatabase1.DatabaseName:=DataBaseFileName; absqry.DatabaseName := DataBaseFileName; end; 而且很乖,每次我回复了SELECT*FROM RD之后,在按查询,系统就没有反应了。我在代码前加了 query1.sql.clear; 也没有用。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi ! |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
這樣寫應該不會是你描述的結果哦,你用try except 表示query open 錯誤才會去到msgbox 那邊
試一下這樣改 try absqry.close; absqry.SQL.text:='select*from rd where 提醒人=' QuotedStr(lowercase(labelededit1.Text) ); absqry.open; if absqry.isEmpty then MessageBox(0,'数据库中没有此票记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); except end; end; ===================引 用 zhouying82 文 章=================== procedure TForm1.SpeedButton1Click(Sender: TObject); begin SqlLink; case cbb1.ItemIndex of 4: begin try absqry.SQL.text:='select*from rd where 提醒人=' QuotedStr(lowercase(labelededit1.Text) ); absqry.Active:=true; except if absqry.RecordCount =0 then begin MessageBox(0,'数据库中没有此票记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); absqry.SQL.text:='select*from rd' //雖然不明白你的用途,但這種沒條件的select 很危險,萬一table 很大,會跑不動 end; end; end;
------
額有朝天骨,眼中有靈光 |
老大仔
尊榮會員 發表:78 回覆:837 積分:1088 註冊:2006-07-06 發送簡訊給我 |
你的if應該要放在try裡面
而不是放在except裡面... 試看看吧 [code delphi] try absqry.SQL.text:='select*from rd where 提醒人=' QuotedStr(lowercase(labelededit1.Text) ); absqry.Active:=true; if absqry.RecordCount =0 then begin MessageBox(0,'数据库中没有此票记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); absqry.SQL.text:='select*from rd'; end; except end; [/code]
編輯記錄
老大仔 重新編輯於 2009-03-23 21:36:13, 註解 無‧
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
看help , try..except try ...finally 是不同的
try...except 是做錯誤控管的 except 底下的只有在發生錯誤才會執行,這個錯誤是run time系統回應的錯誤,比如說sql語法錯誤, 記憶體不足等等 ===================引 用 zhouying82 文 章=================== 回大大。为是么我在EXCEPT后面的下面的这句代码不能执行呢? absqry.SQL.text:='select*from rd';
------
額有朝天骨,眼中有靈光 |
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
看資料庫的,你要測一下才知道,有的用% , 有的用* ,sql oracle access 不同
'select*from rd where 提醒人 like ' QuotedStr( 'de%'); 'select*from rd where 提醒人 like ' QuotedStr( 'de*'); ===================引 用 zhouying82 文 章=================== 问题已经解决了。还有我想问下,如果我想要模糊查询,要怎么写。比如说打出te,就弹出terry,teadf,teaaa;我知道用%like% ,但是具体怎么写呢?请各位大大指点下
------
額有朝天骨,眼中有靈光 |
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin SqlLink; case cbb1.ItemIndex of 3: begin absqry.sql.clear; absqry.SQL.text:='select*from rd where 提醒人=' QuotedStr(lowercase(labelededit1.Text) ); absqry.Active:=true; if absqry.RecordCount =0 then begin MessageBox(0,'数据库中没有此票记录,系统将显示全部记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); ToolButton9.OnClick(self); end; end; 2: begin absqry.sql.clear; absqry.SQL.text:='select*from rd where 提醒周期=' QuotedStr(lowercase(labelededit1.Text) ); absqry.Active:=true; if absqry.RecordCount =0 then begin MessageBox(0,'数据库中没有此票记录,系统将显示全部记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING); ToolButton9.OnClick(self); end; end; end; end; //sql数据库连接; procedure TForm1.SqlLink; begin DataSource1.DataSet :=absqry ; DBGrid1.DataSource :=DataSource1 ; DBGrid1.DataSource.DataSet :=absqry ; ABSDatabase1.DatabaseFileName := ExtractFilePath(Application.ExeName) DataBaseFileName; ABSDatabase1.DatabaseName:=DataBaseFileName; absqry.DatabaseName := DataBaseFileName; end; 当我选择另一个的选项是,总是会提示 search condition is not applicable - native error 30144. 这个是什么问题? 我试着加query.sql.clear;也没用
------
断断续续的学了几年,还是一个初学者,永远支持Delphi ! |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |