关于统计数据库记录总数的问题 |
答題得分者是:小傑克
|
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
[code delphi] //今日的提醒消息个数 function TForm1.DataRecord: Integer; var today:integer; begin today:=0; ABSTable1.first; while not ABSTable1.eof do begin if (DateToStr(ABSTable1.FieldByName('提醒时间').AsDateTime) <>'') then if (FormatDateTime('yy:mm:dd',now)=FormatDateTime('yy:mm:dd',ABSTable1.FieldByName('提醒日期').AsDateTime)) or (formatdatetime('ddd',now)=ABSTable1.FieldByName('每星期').asstring) then begin Inc(today); end; ABSTable1.next end; result:=today; end; [/code] 现在的问题是,我想得到的总数是, 1,每星期和现在相同,记录加1 2,年月日和现在相同,记录加1 3,只要在数据栏中时间的一项不为空,记录也加1. 我碰到的问题是,记录的总数只能是1,2项的累计,第3个,无法累计到记录中,该怎么写。请大大们帮忙。小弟先谢了。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi ! | ||||||||||||||||||||
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
|||||||||||||||||||||
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
比如今天是周三,4/8 那么上面的记录总数就是2条 我要这个结果。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
編輯記錄
zhouying82 重新編輯於 2009-04-08 16:28:30, 註解 無‧
|
||||||||||||||||||||
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
這是邏輯問題, 所以你這個通知系統有三個欄位紀錄 每週, 每日, 還有時間,但是時間是必要欄位, 共有幾種狀況
1. 每週 時間 無每週 2. 每日 時間 無每日 3. 時間 無每週且無每日 所以就是 (每週 = '') and (每日 = '') and (時間 <> '' ) 則 1 就可以 ===================引 用 zhouying82 文 章===================
比如今天是周三,4/8 那么上面的记录总数就是2条 我要这个结果。
------
額有朝天骨,眼中有靈光 |
||||||||||||||||||||
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
想起古早以前也寫過類似的 alert 系統...不禁想在多提醒你一個東西
很顯然你這個function 一天會執行 許多次 如果機器很慢,或是遠端資料庫,或是準確度問題等等考慮進去 建議你取時間可以先放到function 開頭, 以免小小時間差造成一些不準確情況發生, 雖然只是0.xx幾秒間的差異 function TForm1.DataRecord: Integer; var today:integer; ThisTime:TDateTime; begin today:=0; ThisTime := now ;
------
額有朝天骨,眼中有靈光 |
||||||||||||||||||||
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
|||||||||||||||||||||
zhouying82
高階會員 發表:150 回覆:272 積分:189 註冊:2004-03-16 發送簡訊給我 |
那该怎么写?下面这样好像不太对哦?
[code delphi] function TForm1.DataRecord: Integer; var today:integer; begin today:=0; ABSTable1.first; while not ABSTable1.eof do begin if (DateToStr(ABSTable1.FieldByName('提醒时间').AsDateTime) <>'') then if (FormatDateTime('yy:mm:dd',now)=FormatDateTime('yy:mm:dd',ABSTable1.FieldByName('提醒日期').AsDateTime)) and(formatdatetime('ddd',now)=ABSTable1.FieldByName('每星期').asstring) and (DateToStr(ABSTable1.FieldByName('提醒时间').AsDateTime) <>'') then begin Inc(today); end; ABSTable1.next end; result:=today; end; [/code]
------
断断续续的学了几年,还是一个初学者,永远支持Delphi ! |
||||||||||||||||||||
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
===================引 用 zhouying82 文 章=================== [code delphi] //今日的提醒消息个数 function TForm1.DataRecord: Integer; var today:integer; begin today:=0; ABSTable1.first; while not ABSTable1.eof do begin // if (DateToStr(ABSTable1.FieldByName('提醒时间').AsDateTime) <>'') then //既然時間是必要欄位,這行白做工的 if (FormatDateTime('yy:mm:dd',now)=FormatDateTime('yy:mm:dd',ABSTable1.FieldByName('提醒日期').AsDateTime)) or (formatdatetime('ddd',now)=ABSTable1.FieldByName('每星期').asstring) then begin Inc(today); end; //我注意到你日期欄位是用DateTime類型, 可能需要測試一下如何判斷日期為空的狀況 if (ABSTable1.FieldByName('提醒日期').AsString = '' ) and (ABSTable1.FieldByName('每星期').asstring='') and (DateToStr(ABSTable1.FieldByName('提醒时间').AsDateTime) <>'') then Inc(today); ABSTable1.next end; result:=today; end; [/code]
------
額有朝天骨,眼中有靈光 |
||||||||||||||||||||
st33chen
尊榮會員 發表:15 回覆:591 積分:1201 註冊:2005-09-30 發送簡訊給我 |
您好,
因為日期(wdt)已確定, 透過 DayOfTheWeek 函數及字串轉換可以得到該日期的"週幾"(wwk), 也是確定值 然後丟給 db 去算筆數不是比較快 query1.sql.text := 'select count(*) cnt from table1 where 提醒日期 = ''' wdt ''' or 每星期=''' wwk '''';
------
IS IT WHAT IT IS 我是 李慕白 請倒著唸. 又想把老話拿出來說, 請用台語發音 : 專家專家全是ROBOT CAR (滷肉腳啦); 都已接手這麼久了, 績效還是那麼爛, 講話還那麼大聲.
編輯記錄
st33chen 重新編輯於 2009-04-08 18:42:56, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |