2013-08-16 3 views
-1

저는 MySQL 데이터베이스에서 Delphi XE3을 사용하고 있습니다. SQLConnection - SQLquery - DataSetProvider - ClientDataSet 배열이 있습니다. CDS에 수정의 ApplyUpdates를 적용하면 데이터베이스의 변경 사항이 올바르게 적용되지만 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; 

다음 메모에서 출력 될 때 : 내가 새로 고침에 대한 대안으로 CDS를 닫고 열기를 시도했지만 내가 같은 가지고

3 
4 
375 
597 
678 

4 
375 
597 
678 
986 

3 
4 
375 
597 
678 

결과. 왜 이런 일이 일어나고 있는거야?

+0

첫 번째 행이 수정 된 데이터에 대해 '3004'가 될 것으로 기대합니다. 출력물에 실제로 테스트 사례가 반영되어 있습니까? –

+0

ApplyUpdates 결과를 확인하여 변경 사항이 실제로 데이터베이스에 기록되는지 확인해야합니다. –

+0

어떤 검색어입니까? –

답변

1

왜 새로 고침을 요청 하시겠습니까? TClientDataSet (CDS)는 일반적으로 필요하지 않습니다.

게다가 CDS를 열 때 SQLQuery가 열리거나 닫혔습니까? DatasetProvider (DSP)가 열어서 모든 행을 검색하고 다시 닫으려면 닫아야합니다.

DSP가 이미 데이터 세트를 찾은 경우 레코드를 따라 탐색하고 레코드 팩 (데이터)을 작성하여 CDS로 보냅니다. 데이터 집합은 홀로 남겨지며 닫히는 중입니다.

관련 문제