DateTimePicker 使用上的問題 |
尚未結案
|
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
1.我想從查詢我所輸入的單筆編號的資料,我是用 Edit 及 BitBtn 來做,那應該怎麼表示呢?
2.我設計的介面有 start_date 及 end_date,但結束時間是未來式,所以新增資料時要為空白,以後結束時再修改填入,但我在新增時它就會自動帶出了耶!請問前輩們該怎麼辦?
時間元件我是用 DateTimePicker .... 謝謝幫忙!! procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
ClientDataSet1.FieldByName('start_date').AsDateTime := DateTimePicker1.Date;
ClientDataSet1.FieldByName('end_date').AsDateTime := DateTimePicker2.Date;
end;
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
以查詢方面來說:
您可以考慮下列方式
CLIENTDATASET.Filtered := fALSE;
CLIENTDATASET.FILTER := '欄位名稱 =''' EDIT1.TEXT '''';
CLIENTDATASET.FILTERED := TRUE;
在日期來說,因為您將修改動作放在ONCHANGE裡所以只要您更正START_DATE時,也會隨之變動,建議您將
ClientDataSet1.FieldByName('end_date').AsDateTime := DateTimePicker2.Date;
放至TForm1.DateTimePicker2Change裡,或者您可否說明你所要實現的功能面。 讀萬卷書~不如來K.TOP走一遭
|
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
CLIENTDATASET.Filtered := fALSE;
CLIENTDATASET.FILTER := '欄位名稱 =''' EDIT1.TEXT '''';
CLIENTDATASET.FILTERED := TRUE;
單獨使用過濾一個欄位沒問題
但若我有三個不同的想過濾查詢呢?
查其他的時又該怎將之前查的消除,才不會變成二個修件查詢,我這三個共用同一個 BitBin 來按下查詢.
======================================================================
當我游標指到 DBGrid 其中一欄時,我的其他 DBEdit 會顯示和資料一樣的內容,但如何將 DateTimePicker 也可以游標移到哪就顯示那裡的資料?
現在都是固定顯示當天日期
======================================================================
我想要 end_date 在新增資料時,先以空白顯示因為結束時間不知為何時
只有在修改資料時才可以輸入資料,謝謝前輩!!
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
1.有下列建議,直接利用COMMANDTEXT中下SQL語法作查詢,或為利用FILTER或SETRANGE或LOCATE等方式來獲取您的資料。
2.您可在CLIENTDATASET的AFTERSCROLL中中設定
DateTimePicker1.DATE := CLIENTDATASET.FIELDVALUES['DATE1'];
3.抱歉,DateTimePicker1的用法我不甚熟,有另一提議,您可採用MASKEDIT元件設為日期格式,應可符合您的需求。 讀萬卷書~不如來K.TOP走一遭
|
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
change.jian
版主 發表:29 回覆:620 積分:439 註冊:2003-06-02 發送簡訊給我 |
hi,Kate0921:
1.關於查詢的部分,如果你是用TClientDataSet來讀取資料的,而你要查詢的欄位有一個以上或者查詢的條件比較複雜,又不想以下SQL指令的方式來做的話,利用TClientDataSet.OnFilterRecord事件及TClientDataSet.Filtered屬性搭配來"過濾"出符合條件的資料.先在onFilterRecord事件裡寫過濾的程,如下:
procedure TForm1.ClientDataSet1FilterRecord(DataSet: TDataSet; var Accept: Boolean); begin Accept:=(DataSet.FieldByName('start_date').AsDateTime:=DateTimePicker1.DateTime) and (DataSet.FieldByName('end_date').AsDateTime:=DateTimePicker1.DateTime); end;Accept指的是該筆資料是否要被過濾出來,而Dataset是指呼叫過濾的DataSet,也就是您的ClientDataset1. 寫好後,只要設定ClientDataSet1.Filtered:=True即可過濾出符合條件的資料.注意的事,過濾後資料其實還在,只是TClientDataSet把資料隱藏起而已,再下一次ClientDataSet1.Filtered:=False即可復原. 2.關於你第二點的問題我不大明瞭,可否再詳述一下.如果你的意思是說,在新增資料時,end_date是空白的,但在新增時因為是用TDateTimePicker,所以一定會有值在TClientDataSet裡的話,那麼可以用TField.Value來做,如下: ClientDataSet1.FieldByName('end_date').Value:=NULL 或者我誤會你的意思的話,請再說明一次. |
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
不好意思,好心的前輩們,再麻煩一下囉!! 1.這是有關於新增資料部份:
請問~~我希望 NO 一開始是從 000001 開始遞增,那 I 一開始我是不是應該先給個初始值 000000 呢?
procedure TForm1.BitBtn1Click(Sender: TObject); //新增資料
var I : Integer;
var J, K : String;
begin
ClientDataSet1.Append;
CIMDataBridge2.Close;
CIMDataBridge2.Open;
DBEdit3.Enabled := True;
DBEdit4.Enabled := True;
DBEdit5.Enabled := True;
DBEdit9.Enabled := True;
DBComboBox1.Enabled := True;
DBComboBox2.Enabled := True;
DBComboBox3.Enabled := True;
DBComboBox4.Enabled := True; J := ClientDataSet2.FieldByName('NO').AsString;
J := IntToStr(StrToInt(J) 1);
For I:= 1 to 6 - Length(J) do
begin
K := K '0';
end;
J := K J;
DBEdit8.Text := J;
DBEdit8.Enabled := False;
MessageDlg(' 新增資料完成請按 "確定" !!', mtInformation,
[mbOk], 0);
end; 2.這是我在日期選擇上的控制:
請問~~我在新增資料時只希望可以新增開始日,因為必需完成之後才可輸入結束日,那要怎樣才能在新增時即使選擇結束日也不會有值可以輸入,而要在修改時才可以呢?
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
ClientDataSet1.FieldByName('START_DAY').AsDateTime := DateTimePicker1.Date;
end; procedure TForm1.DateTimePicker2Change(Sender: TObject);
begin
ClientDataSet1.FieldByName('END_DAY').AsDateTime := DateTimePicker2.Date;
end; 3.我的游標指到 DBGrid 為什麼其他的 DBEdit 都可以顯示出資料,但只有 DataTimePicker 不會顯示出 DBGrid 裡的資料呢?
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
1.建議可直接使用 FORMATFLOAT('000000',CLIENTDATASET.RECORDCOUNT 1)
2. IF CLIENTDATASET.STATE = dsEDIT THEN
ClientDataSet1.FieldByName('END_DAY').AsDateTime := DateTimePicker2.Date
3.因為 DateTimePicker 為一般元件,所以資料庫在資料變動時,無法與之同步變動取得資料,但這部份之功能您可利用像CLIENTDATASET的AFTERSCROLL類的事件來作,應可達到您的需求。 =========================
讀萬卷書~不如來K.TOP走一遭
=========================
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi kate0921, 1.考慮多人使用狀況,建議將取得 NO 的程式碼寫於 BefortInsert 事件
procedure TForm1.ClientDataSet1BeforeInsert(DataSet: TDataSet); var max_no : Integer; begin ClientDataSet2.Close; ClientDataSet2.CommandText := 'select max(no) as max_no from yourtable'; ClientDataSet2.Open; if ClientDataSet2.IsEmpty then max_no := 0 else max_no := ClientDataSet2.FieldByName('No').AsInteger; ClientDataSet1.FieldByName('No').AsString := FormatFloat('000000',max_no) end;2.按下新增按鈕時,將 DateTimePicker2 Disable,Edit 時才 Enable 起來 procedure TForm1.Button1Click(Sender: TObject); begin DateTimePicker2.Enabled := False; DateTime_SetFormat(DateTimePicker2.Handle, 'gg'); ClientDataSet1.Append; ..... end;或是判定 ClientDataSet1 的狀態決定是否將值塞入 procedure TForm1.DateTimePicker2Change(Sender: TObject); begin if ClientDataSet1.State = dsEdit then ClientDataSet1.FieldByName('END_DAY').AsDateTime := DateTimePicker2.Date; end;3.TDateTimePicker 非資料感知元件需自行將值塞入,請參考: http://delphi.ktop.com.tw/topic.php?topic_id=23976 發表人 -
------
Fishman |
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi kate0921, 在 AfterScroll 事件加入以下程式碼:
procedure TForm1.ClientDataSet1AfterScroll(DataSet: TDataSet); begin if VarIsNull(ClientDataSet1.FieldByName('START_DAY').Value) then DateTime_SetFormat(DateTimePicker1.Handle, 'gg') else begin DateTime_SetFormat(DateTimePicker1.Handle,'yyyy/MM/dd'); DateTimePicker1.DateTime := ClientDataSet1.FieldByName('START_DAY').AsDateTime; end; if VarIsNull(ClientDataSet1.FieldByName('END_DAY').Value) then DateTime_SetFormat(DateTimePicker2.Handle, 'gg') else begin DateTime_SetFormat(DateTimePicker2.Handle,'yyyy/MM/dd'); DateTimePicker2.DateTime := ClientDataSet1.FieldByName('END_DAY').AsDateTime; end; end;---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman |
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
|
kate0921
一般會員 發表:14 回覆:19 積分:6 註冊:2004-07-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |