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

int 欄位轉日期格式, 有無好法子?

尚未結案
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-05 15:14:08 IP:210.61.xxx.xxx 未訂閱
後端sql server有資料欄位為Birthday(int) 我以ADOQuery連結對應到edBirthday 日期2003/9/4儲存在後端為20030904 問題來了 在取出資料時, 我在 procedure TfmCustom.OnGetDateFieldValue(Sender: TField; var Text: String;DisplayText: Boolean); begin Text:=uGlobal.ConvertMyDateToSystem(Sender.AsString,True); end; 做資料格式轉換 而在輸入資料時, 並無法輸入'2003/9/4', 因為該欄位被視為int 請問我有無有辦法可以輸入'2003/9/4', 然後透過 procedure TfmCustom.OnSetDateFieldValue(Sender: TField; const Text: String); begin Sender.AsString:=uGlobal.ConvertSystemDateToMy(Text,True); end; 存入後端資料庫? 請各位先進幫幫忙.... 謝謝
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-08 08:46:57 IP:210.61.xxx.xxx 未訂閱
我把BirthDay的DisplayFormat定為0000/00/00 是可以做到讀出來資料自動顯示為2003/09/05格式 但是user輸入仍然無法輸入'2003/09/04' 只能輸入20030904, 哎.. 難道真是沒有辦法 那只能用TEdit自己寫程式去處理麼, 真的無法用TDBEdit做到?
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-08 16:44:38 IP:218.163.xxx.xxx 未訂閱
參考看看:
procedure TForm1.Table1DGetText(Sender: TField; var Text: String;
  DisplayText: Boolean);
var DD : TDateTime;
begin
  DD := Sender.AsInteger;
  Text := Formatdatetime('yyyy/mm/dd',DD);
  DisplayText := True;
end;    procedure TForm1.Table1DSetText(Sender: TField; const Text: String);
var DD : TDateTime;
begin
  DD := StrToDate(Text);
  Sender.AsInteger := Trunc(DD);
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
table1.Close;
taBLE1.Open;
Table1D.EditMask :='!0000/00/00;1;_';
end;
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-10 12:38:44 IP:210.61.xxx.xxx 未訂閱
Mickey兄, 謝謝您 我看Get及Set好像儲存的是TDateTime的Integer值放到Table裡 但我的需求不是這樣, Table裡的20030202(Integer)並不是 TDateTime的Integer值, 而是直接'年月日'轉成Integer 不過您提的Mask我試試看 >Table1D.EditMask :='!0000/00/00;1;_';
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-10 21:54:32 IP:218.32.xxx.xxx 未訂閱
呵呵...對不起, 沒看清楚你的問題. 因為個人滿欣賞Delphi TDateTime 的結構, 所以自然而然的, 想像 若資料庫, 存入整數, 運用 Delphi 的 TDateTime 直接轉換, 是很 理想的方式, 至於你用 Integer 存 20030910, 這樣的值...轉換恐 怕會麻煩許多, 一般來說, 我建議何不存"字元" 之資料型態, 因為 直接用兩值相減取得"日期差"等方便性已喪失......
pedro
尊榮會員


發表:152
回覆:1187
積分:892
註冊:2002-06-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-12 09:23:52 IP:210.61.xxx.xxx 未訂閱
我們參考國內正X系統, 它的資料庫結構日期就採用 Integer, 而且是值是我所說格式, 我一直想不通它採用此種結構的理由, 唯一可以解釋的是減少client-server的流量, 因為Integer是4Bytes, 而若是String為8Bytes 所以我們開資料規格的人, 於是就採用Integer 我那時候想, 反正是多了自定義'轉換函式', 其它並沒有多大的影響, 現在你提的的確是, 要多幾道手續 >直接用兩值相減取得"日期差"等方便性已喪失......
系統時間:2024-06-23 9:59:09
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!