請問要如何將Tdatatimepicker的日期存到資料庫裡以及日期可以作加減嗎???? |
尚未結案
|
miller680523
一般會員 發表:47 回覆:49 積分:19 註冊:2002-10-28 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
TDateTime is in fact double, you can add/subtract to/from it. AField.AsDateTime := DateTimePicker1.Date; or... there are many data aware datetime picker, here is one (forget the source):
unit DBDateTimePicker; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, DbCtrls, Db; type TDBDateTimePicker = class(TDateTimePicker) private { private declarations } // ... FDataLink: TFieldDataLink; procedure dataChange(Sender: TObject); procedure updateData(Sender: TObject); // datasource property procedure setDataSource(Value: TDataSource); function getDataSource: TDataSource; // datafield property procedure setDataField(const value : string); function getDataField : string; // field linked to the control function getField : TField; // enter & exit procedure CMEnter(var Message: TCMEnter); message CM_ENTER; procedure CMExit(var Message: TCMExit); message CM_EXIT; protected { protected declarations } public { public declarations } // constructor & distructor constructor Create(AOwner: TComponent); override; destructor Destroy; override; // change procedure Change; override; // field linked to the control property Field : TField read getField; published { published declarations } // data field property DataField : string read getDataField write setDataField; // data source property DataSource : TDataSource read getDataSource write setDataSource; end; procedure Register; implementation constructor TDBDateTimePicker.create(AOwner: TComponent); begin inherited Create(AOwner); FDataLink := TFieldDataLink.Create; FDataLink.Control := Self; FDataLink.OnDataChange := DataChange; FDataLink.OnUpdateData := UpdateData; end; destructor TDBDateTimePicker.destroy; begin FDataLink.free; FDataLink := nil; inherited destroy; end; procedure TDBDateTimePicker.dataChange(Sender: TObject); begin // is it a valid field ? if fDataLink.field <> nil then begin // set database date time dateTime := fDataLink.field.asDateTime; end; end; procedure TDBDateTimePicker.UpdateData(Sender: TObject); begin // is it a valid field ? if fDataLink.field <> nil then begin // set current date to the database field fDataLink.field.asDateTime := dateTime; end; end; function TDBDateTimePicker.GetDataSource: TDataSource; begin Result := FDataLink.DataSource; end; procedure TDBDateTimePicker.SetDataSource(Value: TDataSource); begin if not (FDataLink.DataSourceFixed and (csLoading in ComponentState)) then FDataLink.DataSource := Value; if Value <> nil then Value.FreeNotification(Self); end; function TDBDateTimePicker.GetDataField: string; begin result := fDataLink.FieldName; end; procedure TDBDateTimePicker.SetDataField(const Value: string); begin fDataLink.FieldName := Value; end; function TDBDateTimePicker.getField : TField; begin result := FDataLink.field; end; // change procedure TDBDateTimePicker.change; begin // a change as been done to the field on database if fDataLink.edit then begin // call inherited change inherited Change; // set modifed status on data link fDataLink.modified; end; end; procedure TDBDateTimePicker.CMEnter(var Message: TCMEnter); begin // ... inherited; // ... FDataLink.CanModify; end; procedure TDBDateTimePicker.CMExit(var Message: TCMExit); begin try FDataLink.UpdateRecord; except SetFocus; raise; end; inherited; end; procedure Register; begin RegisterComponents('Data Controls', [TDBDateTimePicker]); end; end. |
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
|
miller680523
一般會員 發表:47 回覆:49 積分:19 註冊:2002-10-28 發送簡訊給我 |
|
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 那兩個日期,相減呢????您作個測試就知道了 日期相減得到一個浮點數的數值 procedure TForm1.BitBtn1Click(Sender: TObject); var aDay: Double; begin aDay := StrToDate('2003/6/27') - StrToDate('2003/6/25'); ShowMessage(FloatToStr(aDay));//答案是2 end;~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
miller680523
一般會員 發表:47 回覆:49 積分:19 註冊:2002-10-28 發送簡訊給我 |
引言:引言: 那兩個日期,相減呢????您作個測試就知道了 日期相減得到一個浮點數的數值procedure TForm1.BitBtn1Click(Sender: TObject); var aDay: Double; begin aDay := StrToDate('2003/6/27') - StrToDate('2003/6/25'); ShowMessage(FloatToStr(aDay));//答案是2 end;~小弟淺見,參考看看~ 謝謝你的說明,我還有個問題:那我要讓兩個tdatetimepicker的日期相減,然後在顯示在dbtext1,要如何作呢????因為我試過,但date屬性沒有跳出來,所以不知到可不可以用. |
channel
尊榮會員 發表:67 回覆:707 積分:854 註冊:2002-05-02 發送簡訊給我 |
引言: 謝謝你的說明,我還有個問題:那我要讓兩個tdatetimepicker的日期相減,然後在顯示在dbtext1,要如何作呢????因為我試過,但date屬性沒有跳出來,所以不知到可不可以用.您要將兩個tdatetimepicker的日期相減顯示在dbtext1,小弟覺得有點不妥,建議您顯示在TLabel中比較好,因為dbtext1主要是用來顯示資料庫欄位的資料。 uses Math; procedure TForm1.BitBtn1Click(Sender: TObject); begin //Ceil是將小數點無條件進位,必須uses Math才可使用 Label1.Caption := IntToStr(Ceil(DateTimePicker1.Date - DateTimePicker2.Date)); end;~小弟淺見,參考看看~
------
~小弟淺見,參考看看~ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |