2013-08-16 156 views
-1

我使用Delphi XE3與MySQL數據庫。我有一個SQLconnection - SQLQuery - DataSetProvider - ClientDataSet安排。當我修改CDS的更新時,更改會在數據庫中正確地受到影響,但是當我刷新CDS時,「舊」值將被替換。我正在使用的代碼是:clientdataset.refresh檢索舊數據

CDS.IndexFieldNames:='pop0'; 
CDS.first; 
for W := 1 to 5 do begin // display the original data 
    memo2.lines.add (IntToStr(CDS['pop0'])); CDS.Next; 
end; 
memo2.lines.add(''); 

    CDS.first; 
    CDS.Edit;     // modify data 
    CDS['pop0']:= 3004; 
    CDS.Post; 
    CDS.first; 
for W := 1 to 5 do begin // display the modified data 
    memo2.lines.add (IntToStr(CDS['pop0'])); CDS.Next; 
end; 
memo2.lines.add(''); 

CDS.ApplyUpdates(0) ; 
messagedlg('Check database',mtInformation,[mbOK],0); 
CDS.refresh; 

CDS.first; 
for W := 1 to 5 do begin // display the updated data 
    memo2.lines.add (IntToStr(CDS['pop0'])); CDS.Next; 
end; 

在備忘錄輸出如下:

3 
4 
375 
597 
678 

4 
375 
597 
678 
986 

3 
4 
375 
597 
678 

我試圖關閉和打開CDS作爲刷新的選擇,但我得到了同樣的結果。任何想法爲什麼發生這種情況?

+0

我期望第一行成爲'3004'的修改後的數據。你的輸出是否真的反映你的測試用例? –

+0

您應該檢查ApplyUpdates的結果以確保您的更改實際寫入數據庫。 –

+0

什麼是查詢? –

回答

1

您能否告訴我們爲什麼要刷新? TClientDataSet(CDS)通常不需要。

另外,打開CDS時SQLQuery是打開還是關閉?它必須關閉,以便DatasetProvider(DSP)將其打開,檢索所有行並將其關閉。

如果DSP發現數據集已經打開,它將只沿記錄導航,構建記錄包(命名爲數據)並將其發送到CDS。該數據集將被保留,無需關閉。