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

如何用sql 語法以自己的function 新增一個欄位

 
firefall
一般會員


發表:22
回覆:36
積分:11
註冊:2002-05-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-06-28 01:54:10 IP:61.70.xxx.xxx 未訂閱
請教各位前輩,小弟的資料表中有生日一欄,其中小弟用一個函式,將生日轉成年齡 ,但不知能不能在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-06-28 08:57:53 IP:211.22.xxx.xxx 未訂閱
試試以 TQuery 元件執行 ALTER Table 的 SQL 語法: 例:
begin
  Query1.Close;
  Query1.SQL.Text := 'ALTER TABLE TableA ADD COLUMN age integer';
  Query1.ExecSQL;
end;
delphiwww
資深會員


發表:145
回覆:363
積分:368
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-06-28 12:22:18 IP:202.145.xxx.xxx 未訂閱
在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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-06-28 12:26:37 IP:192.168.xxx.xxx 未訂閱
您可以在生日欄位的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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-06-28 15:27:46 IP:61.70.xxx.xxx 未訂閱
成功了,謝謝各位前輩指導,再次感謝。
firefall
一般會員


發表:22
回覆:36
積分:11
註冊:2002-05-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-07-03 03:29:05 IP:61.70.xxx.xxx 未訂閱
不好意思,再麻煩一下站長大大,如果想用動態sql 描述,亦即,在執行期間 生日欄位才select 進去,那麼query.onGetText該如何宣告才能讓程式知道那 一欄才是生日,再轉換成年齡。 謝謝您,您辛苦了。
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-07-03 08:41:37 IP:192.168.xxx.xxx 未訂閱
引言: 不好意思,再麻煩一下站長大大,如果想用動態sql 描述,亦即,在執行期間 生日欄位才select 進去,那麼query.onGetText該如何宣告才能讓程式知道那 一欄才是生日,再轉換成年齡。 謝謝您,您辛苦了。
請問您生日的欄位名稱會變來變去嗎? 還是不管產生的Query如何都會有生日的欄位呢? ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
firefall
一般會員


發表:22
回覆:36
積分:11
註冊:2002-05-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-07-03 11:42:37 IP:61.70.xxx.xxx 未訂閱
不好意思,小弟說得不夠詳細,小弟因客戶需要,須寫成動態的查詢,如小弟的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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-07-03 11:57:49 IP:211.21.xxx.xxx 未訂閱
您還是可以用Access的呀~ 只要您有裝Access的驅動程式就可以用 雖然沒有美美又方便的操作介面 但是,還是可以用mdb的檔案格式,而所有的SQL指令也都可以使用. 至於有沒有Access的驅動程式,看看您的ODBC設定裡有沒有就知道啦 一般來說,Windows安裝完成之後,都會有Access 的驅動程式的
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-07-03 12:01:32 IP:211.21.xxx.xxx 未訂閱
再補充一點 如果您需要Access 2000格式, 可是Windows支援的只有Access 97時 有一個偷機步可以用: 在Windows 裡安裝 Access 2000,然後馬上移除 由於Office在移除安裝的時候,都會留一堆檔案 呵~ 猜到了吧! Access 2000的驅動程式就在那堆檔案裡
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-07-04 08:32:25 IP:192.168.xxx.xxx 未訂閱
引言: 不好意思,小弟說得不夠詳細,小弟因客戶需要,須寫成動態的查詢,如小弟的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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-07-04 14:22:11 IP:61.70.xxx.xxx 未訂閱
感謝站長大大,好高興!!,解決了困擾多日的問題, 案子尚未成功,小弟仍需努力。加油!!再戰
系統時間:2024-05-05 1:26:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!