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

又一个关于SQL的查询问题

答題得分者是:老大仔
zhouying82
高階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-24 17:27:10 IP:218.80.xxx.xxx 訂閱
代码如下:
//查询记录
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SqlLink;
TDateField(DBGrid1.Columns.items[1].Field).DisplayFormat:='HH:mm';
absqry.SQL.Clear ;
case cbb1.ItemIndex of
2: begin
absqry.SQL.text:='select*from rd where 提醒周期=' QuotedStr(labelededit1.Text);
absqry.Active:=true;
if absqry.RecordCount =0 then
begin
MessageBox(0,'数据库中没有此票记录,系统将显示全部记录!', 'ReminDer提醒',MB_OK or MB_ICONWARNING);
ToolButton9.OnClick(self);
end;
end;
3: begin
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;

//按照时间排序:
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
SqlLink;
absqry.SQL.text:='select*from rd order by 提醒时间';
absqry.Active:=true;
TDateField(DBGrid1.Columns.items[1].Field).DisplayFormat:='HH:mm';
absqry.SQL.Clear ;

现在的问题是每次执行查询,一定要先执行下DBGrid1TitleClick,然后才可以正确执行条件查询,否则就会出现错误。

请问各位大大,这个是什么原因啊?我急啊!
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
老大仔
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-25 00:19:06 IP:59.114.xxx.xxx 未訂閱
因為你把DataSource1、DatagGrid1..等等的設定都擺在SqlLink中
而你只有在DBGrid1TitleClick中有呼叫SqlLink
所以當你按下了DBGrid1TitleClick時,那些連結資料庫的設定就會開起來(SqlLink)
然後你其它的查詢才不會有問題

但萬一!!當你在還沒按下DBGrid1TitleClick就先開始查詢,那麼就一定會出錯
因為所有的資料庫連結都還沒設定好
所以你要在別的查詢功能中也加入SqlLink~

舉例來說:(1和2是執行的順序)
一、
(1)DBGrid1TitleClick->SqlLink=>可以查詢
(2)某查詢=>也可以查詢

但假如是:
二、
(1)某查詢=>無法查詢
(2)DBGrid1TitleClick->SqlLink=>可以查詢

所以應該會是:
三、
(1)某查詢->SqlLink=>可以查詢
(2)DBGrid1TitleClick->SqlLink=>可以查詢

而你的狀況"一定要先執行下DBGrid1TitleClick然後才能正確執行條件查詢"
應該是第一種的狀況
然後會出現錯誤是因為你可能做了第二種的狀況(因為sql的設定都還沒設定)
所以用了第三個方法可能不會出錯....吧
以上純屬個人的猜測
請試看看
編輯記錄
老大仔 重新編輯於 2009-03-25 00:19:57, 註解 無‧
系統時間:2024-05-18 11:52:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!