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

如何在clientdataset開啟時 如何增一個暫時的欄位?

答題得分者是:GrandRURU
chris681016
中階會員


發表:64
回覆:117
積分:96
註冊:2006-10-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-09-21 15:05:44 IP:211.75.xxx.xxx 訂閱
如題:
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 重新編輯於 2012-09-21 01:06:28, 註解 無‧
chris681016 重新編輯於 2012-09-21 01:07:08, 註解 無‧
GrandRURU
站務副站長


發表:234
回覆:1651
積分:1742
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-09-22 15:22:25 IP:111.249.xxx.xxx 未訂閱
把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
中階會員


發表:64
回覆:117
積分:96
註冊:2006-10-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-09-23 19:48:49 IP:219.85.xxx.xxx 訂閱
 感謝大大假日還上來教學~~~~~
我的 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
尊榮會員


發表:38
回覆:740
積分:875
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-09-24 06:11:15 IP:114.35.xxx.xxx 訂閱
你改錯地方了
要改的是 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
中階會員


發表:64
回覆:117
積分:96
註冊:2006-10-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-09-24 09:33:29 IP:211.75.xxx.xxx 訂閱
 原來如此感謝大大晚點來試式^_____________________^
而且還早上六點~~~好早
編輯記錄
chris681016 重新編輯於 2012-09-23 19:35:32, 註解 無‧
系統時間:2017-10-18 19:08:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!