2014-09-05 5 views
3

변경 사항을 TClientDataset에서 어떻게받을 수 있습니까?TClientDataset을 다른 TClientDataset으로 변경하는 방법은 무엇입니까?

나는 GetDataset이라는 TClientDataset이며 그리드가 있습니다. 변경 사항을 ChangeDataset으로 변경하고 싶습니다.

어떻게하면됩니까?

+0

ChangeDataSet이 변경된 첫 번째 ClientDataSet의 레코드만을 포함하도록 하시겠습니까? 아니면 모두들입니까? – MartynA

+1

변경된 내용 – Tarasov

답변

10

당신이 소스 ClientDataSet에 CDS1이있는 경우, 당신은 당신이 것을 시도하는 경우에 당신이 볼 수 있듯이

if CDS1.ChangeCount > 0 then 
    CDS2.Data := CDS1.Delta; 

을 수행하여 두 번째 ClientDataSet에 CDS2에 변경된 기록을 복사 할 수 있어야한다, 그것은 "당신을 제공합니다 이전 "기록과 변경 기록이 있습니다. 그것은 반드시 당신이 원하는 것이 아닐 수도 있습니다 - 솔직히 말해서 당신은 Whipple 기사를 읽고 OLH에 올리면 성취하고자하는 정확한 결과를 얻을 수 있습니다. 요점은, ApplyUpdates()를 호출하여 플러시 할 때까지 필요한 모든 정보가 소스 CDS에 있다는 것입니다. 그 후에는 성공하면 변경 로그가 비어 있습니다.

CDS2의 행을 보면 특정 필드에 변경된 값이 포함되어 있는지 여부와 비어있는 필드를 구별하는 방법을 즉시 알 수 없습니다. Istr은 Mark Edington이 만든 볼랜드 NTTP 뉴스 그룹 중 한 곳에서 꽤 오래 전부터 좋은 소식을 전했습니다. 당신은 XML에 대한 CDS의 상태를 저장할 수 있기 때문에

if VarIsClear(CDS2.Fields[i].NewValue) then 
// means Fields[i] does not have a changed value 

, 당신은 XML 조작, 예를 들어, 사용할 수 있습니다, 그런데 : 기본적으로, 필드의 NewValue로 속성에 VarIsClear을 평가하는 질문입니다 TDataSet 패러다임을 사용하는 데 번거로운 일들을 쉽게 수행 할 수있는 Windows 내장형 파서 (MSXML.Pas 참고)와 같은 DOM 파서를 사용하면됩니다.

+2

에릭 위플의 기사 http://conferences.embarcadero.com/article/32227#AuditTrail –

+0

@SirRufo : 많은 도움을 주셔서 감사합니다. 매우 유용합니다. – MartynA