如何用sql 語法以自己的function 新增一個欄位 |
|
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
請教各位前輩,小弟的資料表中有生日一欄,其中小弟用一個函式,將生日轉成年齡
,但不知能不能在sql中新增年齡一欄,謝謝各位前輩。 function TFrmB01.Beage(MyBirthDay:TDateTime): integer;
var
CurYear,CurMonth,CurDay,BirthYear,BirthMonth,BirthDay: Word;
begin
Result:=0;
if (MyBirthDay <> 0) then
begin
DecodeDate(Date,CurYear,CurMonth,CurDay);
DecodeDate(MyBirthDay,BirthYear,BirthMonth,BirthDay);
if (CurMonth > BirthMonth) then
Result:=CurYear-BirthYear
else if (CurMonth=BirthMonth) then
begin
if (CurDay >= BirthDay) then
Result:=CurYear-BirthYear
else
Result:=CurYear-BirthYear-1;
end
else
Result:=CurYear-BirthYear-1;
end;
end;
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
delphiwww
資深會員 發表:145 回覆:363 積分:368 註冊:2002-03-13 發送簡訊給我 |
在TField中new 一個calculate Field即可
然後再將你的function寫在on calcfield的 event應該就可以了
引言: 請教各位前輩,小弟的資料表中有生日一欄,其中小弟用一個函式,將生日轉成年齡 ,但不知能不能在sql中新增年齡一欄,謝謝各位前輩。 function TFrmB01.Beage(MyBirthDay:TDateTime): integer; var CurYear,CurMonth,CurDay,BirthYear,BirthMonth,BirthDay: Word; begin Result:=0; if (MyBirthDay <> 0) then begin DecodeDate(Date,CurYear,CurMonth,CurDay); DecodeDate(MyBirthDay,BirthYear,BirthMonth,BirthDay); if (CurMonth > BirthMonth) then Result:=CurYear-BirthYear else if (CurMonth=BirthMonth) then begin if (CurDay >= BirthDay) then Result:=CurYear-BirthYear else Result:=CurYear-BirthYear-1; end else Result:=CurYear-BirthYear-1; end; end; |
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
您可以在生日欄位的TFeild中的OnGetText事件去改變顯示的年齡就可以了! procedure TForm1.Table1BirthdayDayGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
text:=ChangeToYear(sender.asstring);
end; ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
|
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
|
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
不好意思,小弟說得不夠詳細,小弟因客戶需要,須寫成動態的查詢,如小弟的form 中,共有八個button執行八個不同查詢結果,其中一個查詢結果,是需要
得知顧客的消費年齡層,而另一個相關日期運算的查詢,是有關於取得最後一個消費日至目前日期的天數差,客戶本身預算不高,故此,小弟僅能用query 幫他
運算結果,而不使用sql server,acess(呵呵,也沒有office)... 小弟的生日一欄在八個查詢結果中,僅出現一次,而sql 語法是如此下的
select 會員等級,Beage(生日) as 年齡{不知該如何得到} ,累積總消費額 from Table M where 年齡 > 20 關於站長大大的一些細心詢問:
>請問您生日的欄位名稱會變來變去嗎?
前面的select 的項目固定,故小弟想生日欄該是固定的,而後面的where 查詢
讓客戶自己選擇數字。 >還是不管產生的Query如何都會有生日的欄位呢?
只有一個sql 敘述需要得知顧客的消費年齡層,而另一個相關日期運算的查詢,是有關於取得最後一個消費日至目前日期的天數差(能順便請教嗎!?) 小弟會如此問如何以自己的function 新增一個欄位,是希望往後對有關的日期
欄位運算(目前遇到的是年齡以及消費天數差),找到一個方法,而不被sql 資料庫語法限定(因每個資料庫的日期語法皆有些許不同),有得能查天數,有得能算時間差...,這或許是小弟的一個妄想罷,希望能得到一個解答。 這是小弟的第一個case,從一開始的基本架構到修改了不下好幾次,每次的討論,每次的修改,都讓小弟吃足了苦頭,只恨小弟軟體功力不足,當初想練專案,答應了人,寫了之後才知小弟實在功力太淺,唉!!但不管如何,小弟希望
案子能漂漂亮亮的交給對方。不好意思,吐了這些苦水,這些日子,真得很受
各位前輩大大的照顧,給予小弟一些回答,感謝討論區的存在,讓小弟可以找到需要的資料,小弟在此再一次道謝。
|
jaya
初階會員 發表:9 回覆:70 積分:30 註冊:2002-05-22 發送簡訊給我 |
|
jaya
初階會員 發表:9 回覆:70 積分:30 註冊:2002-05-22 發送簡訊給我 |
|
領航天使
站長 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 不好意思,小弟說得不夠詳細,小弟因客戶需要,須寫成動態的查詢,如小弟的form 中,共有八個button執行八個不同查詢結果,其中一個查詢結果,是需要 得知顧客的消費年齡層,而另一個相關日期運算的查詢,是有關於取得最後一個消費日至目前日期的天數差,客戶本身預算不高,故此,小弟僅能用query 幫他 運算結果,而不使用sql server,acess(呵呵,也沒有office)... 小弟的生日一欄在八個查詢結果中,僅出現一次,而sql 語法是如此下的 select 會員等級,Beage(生日) as 年齡{不知該如何得到} ,累積總消費額 from Table M where 年齡 > 20 關於站長大大的一些細心詢問: >請問您生日的欄位名稱會變來變去嗎? 前面的select 的項目固定,故小弟想生日欄該是固定的,而後面的where 查詢 讓客戶自己選擇數字。 >還是不管產生的Query如何都會有生日的欄位呢? 只有一個sql 敘述需要得知顧客的消費年齡層,而另一個相關日期運算的查詢,是有關於取得最後一個消費日至目前日期的天數差(能順便請教嗎!?) 小弟會如此問如何以自己的function 新增一個欄位,是希望往後對有關的日期 欄位運算(目前遇到的是年齡以及消費天數差),找到一個方法,而不被sql 資料庫語法限定(因每個資料庫的日期語法皆有些許不同),有得能查天數,有得能算時間差...,這或許是小弟的一個妄想罷,希望能得到一個解答。 這是小弟的第一個case,從一開始的基本架構到修改了不下好幾次,每次的討論,每次的修改,都讓小弟吃足了苦頭,只恨小弟軟體功力不足,當初想練專案,答應了人,寫了之後才知小弟實在功力太淺,唉!!但不管如何,小弟希望 案子能漂漂亮亮的交給對方。不好意思,吐了這些苦水,這些日子,真得很受 各位前輩大大的照顧,給予小弟一些回答,感謝討論區的存在,讓小弟可以找到需要的資料,小弟在此再一次道謝。以下程式給您參考,不懂再問: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Db, DBTables, Grids, DBGrids; type TForm1 = class(TForm) DataSource1: TDataSource; DBGrid1: TDBGrid; Query1: TQuery; Button1: TButton; procedure Button1Click(Sender: TObject); procedure OnGetText(Sender: TField; var Text: String; DisplayText: Boolean); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin Query1.Close; Query1.sql.clear; Query1.sql.add('SELECT * FROM ANIMALS'); Query1.open; Query1.fieldbyname('SIZE').OnGetText:=OnGetText; // 指定要轉的欄位 end; procedure TForm1.OnGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin text:='15歲'; // 在此將生日轉為年齡 end; end.~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~ |
firefall
一般會員 發表:22 回覆:36 積分:11 註冊:2002-05-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |