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

关于TABLE的Filter属性

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


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

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

[code delphi]
function TForm1.DataRecord: Integer;
var today:integer;
begin
today:=0;
Table1.open;
Table1.First ;
while not Table1.eof do
begin
if (FormatDateTime('yyyy-MM-dd',now)=FormatDateTime('yyyy-MM-
dd',Table1.FieldByName('日期').AsDateTime))
or (formatdatetime('ddd',now)=Table1.FieldByName('每周').asstring)
or
(FormatDateTime('MM-dd',Now)=FormatDateTime('MM-
dd',Table1.FieldByName('每月').AsDateTime)) then
begin
Inc(today);
end;
if (Table1.FieldByName('日期').AsString = '' ) and
(Table1.FieldByName('每周').asstring='') and
(DateToStr(Table1.FieldByName('时间').AsDateTime)
<>'')and(Table1.FieldByName('每月').Asstring='') then
Inc(today);
Table1.next
end;
result:=today;
end;
[/code]

我有上面的这段函数代码,想问下怎么样才可以写成TABLE.FILTER里面的内容呢?不要用SQL语句。哪位大大,帮我看看啊?谢谢
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
編輯記錄
zhouying82 重新編輯於 2009-05-18 16:12:33, 註解 無‧
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-05-19 10:01:54 IP:59.120.xxx.xxx 訂閱
很久, 沒有人回覆, 表示沒有人看得懂,
您想要表達的問題是什麼?

看您的function, 好像是求資料表內, 符合的共有幾個today,
這個跟Filter有什麼關係?
如果, 想要跟DataSet.Filter有關的話,
就寫在DataSet.OnFilterRecord事件就好啦,
記得, 再將DataSet.Filtered:= true;
編輯記錄
max5020 重新編輯於 2009-05-19 10:02:28, 註解 無‧
max5020 重新編輯於 2009-05-19 10:03:40, 註解 無‧
zhouying82
高階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-05-19 10:15:28 IP:218.80.xxx.xxx 訂閱
大大,可能是我表达不清,我想说的,点击某个按钮,就列出数据表中都是今天的记录。因为是用TABLE.所有就像问这个FILTER怎么写
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-05-19 10:33:00 IP:59.120.xxx.xxx 訂閱

===================引 用 zhouying82 文 章===================
先將Table1.Filtered:= true;
加入Table1.onFilterRecord事件, 如下
[code delphi]
procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept:= false;
if (FormatDateTime('yyyy-MM-dd',now)=FormatDateTime('yyyy-MM-dd',Table1.FieldByName('日期').AsDateTime))
or (formatdatetime('ddd',now)=Table1.FieldByName('每周').asstring) or
(FormatDateTime('MM-dd',Now)=FormatDateTime('MM-dd',Table1.FieldByName('每月').AsDateTime)) then Accept:= true;
if (Table1.FieldByName('日期').AsString = '' )
and (Table1.FieldByName('每周').asstring='')
and (DateToStr(Table1.FieldByName('时间').AsDateTime)<>'')
and (Table1.FieldByName('每月').Asstring='') then Accept:= true;
end;
[/code]
zhouying82
高階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-05-19 15:14:27 IP:218.80.xxx.xxx 訂閱
大大你好,我还想请问,如果我想从数据表中从中筛选一周的记录,要从哪方面动手呢?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-05-19 15:58:20 IP:59.120.xxx.xxx 訂閱
 用WeekOf, 找出一週的起止日期,
再判定日期範圍即可!!
zhouying82
高階會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-05-20 14:38:06 IP:218.80.xxx.xxx 訂閱

[code delphi]
procedure TForm1.ABSTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var testDay,testday1,a,b,c,d:TDateTime;
begin
testDay := absTable1.FieldByName('提醒日期').Asdatetime;
testDay1 := absTable1.FieldByName('每月').Asdatetime;
WeekFromDayToDay(testDay , a, b);
WeekFromDayToDay(testDay1 , c, d);
Accept:= false;
if (FormatDateTime('yyyy-MM-dd',now)=FormatDateTime('yyyy-MM-dd',absTable1.FieldByName('提醒日期').AsDateTime))
or (formatdatetime('ddd',now)=absTable1.FieldByName('每周').asstring) or
(FormatDateTime('MM-dd',Now)=FormatDateTime('MM-dd',absTable1.FieldByName('每月').AsDateTime)) then
Accept:= true;
if (absTable1.FieldByName('提醒日期').AsString = '' )
and (absTable1.FieldByName('每周').asstring='')
and (DateToStr(absTable1.FieldByName('提醒时间').AsDateTime)<>'')
and (absTable1.FieldByName('每月').Asstring='') then
Accept:= true;
//以上为筛选每天记录
if (FormatDateTime('yyyy-MM-dd',abstable1.fieldbyname('提醒日期').asdatetime)>=FormatDateTime('yyyy-MM-dd',a)) and
(formatDateTime('yyyy-MM-dd',abstable1.fieldbyname('提醒日期').asdatetime)<=FormatDateTime('yyyy-MM-dd',b)) then
accept:=true;
if (FormatDateTime('MM-dd',abstable1.fieldbyname('每月').asdatetime)>=FormatDateTime('MM-dd',c)) and
(FormatDateTime('MM-dd',abstable1.fieldbyname('每月').asdatetime)<=FormatDateTime('MM-dd',d)) then
Accept:= true;
if (absTable1.FieldByName('每周').asstring<>'')
and (DateToStr(absTable1.FieldByName('提醒时间').AsDateTime)<>'')
then Accept:= true;
end;
procedure TForm1.WeekFromDayToDay(ADay: TDateTime; var FromDay,
ToDay: TDateTime);
var i:word;
begin
i := DayOfTheWeek(ADay);
FromDay := ADay - i 1;
ToDay := aDay ( 7- i );
end;
//以上为筛选每周记录。
[/code]
由于我设了2个按钮,其中一个是每天,一个是每周,是不是把代码都写在一起,还是怎么样,我这么写,连原来的每天筛选都不起作用了。大大们帮我分析下。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-05-21 18:24:59 IP:59.120.xxx.xxx 訂閱

===================引 用 zhouying82 文 章===================

[code delphi]
procedure TForm1.ABSTable1FilterRecord(DataSet: TDataSet; var Accept: Boolean);
var testDay,testday1,a,b,c,d:TDateTime;
begin
testDay := absTable1.FieldByName('提醒日期').Asdatetime;
testDay1 := absTable1.FieldByName('每月').Asdatetime;
WeekFromDayToDay(testDay , a, b);
WeekFromDayToDay(testDay1 , c, d);
Accept:= false;
IF 按鈕一 THEN
BEGIN

if (FormatDateTime('yyyy-MM-dd',now)=FormatDateTime('yyyy-MM-dd',absTable1.FieldByName('提醒日期').AsDateTime))
or (formatdatetime('ddd',now)=absTable1.FieldByName('每周').asstring) or
(FormatDateTime('MM-dd',Now)=FormatDateTime('MM-dd',absTable1.FieldByName('每月').AsDateTime)) then
Accept:= true;
if (absTable1.FieldByName('提醒日期').AsString = '' )
and (absTable1.FieldByName('每周').asstring='')
and (DateToStr(absTable1.FieldByName('提醒时间').AsDateTime)<>'')
and (absTable1.FieldByName('每月').Asstring='') then
Accept:= true;
END;
//以上为筛选每天记录

IF 按鈕二 THEN
BEGIN

if (FormatDateTime('yyyy-MM-dd',abstable1.fieldbyname('提醒日期').asdatetime)>=FormatDateTime('yyyy-MM-dd',a)) and
(formatDateTime('yyyy-MM-dd',abstable1.fieldbyname('提醒日期').asdatetime)<=FormatDateTime('yyyy-MM-dd',b)) then
accept:=true;
if (FormatDateTime('MM-dd',abstable1.fieldbyname('每月').asdatetime)>=FormatDateTime('MM-dd',c)) and
(FormatDateTime('MM-dd',abstable1.fieldbyname('每月').asdatetime)<=FormatDateTime('MM-dd',d)) then
Accept:= true;
if (absTable1.FieldByName('每周').asstring<>'')
and (DateToStr(absTable1.FieldByName('提醒时间').AsDateTime)<>'')
then Accept:= true;
END;
end;
procedure TForm1.WeekFromDayToDay(ADay: TDateTime; var FromDay,
ToDay: TDateTime);
var i:word;
begin
i := DayOfTheWeek(ADay);
FromDay := ADay - i 1;
ToDay := aDay ( 7- i );
end;
//以上为筛选每周记录。
[/code]
由于我设了2个按钮,其中一个是每天,一个是每周,是不是把代码都写在一起,还是怎么样,我这么写,连原来的每天筛选都不起作用了。大大们帮我分析下。
zhouying82
高階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-05-21 23:34:21 IP:116.230.xxx.xxx 訂閱
回大大,你里面的IF  按钮一 THEN

这个“按钮一”是怎么写?如果我是用button1的话,是不是写
if button1.click then
?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
zhouying82
高階會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-05-22 09:02:16 IP:218.80.xxx.xxx 訂閱
大大,我用了。
IF TOOLBUTTON4.DOWN THEN
.....
但是那个每周的记录好像还是不行。
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2009-05-22 09:17:56 IP:59.120.xxx.xxx 訂閱
設一個VAR btnPress: String;

Button1.Click, 則 btnPress:= 'BTN1';
DataSet.Refresh;

Button2.Click, 則 btnPress:= 'BTN2';
DataSet.Refresh;

IF btnPress='BTN1' THEN

IF btnPress='BTN2' THEN
zhouying82
高階會員


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2009-05-22 09:29:58 IP:218.80.xxx.xxx 訂閱
DataSet.Refresh;
前面编译出错。是TABLE1.DATASET.REFRESH;
还是DGRGID1.DATASET.REFRESH啊?
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#13 引用回覆 回覆 發表時間:2009-05-22 09:39:54 IP:59.120.xxx.xxx 訂閱
DataSet只是代表而已,
看您的DataSet是TQuery或TTable,
自己改成Query1.Refresh或Table1.Refresh就對了

DataSet.Refresh是讓DataSet依目前的Filter條件,
重新過濾資料的動作!!
編輯記錄
max5020 重新編輯於 2009-05-22 09:41:18, 註解 無‧
zhouying82
高階會員


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2009-05-22 12:00:46 IP:218.80.xxx.xxx 訂閱
恩,明白了
------
断断续续的学了几年,还是一个初学者,永远支持Delphi !
系統時間:2024-05-17 6:40:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!