如何取消 ClientDataSet 的 Required 檢查 |
答題得分者是:Mickey
|
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
連接方式
ClientDataSet -> DataSetProvider -> TSQLQuery 假設資料表上有欄位 NO/ DATA , DATA 在 Table 為 Not Null. 如果我在 TSQLQuery 上設定欄位 DATAField Required 為 False 那麼 ClientDataSet 的 DATAField Required 會為 False, 這時 DATAField 為空時, 可以 POST 但是我想寫一個共用的無狀態元件, 是由 ClientDataSet 的 CommandText 傳出, 所以 TSQLQuery 不能產生欄位設定值! 請問如何設定, 才能讓 ClientDataSet 內的 cdsDATAField 不去檢查 Required! 當 TSQLQuery 不產生欄位時, TSQLQuery 會自動以 DataBase 的設定為準, 所以 TSQLQuery 在執行週期, DATAField Required 為 True 在CleintDataSet 直接設定 cdsDataField Required 為False, 也在 FieldDef 設為 False POST 時出現 EDBClient Exception 訊息 Field value required. 註:SQLQuery 的 GetMetaData, DataSetProvider Contraints, DisableControls 跟這種情況應該無關, 也試過了一樣出錯. 出錯的地方都在這段程式碼 procedure TCustomClientDataSet.InternalPost; begin inherited; if State = dsEdit then Check(FDSCursor.ModifyRecord(ActiveBuffer)) else Check(FDSCursor.InsertRecord(ActiveBuffer)); if AggregatesActive then DoAggUpdates(State = dsEdit); end; 似乎 Midas.dll 把這個機制給限制住了? 如果把 CommandText 加工, 這時不會去檢查 Required! 可以 POST, 但這必須去修改 Query! SELECT NO||'' NO, DATA||'' DATA FROM TABLE 可以用 DSBase.SetProp 來解決嗎? 那裡有 DSBase 的參考資料? 謝謝! |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
|
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
你好:
為了違反 DB Not Null Field 的限制, 而去改底層的東西, 個人不是很認同. 剛剛試了一下, 在 AfterOpen 改掉 Required Property, 參考看看. procedure TForm1.SQLQuery1AfterOpen(DataSet: TDataSet); var I: integer; begin for I := 0 to DataSet.FieldCount - 1 do if DataSet.Fields[I].Required then DataSet.Fields[I].Required := False; end; |
Jasonwong
版主 發表:49 回覆:931 積分:581 註冊:2006-10-27 發送簡訊給我 |
個人的作法是... <textarea class="delphi" rows="10" cols="60" name="code">
procedure TForm1.Button3Click(Sender: TObject);
var
S: String;
begin
S:= ClientDataSet1.XMLData;
StringReplace(S,'Required="True"','',[rfReplaceAll]);
ClientDataSet1.XMLData:= S;
end;
</textarea>
如此便可以將 Required 設為 False
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心 |
VICSYS
初階會員 發表:21 回覆:64 積分:32 註冊:2002-10-10 發送簡訊給我 |
感謝各位版主的幫忙, Mickey 版大的方式最合乎我的需求!
Midas.dll 在 client 寫死了! 那麼去改 DSP 之前的 Dataset ... 真是太厲害了. ===================引 用 Mickey 文 章=================== 你好: 為了違反 DB Not Null Field 的限制, 而去改底層的東西, 個人不是很認同. 剛剛試了一下, 在 AfterOpen 改掉 Required Property, 參考看看. 略 ... |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |