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

关于统计数据库记录总数的问题

答題得分者是:小傑克
zhouying82
高階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-08 16:00:57 IP:218.80.xxx.xxx 訂閱

[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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-08 16:10:21 IP:59.112.xxx.xxx 訂閱
3,只要在数据栏中时间的一项不为空,记录也加1.
請先描述清楚,什麼叫做時間一項不為空
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-08 16:11:29, 註解 無‧
小傑克 重新編輯於 2009-04-08 16:23:32, 註解 無‧
zhouying82
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-08 16:27:42 IP:218.80.xxx.xxx 訂閱
2009/04/08 12:40
周三11:40
2009/04/10 6:07
周六15:00

比如今天是周三,4/8
那么上面的记录总数就是2条
我要这个结果。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
編輯記錄
zhouying82 重新編輯於 2009-04-08 16:28:30, 註解 無‧
小傑克
資深會員


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-08 16:41:26 IP:59.112.xxx.xxx 訂閱
這是邏輯問題, 所以你這個通知系統有三個欄位紀錄    每週, 每日, 還有時間,但是時間是必要欄位, 共有幾種狀況
1. 每週 時間 無每週
2. 每日 時間 無每日
3. 時間 無每週且無每日
所以就是 (每週 = '') and (每日 = '') and (時間 <> '' ) 則 1 就可以


===================引 用 zhouying82 文 章===================
2009/04/08 12:40
周三11:40
2009/04/10 6:07
周六15:00

比如今天是周三,4/8
那么上面的记录总数就是2条
我要这个结果。
------
額有朝天骨,眼中有靈光
小傑克
資深會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-08 16:52:35 IP:59.112.xxx.xxx 訂閱
想起古早以前也寫過類似的 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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-08 16:58:44 IP:218.80.xxx.xxx 訂閱
这个逻辑好象不对哦?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
zhouying82
高階會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-08 17:03:44 IP:218.80.xxx.xxx 訂閱
那该怎么写?下面这样好像不太对哦?
[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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-08 17:12:08 IP:59.112.xxx.xxx 訂閱

===================引 用 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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-04-08 18:40:37 IP:118.168.xxx.xxx 未訂閱
您好,

因為日期(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, 註解 無‧
系統時間:2024-05-19 14:14:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!