2011-09-23 2 views
2

일부 데이터 인식 구성 요소를 채우는 데 사용하는 간단한 TClientDataSet 구성 요소가 있습니다. 그러나이 데이터 집합을 사용하여 데이터베이스에 데이터를 삽입하면 TclientDataSet 구성 요소로 다시 동기화 할 수있는 적절한 방법을 찾지 못하는 것 같습니다.DB를 변경하지 않고 TClientDataSet을 업데이트하지 않으면 어떻게됩니까?

어떻게해야합니까?

+1

TDatabase 또는 TDBConnection의 연결 구성 요소에 이벤트가 있습니다. – Johan

+0

질문이 명확하지 않습니다. 두 개 이상의 데이터 집합에 대해 이야기하고 있지만 TClientDataSet은 하나만 언급합니다. 어떻게 데이터를 데이터베이스에 삽입합니까? TClientDataSet을 통해? – LachlanG

답변

3

TClientDataSet 구성 요소에는 정확하게 수행하는 Refresh 메서드가 있습니다. 그래도 문서에서 이것을 찾으려면 시간을 할애했다. : 워드 프로세서

:

DB.pas

에서

절차 새로 고침;

데이터 집합의 데이터보기를 업데이트하기 위해 데이터베이스에서 데이터를 다시 가져옵니다.

응용 프로그램에 데이터베이스의 최신 데이터가 있는지 확인하려면 새로 고침을 호출하십시오. 예를 들어, 응용 프로그램이 데이터 집합에 대한 필터링을 해제하면 필터 조건을 충족하는 데 사용 된 레코드뿐만 아니라 데이터 집합의 모든 레코드를 표시하기 위해 Refresh를 즉시 호출해야합니다.

참고 : 모든 TDataSet 자손에 대해 Refresh 메서드가 작동하지 않습니다. 특히, 쿼리가 "라이브"가 아닌 경우 TQuery 구성 요소는 새로 고침 메서드를 지원하지 않습니다. 정적 TQuery를 새로 고치려면 데이터 세트를 닫았다가 다시 엽니 다. TDataSet은 레코드를 새로 고치기 전에 BeforeRefresh 이벤트를 생성하고 나중에 AfterRefresh 이벤트를 생성합니다.

참고 : 대부분의 데이터 집합은 새로 고침을 호출 할 때 현재 레코드 위치를 유지하려고합니다. 그러나 이것이 항상 가능한 것은 아닙니다. 예를 들어, 현재 레코드가 다른 사용자에 의해 서버에서 삭제되었을 수 있습니다. 단방향 데이터 세트에는 새로 고침 후 현재 레코드를 찾는 메커니즘이 없으며 항상 첫 번째 레코드로 다시 이동합니다.

경고 : 단방향 데이터 세트는 커서를 닫았다가 다시 열어 데이터를 새로 고칩니다. 예를 들어 BeforeClose, AfterClose, BeforeOpen 또는 AfterOpen 이벤트 처리기에 코드가있는 경우 의도하지 않은 부작용이 발생할 수 있습니다.

0

기본적으로 TClientDataset을 닫은 다음 열어 원래와 같은 방식으로 데이터베이스에서 데이터를로드해야합니다. TClientDataset이 TDataset/TQuery 자손에 연결된 TDataSetProvider에 연결되어 있으면 TClientDataset을 닫은 다음 열면됩니다.

+0

이 방법이 효과적이지만 최선의 방법은 아닙니다. – ivarec

2

CDS를 닫았다가 열었습니다. 델파이 XE2, 업데이트 3을 Access 2007 데이터베이스에 연결하는 ADO 테이블과 함께 사용하고 있습니다. 내 CDS에서 데이터를 새로 고칠 수있는 유일한 방법은 다음과 같습니다.

procedure TForm1.PeopleRefreshButtonClick(Sender: TObject); 
// this actually re-loads the data from the table! 
begin 
    DM1.PeopleTable.Close; 
    DM1.PeopleTable.Open; 
    DM1.PeopleCDS.Refresh; 
end; 

양식의 새로 고침 단추가 닫히고 표가 열립니다. 그런 다음 ClientDataSet을 새로 고칩니다.

관련 문제