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

指標Bof&Eof判斷問題

尚未結案
LearnDelphi
一般會員


發表:4
回覆:7
積分:2
註冊:2005-04-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-25 20:14:19 IP:59.120.xxx.xxx 未訂閱
有一個判斷問題想請問大家 現在自設四個按鈕,分別為First,Prior,Next,Last 請問如果目前是在第一筆的話 First,Prior兩個按鈕都不能點選 如果是在最後一筆 Next,Last不能點選 這樣我怎麼樣宣告判斷呢 不好意思我還在學習中 請問可以詳細解釋作法或觀念嗎
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-25 20:27:01 IP:203.204.xxx.xxx 未訂閱
您好: 將4個Button的onclick都指向btnFirst 然後參考如下程試碼,隨手寫了一下,可能有誤,您試試.
btnFirst.Enabled:=true;
btnPrior.Enabled:=true;
btnNext.Enabled:=true;
btnEnd.Enabled:=true;
if (Sender=btnFirst) then  
 begin
  Query.First();
  btnFirst.Enabled:=false;   
  btnPrior.Enabled:=false;   
 end;
if (Sender=btnPrior) then  
 begin
  Query.Prior();
  if (Query.Bof) then  
   begin
    btnFirst.Enabled:=false;   
    btnPrior.Enabled:=false;   
   end;
 end;
if (Sender=btnNext) then  
 begin
  Query.Next();
  if (Query.Eof) then  
   begin
    btnNext.Enabled:=false;   
    btnEnd.Enabled:=false;   
   end;
 end;
if (Sender=btnEnd) then  
 begin
  Query.Last();
  btnNext.Enabled:=false;   
  btnEnd.Enabled:=false;   
 end;
發表人 - supman 於 2005/04/25 20:32:58
LearnDelphi
一般會員


發表:4
回覆:7
積分:2
註冊:2005-04-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-25 20:40:24 IP:59.120.xxx.xxx 未訂閱
謝謝supman您的方法,有大概了解在做判斷時要怎麼跑 剛忘了po我的程式碼 再請問我此程式要怎麼修改 續上述的功能要求 procedure BtnFirstClick(Sender: TObject); procedure BtnPriorClick(Sender: TObject); procedure BtnNextClick(Sender: TObject); procedure BtnLastClick(Sender: TObject); function ToRecord(QueryDataSet: TQuery; ActRecord: string):Boolean; implementation uses CUS01U2; var CusNo : String; {$R *.DFM} procedure TForm1.BtnFirstClick(Sender: TObject); begin ToRecord (CusDM.QueryCus,'First'); end; procedure TForm1.BtnPriorClick(Sender: TObject); begin ToRecord (CusDM.QueryCus,'Prior'); end; procedure TForm1.BtnNextClick(Sender: TObject); begin ToRecord (CusDM.QueryCus,'Next'); end; procedure TForm1.BtnLastClick(Sender: TObject); begin ToRecord (CusDM.QueryCus,'Last'); end; Function TForm1.ToRecord(QueryDataSet: TQuery; ActRecord: string):Boolean; var CaseSet : Integer; begin If ActRecord= 'First' then CaseSet:= 1; If ActRecord= 'Prior' then CaseSet:= 2; If ActRecord= 'Next' then CaseSet:= 3; If ActRecord= 'Last' then CaseSet:= 4; CusDM.QueryCus.Close; CusDM.QueryCus.SQL.Clear; Case CaseSet of 1:begin CusDM.QueryCus.SQL.Add('select * from customer'); CusDM.QueryCus.SQL.Add('where CustNo = (select min(CustNo)from customer)'); end; 2:begin CusDM.QueryCus.SQL.Add('select * from customer'); CusDM.QueryCus.SQL.Add('where CustNo =(select max(CustNo)from customer'); CusDM.QueryCus.SQL.Add('where CustNo <''' CusNo ''')'); end; 3:begin CusDM.QueryCus.SQL.Add('select * from customer'); CusDM.QueryCus.SQL.Add('where CustNo =(select min(CustNo)from customer'); CusDM.QueryCus.SQL.Add('where CustNo >''' CusNo ''')'); end; 4:begin CusDM.QueryCus.SQL.Add('select * from customer'); CusDM.QueryCus.SQL.Add('where CustNo = (select max(CustNo)from customer)'); end; end; CusDM.QueryCus.Open; CusNo := CusDM.QueryCus.FieldByName('CustNo').AsString; end; end.
supman
尊榮會員


發表:29
回覆:770
積分:924
註冊:2002-04-22

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-25 20:57:08 IP:203.204.xxx.xxx 未訂閱
哇勒~ 看到這段好眼熟,原來是之前我就有答過您了,您怎麼還是用這種寫法阿,上次就有示範一次給您看了耶. 而且您用單筆下SQL更本也沒有所謂的Bof,Eof,因為每一筆都是Eof,Bof... 如果硬要這樣寫的話,參考如下:    先得到MaxCustNo與LastCustNo
btnFirst.Enabled:=true;
btnPrior.Enabled:=true;
btnNext.Enabled:=true;
btnEnd.Enabled:=true;    1:begin
CusDM.QueryCus.SQL.Add('select * from customer');
CusDM.QueryCus.SQL.Add('where CustNo = (select min(CustNo)from customer)');
btnFirst.Enabled:=false;   
btnPrior.Enabled:=false;   
CustNo=CusDM.QueryCus.FieldByName('CustNo').AsString;
end;    2:begin
CusDM.QueryCus.SQL.Add('select * from customer');
CusDM.QueryCus.SQL.Add('where CustNo =(select max(CustNo)from customer');
CusDM.QueryCus.SQL.Add('where CustNo <''' CusNo ''')');
CustNo=CusDM.QueryCus.FieldByName('CustNo').AsString;
if (CustNo=MaxCust) then 
 begin
  btnFirst.Enabled:=false;   
  btnPrior.Enabled:=false;   
 end;
end;    3:begin
CusDM.QueryCus.SQL.Add('select * from customer');
CusDM.QueryCus.SQL.Add('where CustNo =(select min(CustNo)from customer');
CusDM.QueryCus.SQL.Add('where CustNo >''' CusNo ''')');
CustNo=CusDM.QueryCus.FieldByName('CustNo').AsString;
if (CustNo=LastCust) then 
 begin
  btnNext.Enabled:=false;   
  btnLast.Enabled:=false;   
 end;
end;    4:begin
CusDM.QueryCus.SQL.Add('select * from customer');
CusDM.QueryCus.SQL.Add('where CustNo = (select max(CustNo)from customer)');
CustNo=CusDM.QueryCus.FieldByName('CustNo').AsString;
btnNext.Enabled:=false;   
btnLast.Enabled:=false;   
end;
LearnDelphi
一般會員


發表:4
回覆:7
積分:2
註冊:2005-04-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-26 20:00:41 IP:59.120.xxx.xxx 未訂閱
謝謝supman的回答 嗯..我之前就有提過問題,您提供的方法有試出來謝謝 沒有更改是因為這是老師要我們先用select的方式 所以我才延續之前select的作法.
LearnDelphi
一般會員


發表:4
回覆:7
積分:2
註冊:2005-04-07

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-30 05:25:58 IP:218.162.xxx.xxx 未訂閱
supman您好: 我再想要請教你一下 你有說先得到MaxCustNo與LastCustNo 要怎麼寫呢...麻煩到你 我想了很久都想不出來怎麼寫
系統時間:2024-05-17 14:35:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!