2011-04-14 2 views
1

직원이 기록 된 데이터베이스 (Access .MDB 파일에 있음)와 직원이없는 데이터베이스가 있습니다. 휴일, 병, 훈련 과정, 시작 및 종료 날짜 및 생산 시간 손실 시간.Delphi DBGrid의 편집 가능한 세부 레코드

그런 다음 dbgrid를 "마스터"ADO 쿼리에 바인딩하여 선택한 날짜 범위, 부서, 이름에 대한 검색 문자열을 충족하는 모든 직원을 찾아 생산성 손실 시간을 합산합니다.

부재 레코드가 들어있는 "세부 사항"ADO 테이블에 바인드 된 다른 dbgrid가 있습니다.

원하는 결과는 세부 사항 dbgrid가 마스터 레코드 ("마스터"스태프와 "세부 사항"부재 테이블 모두 공통 EmployeeID 필드를 포함 함)에서 선택된 행과 일치하는 부재 테이블의 레코드 만 포함해야한다는 것입니다.

사용자가 다른 마스터 스태프 레코드로 이동할 때마다 쿼리를 변경하면서 ADO 쿼리를 사용하여이 작업을 수행 할 수 있지만, DBGrid 세부 정보를 삭제, 업데이트 및 그리드 조회를 통해 추가로 부재 레코드를 추가합니다. 사용자는 해당 유형의 코드를 기억할 필요없이 레코드 유형을 선택할 수 있습니다.

이 세부 그리드의 변경 사항이 마스터 dbgrid의 요약에 반영되기를 바랍니다.

Staff Query에 MasterDetail로 링크 된 ADOTable 세부 정보를 사용하여이 작업을 수행했지만 필터링 된 값을 True로 설정하고 코드에서 onfilterevent를 제어해야합니다. 그러나 데이터베이스의 크기가 커짐에 따라 속도가 느려지고 느려집니다.

이 성능을 향상시키기 위해 수행 할 수있는 작업이 있습니까? 아니면 세부적인 dbgrid를 완전히 읽기 전용으로 설정하고 다른 양식이나 패널을 통해 입력 한 모든 부재 레코드를 사용해야합니까? Making the Table a Detail of Another Dataset

ADOTable2.MasterSource := DataSource1; 
ADOTable2.MasterFields := 'EmployeeID'; 


+0

마스터 데이터와 상세 데이터 세트를 연결 시켰습니까? 세부 DbGrid가 detial 데이터 집합을 반영해야하므로 – Najem

+0

예,하지만 날짜 범위를 필터링해야하므로 ADOTable 세부 테이블에서도 onfilterevent를 사용해야합니다. 큰 문제는 테이블이 커지면이 방법을 사용하는 것이 매우 느리다는 것입니다. 또한 세부 레코드가 세부 테이블에 기록되면 AfterPost를 사용하여 시간을 새로 계산할 수 있습니다. 즉, 선택한 마스터 레코드로 되돌아 가기 위해 북마크를 사용해야한다는 것을 의미합니다. 쿼리를 사용할 때 권장되지 않습니다. 여러 사용자가 데이터베이스를 업데이트 할 때 반환되는 데이터 집합이 다를 수 있습니다. – robert

답변