2013-10-01 2 views
0

의료 기기에서 가져온 데이터를 저장하는 TClientDataSet이 있습니다. 이 클라이언트 데이터 집합은 그리드에 연결되어 실시간으로 데이터를 표시합니다. 내 문제는 사용자가 데이터를 편집 할 때 계측기가 새 패킷을 보내면 사용자가 수정했지만 아직 게시하지 않은 데이터는 현재 레코드에 TBookmark 만 가져올 수 있고 새 레코드를 추가 할 수 있기 때문에 손실됩니다. 그 다음에 goto 저장된 북마크 (때로는 새로운 기록으로 인해 올바른 기록이 아닐 수 있습니다). 필요한 경우 데이터 세트의 State, Post을 확인한 후 State을 설정하면 State에 영향을 미치지 않고 클라이언트 데이터 세트의 데이터를 업데이트 할 수있는 방법을 찾고 있습니다. 이것은 가능한가?현재 레코드를 변경하지 않고 클라이언트 데이터 세트의 데이터를 수정할 수 있습니까?

+0

귀하의 응용 프로그램에 악기의 새로운 데이터가 삽입되는 것처럼 q가 읽 힙니다. 그 맞습니까? – MartynA

+0

@MartynA 정확히 –

답변

4

데이터 집합을 복제하고 복제본의 데이터를 수정하십시오.

캐리 젠슨 거기에 문서는 여기에 있습니다 : http://edn.embarcadero.com/article/29416

은 기본적으로 당신은 당신은 참/거짓 설정에 설명서를 읽고 결정해야합니다

var 
    lEdDataset: TClientdataset; 
begin 
    lEdDataset := TClientDataSet.create(nil); 
    try 
    lEdDataset.CloneCursor(SourceDataSet, True**); 
    StoreMedDeviceRecord(lEdDataset); 
    finally 
    lEdDataset.free; 
    end; 

** 같은 것을 필요 당신은 실제로 필요합니다 (나는 손을 기억할 수 없습니다)

+0

내 자신의 대답에 대한 참고로, 항상이 복제본을 생성하거나 해제하는 대신 'DeviceLogger'객체에서 열어 둘 수 있습니다. 이것이 더 나은 솔루션인지 여부는 앱에 따라 다릅니다. –

+1

들어오는 데이터가 백그라운드 스레드에 의해 처리되는 경우 동기화 데이터가 기본 데이터에 직렬화되도록해야합니다. – afrazier