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

关于SQL语句的初级问题

答題得分者是:frappe
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-17 21:44:58 IP:124.77.xxx.xxx 訂閱
ABSQuery1.SQL.Text :='select*from rd where 提醒人=''爷爷''';
end.
我要怎么样把“爷爷”改成edit1.text ?

ABSQuery1.SQL.Text :='select*from rd where 提醒人=edit1.text';
提示有问题啊,还有想请问,SQL语句里面单引号是不是应该用''表示?
那么我经常看到有'''',这个是代表什么啊?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-17 22:06:11 IP:115.82.xxx.xxx 訂閱
我自己會習慣把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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-17 22:08:54 IP:59.114.xxx.xxx 未訂閱

[code delphi]
ABSQuery1.SQL.Text :='select*from rd where ´提醒人=' '''' edit1.text '''';
[/code]
編輯記錄
老大仔 重新編輯於 2009-03-17 22:10:09, 註解 無‧
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-03-18 03:15:53 IP:59.112.xxx.xxx 訂閱
'select*from rd where 提醒人=''爷爷''' 
Delphi 有個function 幫忙讓字串組合的時候不要那麼多 ' ,給你參考一下
'select*from rd where 提醒人=' QuotedStr( Edit1.Text )
------
額有朝天骨,眼中有靈光
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-03-20 17:14:27 IP:218.80.xxx.xxx 訂閱
还有一点,就是如果我在当前数据库中没有找到相应的记录,表格就会显示为空。我想让他,如果碰到没有想匹配的记录时,弹出错误窗口,我试着用
if query1.isempty then
....
好像没什么用吗?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-03-21 00:54:42 IP:59.114.xxx.xxx 未訂閱
if Query1.RecordCount = 0 then....
或許可以
編輯記錄
老大仔 重新編輯於 2009-03-21 02:36:40, 註解 無‧
skywin
一般會員


發表:0
回覆:2
積分:0
註冊:2007-05-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-03-21 23:27:39 IP:218.107.xxx.xxx 訂閱
ABSQuery1.SQL.Text :='select*from rd where 提醒人='+#39+edit1.text+#39;
采用#39来表示',简洁,明了
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-03-22 21:16:55 IP:116.230.xxx.xxx 訂閱
回老大仔,你说的这行代码我也试过,但就是不行。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-03-22 22:07:27 IP:59.114.xxx.xxx 未訂閱
為什麼不行呢?
是有錯誤嗎?
可以的話
請放上您比較完整的程式碼吧
要不然大家也不太清楚你的問題到底錯在哪@@|||
zhouying82
高階會員


發表:150
回覆:272
積分:189
註冊:2004-03-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-03-23 21:01:13 IP:116.230.xxx.xxx 訂閱
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-03-23 21:21:06 IP:59.112.xxx.xxx 訂閱
這樣寫應該不會是你描述的結果哦,你用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;
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-03-23 21:22:24, 註解 無‧
小傑克 重新編輯於 2009-03-23 21:25:38, 註解 無‧
老大仔
尊榮會員


發表:78
回覆:837
積分:1088
註冊:2006-07-06

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-03-23 21:35:22 IP:59.114.xxx.xxx 未訂閱
你的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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-03-24 07:41:06 IP:116.230.xxx.xxx 訂閱
回大大。为是么我在EXCEPT后面的下面的这句代码不能执行呢?
absqry.SQL.text:='select*from rd';
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-03-24 08:46:40 IP:59.112.xxx.xxx 訂閱
看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

發送簡訊給我
#15 引用回覆 回覆 發表時間:2009-03-24 10:44:16 IP:218.80.xxx.xxx 訂閱
问题已经解决了。还有我想问下,如果我想要模糊查询,要怎么写。比如说打出te,就弹出terry,teadf,teaaa;我知道用%like% ,但是具体怎么写呢?请各位大大指点下
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#16 引用回覆 回覆 發表時間:2009-03-24 11:01:48 IP:59.112.xxx.xxx 訂閱
看資料庫的,你要測一下才知道,有的用% , 有的用*  ,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

發送簡訊給我
#17 引用回覆 回覆 發表時間:2009-03-24 11:35:47 IP:218.80.xxx.xxx 訂閱
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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2009-03-24 12:05:25 IP:59.112.xxx.xxx 訂閱
bde 很久沒用,錯誤訊息不是很確定
你可以檢查一下, 你那個什麼週期的欄位是字串還是數字
------
額有朝天骨,眼中有靈光
系統時間:2024-04-17 7:24:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!