2017-09-26 11 views
1

나는 Firedac과 함께 Delphi 10을 사용하고 있으며, Master-Detail 구성 인 A (Document)와 B (DocDetail)에 두 개의 테이블이 있습니다. 내 양식에는 각 데이터 소스에 각각 연결된 두 개의 DBgrid가 있습니다. 가능한 경우 마스터 dbgrid에서 해당 마스터 레코드를 삭제할 때 DocDetail 테이블의 모든 레코드 항목을 삭제하는 구성이 필요합니다. 이러한 작업을 수행하는 테이블 FDTable 구성에 구성이 있습니까? 아니면 마스터 삭제 - 델파이 측면에서 세부 사항을 삭제하는 다른 방법? (나는 그것이 제약 삭제 캐스케이드를 통해 데이터베이스 측에서 그것을 할 수 있음을 안다.) 당신의 도움을 주셔서 감사합니다. DetailServerCascade 다음, FireDAC 거짓 인 경우Delphi 10 - 마스터 삭제시 세부 레코드를 자동으로 삭제 하시겠습니까?

+2

왜 데이터베이스 측에서 수행하지 않습니까? – Sami

+0

음, 가능합니다. – Sami

+1

기다려 ... @MarkElder 님의 답변에 대한 답변은 당신이 오라클을 사용하고 있다고 말합니다. 수동으로 코드 대신 서버에서이 작업을 수행하는 이유는 무엇입니까? DBA와 대화해야합니다. –

답변

3

당신이 TFDQuery 구성 요소에 대한 찾고있는 특성은 DetailServerCascade

의 도움말에서 FetchOptions.DetailServerCascade

FetchOptions.DetailCascade 및/또는 있습니다 클라이언트 쪽 데이터베이스에 계단식 변경 내용이 게시됩니다. 클라이언트 측 계단식 변경 은 DetailCascade가 True 일 때 수행됩니다. 그래서 DetailServerCascade 을 DetailCascade와 함께 사용해야합니다.

CachedUpdates를 사용하는 경우 TFDSchemaAdapter 구성 요소가 필요할 수도 있습니다. 이 CentralizedCachedUpdates Sample page 목록은 캐시 된 업데이트를 사용할 때 구성 요소를 설정해야합니다.

좋은 결과가 나오는 한 가지 형식으로 사용하고 있습니다. 모든 설정을 올바로 수행하려면 다소 까다 롭습니다. 기본적으로 업데이트에 포함 된 모든 DataSet은 하나의 공통 TFDSchemaAdapter 구성 요소를 가리켜 야합니다. 그런 다음 모든 마스터 데이터 세트가 FetchOptions.DetailCascade를 true로 설정하여 행이 하위 데이터 세트에서 올바르게 삭제되도록해야합니다.

+0

안녕하세요. Mastr-detail 구성으로이 Cahin Update를 재현하기 위해 두 개의 MD 테이블이있는 양식을 만들었습니다. [Caching Updates - Firedac] (http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Caching_Updates_(FireDAC)에 설명 된 모든 단계를 따랐습니다.)하지만 결국 그것은 작동하지 않았습니다! 마스터 레코드를 삭제하려고 할 때 오류가 발생했습니다 : [FireDAC] [Phys] [Ora] ORA-0922 : 무결성 제약 조건 (JRG.Depto_Emp_FK)이 위반되었습니다 - 하위 레코드가 발견되었습니다. 어떤 특수한 Oracle 데이터베이스 구성이 있습니까? – JRG

+0

데이터베이스에 특정한 것이 없어야합니다. 설정은 삭제 된 SQL 문이 생성되고 FireDac이이를 실행하는 순서를 제어합니다. 어떤 속성을 잘못 설정할 수 있었는지 말하기는 어렵습니다. DFM에서 귀하의 질문과 관련된 4 개의 주요 구성 요소에 대한 텍스트를 추가 할 수 있습니다 (두 개의 데이터 세트, 데이터 소스 및 스키마 어댑터가 있어야 함). SchemaAdapter에서 .ApplyUpdates를 호출하는지 확인하십시오. 개별 검색어 . –

+0

누락 된 단계 : 두 데이터 세트에서 Cacheupdates = true를 발견했습니다. 지금 그것은 작동한다! 정말 고맙습니다 ! – JRG