如何在clientdataset開啟時 如何增一個暫時的欄位? |
答題得分者是:GrandRURU
|
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
如題: procedure Ts1dm.M_cdsAfterScroll(DataSet: TDataSet); begin //「主檔」捲動時開始對應的「副檔」 Self.D_cds.Active:=false; with Self.D_sql do begin close;sql.Clear; // sql.Add('select bookid,book_memo'); sql.Add('from book_table '); sql.Add(' WHERE bookid =''' trim(M_cds.FieldByName(' bookid ').AsString) ''' '); end; if Self.D_cds.Active=false then Self.D_cds.Active:=true; end; 開始後DBGrid1內容如下 BOOKID BOOK_MEMO 0001 1997年出版.................. 我想在 BOOKID 和 BOOK_MEMO 中間增加一個「BOOK_NAME」書籍名稱,目地只是為了顯示書籍編號的對應的名稱,最後POST也不需把 BOOK_NAME 暫入,只是讓使用者看而以。 希望如下: BOOKID BOOK_NAME BOOK_MEMO 0001 Delphi資料庫處理 1997年出版.................. 測式過新增欄位 with D_cds do begin Close; with FieldDefs.AddFieldDef do begin DataType := ftString; Size := 10; Name := 'TEST_Field' ; end; CreateDataSet; //open; end; 但新增完後,記錄都不見 BOOKID BOOK_MEMO TEST_Field 因該是要出現 BOOKID BOOK_MEMO TEST_Field 0001 1997年出版.................. 為何會如此? 還是一定要用一個暫存檔的方式,最後在搬回去內? (因為以前都是用暫時檔的方式,先把資料放在「temp_table」,存檔時在一筆一筆新增回去) 也有試過 with Self.D_sql do begin close;sql.Clear; // sql.Add('select bookid,book_memo, '' '' as BOOK_NAME '); //建一個空的欄位 sql.Add('from book_table '); sql.Add(' WHERE bookid =''' trim(M_cds.FieldByName(' bookid ').AsString) ''' '); end; 但新增時, BOOK_NAME 一定要填值,而且ApplyUpdates,又會發生錯誤~~~~。 請問各位大大都是如何做的?
編輯記錄
|
GrandRURU
站務副站長 發表:240 回覆:1680 積分:1874 註冊:2005-06-21 發送簡訊給我 |
把book_name的ProviderFlags裡的pfInUpdate, pfInWhere設為False就可以了
===================引 用 chris681016 文 章=================== 如題: procedure Ts1dm.M_cdsAfterScroll(DataSet: TDataSet); begin //「主檔」捲動時開始對應的「副檔」 Self.D_cds.Active:=false; with Self.D_sql do begin close;sql.Clear; // sql.Add('select bookid,book_memo'); sql.Add('from book_table '); sql.Add(' WHERE bookid =''' trim(M_cds.FieldByName(' bookid ').AsString) ''' '); end; if Self.D_cds.Active=false then Self.D_cds.Active:=true; end; 開始後DBGrid1內容如下 BOOKID BOOK_MEMO 0001 1997年出版.................. 我想在 BOOKID 和 BOOK_MEMO 中間增加一個「BOOK_NAME」書籍名稱,目地只是為了顯示書籍編號的對應的名稱,最後POST也不需把 BOOK_NAME 暫入,只是讓使用者看而以。 希望如下: BOOKID BOOK_NAME BOOK_MEMO 0001 Delphi資料庫處理 1997年出版.................. 測式過新增欄位 with D_cds do begin Close; with FieldDefs.AddFieldDef do begin DataType := ftString; Size := 10; Name := 'TEST_Field' ; end; CreateDataSet; //open; end; 但新增完後,記錄都不見 BOOKID BOOK_MEMO TEST_Field 因該是要出現 BOOKID BOOK_MEMO TEST_Field 0001 1997年出版.................. 為何會如此? 還是一定要用一個暫存檔的方式,最後在搬回去內? (因為以前都是用暫時檔的方式,先把資料放在「temp_table」,存檔時在一筆一筆新增回去) 也有試過 with Self.D_sql do begin close;sql.Clear; // sql.Add('select bookid,book_memo, '' '' as BOOK_NAME '); //建一個空的欄位 sql.Add('from book_table '); sql.Add(' WHERE bookid =''' trim(M_cds.FieldByName(' bookid ').AsString) ''' '); end; 但新增時, BOOK_NAME 一定要填值,而且ApplyUpdates,又會發生錯誤~~~~。 請問各位大大都是如何做的?
|
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
感謝大大假日還上來教學~~~~~
我的 DataSetProvider 的 UpdateMode 不管設定為 「upWhereAll」或是 「upWhereChanged」 設定 upWhereAll 對一個欄位去除掉 pfInKey ,還是沒去成功 dm.M_cds.FieldByName('BOOK_NAME').ProviderFlags:=dm.M_cds.FieldByName(' BOOK_NAME ').ProviderFlags-[pfInKey]; 用 SQLMonitor1去觀查,一樣都是KEY~~ 設定 upWhereChanged 會變成沒KEY 只針對 UPDATE BOOK_NAME=? WHERE BOOK_NAME=? 看過別的大大也有這問題,說可以到UpdateData去加,但還是一樣沒變化,是那邊要特設定嗎? |
sryang
尊榮會員 發表:39 回覆:762 積分:920 註冊:2002-06-27 發送簡訊給我 |
你改錯地方了
要改的是 DataSetProvider.DataSet 屬性指到的 DataSet 裡面的 Field 的 ProviderFlags 屬性 例如 ClisntDataSet1 --> DataSetProvider1 --> SQLQuery1 要改的是 SQLQuery1 裡面的 Field 的 ProviderFlags 屬性 同時,DataSetProvider.ResolveToDataSet 屬性要設定為 False 這樣,DataSetProvider 才會呼叫 DataSetResolver 參照所連結到的 DataSet 裡面的 Field 的 ProviderFlags 屬性 去組更新資料用的 SQL 詳情請參考 這一篇
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/ |
chris681016
中階會員 發表:69 回覆:122 積分:98 註冊:2006-10-12 發送簡訊給我 |
原來如此感謝大大晚點來試式^_____________________^
而且還早上六點~~~好早
編輯記錄
chris681016 重新編輯於 2012-09-23 19:35:32, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |