全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2616
推到 Plurk!
推到 Facebook!

TClientDataSet Post 一筆新資料,如何取得該筆資料自動編的值.

答題得分者是:GrandRURU
brook
資深會員


發表:56
回覆:321
積分:365
註冊:2002-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-06-16 09:30:56 IP:60.251.xxx.xxx 訂閱
請教各位大大,我要取得剛新增資料的自動編號的值如何取得呢?
我用下列方式並不管用.

[code cpp]
請在此區域輸入程式碼
ClientDataSet1->Append();
ClientDataSet1->Edit();
ClientDataSet1->FieldByName("A")->AsString = "";
ClientDataSet1->FieldByName("NAME")->AsString = "AA";
ClientDataSet1->Post();
ClientDataSet1->ApplyUpdates(1);
int CusNo = DataSet->FieldByName("A")->AsInteger;
[/code]
sryang
尊榮會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-06-16 18:40:23 IP:124.8.xxx.xxx 訂閱
ClientDataSet1->Refresh();
試試看
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-06-18 16:19:51 IP:114.238.xxx.xxx 訂閱
Clientdataset有个RefreshRecord属性,更新当前记录。
------
The empty vessels make the greatest sound.
brook
資深會員


發表:56
回覆:321
積分:365
註冊:2002-07-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-06-21 14:00:20 IP:60.251.xxx.xxx 訂閱
非常感謝sryang大大和allen-86大大的回答.

我發現用ClientDataSet1->Refresh();時,
資料一般會到剛剛Append的那筆資料,
但有時Append的那筆資料卻不在最後一筆時,就會出錯.
不過對於為什麼Append的那筆資料不是在最後一筆,我也是很納悶???
(我用的資料庫是DBMAKER)

而用Clientdataset1->RefreshRecord();
則會出現Unable to find record. No key specified.

allen-86
一般會員


發表:28
回覆:44
積分:19
註冊:2008-02-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-06-21 14:18:28 IP:117.95.xxx.xxx 訂閱
我使用的是Ado控件,链接的是Sql Server2000数据库,设定如下:
1.AdoQuery 要添加字段, 主键 ProviderFlasgs 中 InKey =True
2.ClientDataSet 中也要添加字段,同样设定主键 ProviderFlasgs 中 InKey =True
------
The empty vessels make the greatest sound.
GrandRURU
站務副站長


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-06-21 22:06:08 IP:111.249.xxx.xxx 訂閱
關於「Unable to find record. No key specified.」,你可以參考

"Unable to find record. No key specified"错误分析及解决办法

另外,看你的程式碼內容,建議把重複語句過濾處理一下,例如:
[code cpp]
ClientDataSet1->Append();
//ClientDataSet->Edit()
.
.
.
[/code]
這樣比較不會有誤處理的可能,你想想,又要append又要edit,那是要db做哪一件事呢?

再來,ClientDataSet->Refreash()這句確實有可能不動作。
比較安心的做法還是應該利用 ClientDataSet->Close() ClientDataSet->Open()來完成
最後,再利用eof指標找最後一筆的資料即可。

以上

===================引 用 brook 文 章===================
非常感謝sryang大大和allen-86大大的回答.

我發現用ClientDataSet1->Refresh();時,
資料一般會到剛剛Append的那筆資料,
但有時Append的那筆資料卻不在最後一筆時,就會出錯.
不過對於為什麼Append的那筆資料不是在最後一筆,我也是很納悶???
(我用的資料庫是DBMAKER)

而用Clientdataset1->RefreshRecord();
則會出現Unable to find record. No key specified.

編輯記錄
GrandRURU 重新編輯於 2010-06-21 22:07:11, 註解 無‧
brook
資深會員


發表:56
回覆:321
積分:365
註冊:2002-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2010-07-01 09:07:55 IP:60.251.xxx.xxx 訂閱
看來也只能這樣,簡單的事,複雜的做.

[code cpp]
請在此區域輸入程式碼
ClientDataSet1->Post();
ClientDataSet1->ApplyUpdates(1);

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add("SELECT MAX(A) AS AA FROM Customer");
Query1->Open();
int a = Query->FieldByName("AA")->AsInteger;

ClientDataSet1->Close();
ClientDataSet1->Open();
ClientDataSet1->Locate("A",a,TLocateOptions());
[/code]

系統時間:2017-10-22 1:38:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!