2014-09-19 2 views
-1

Delphi + SQL Server에서 클라이언트 서버 응용 프로그램을 개발함으로써 문제가 지속적으로 발생하여 DB에서 발생한 작업에 대한 정확한 보고서를 제공합니다.새로운 순간에 동일한 db를 비교하는 방법

간단한 예이다

  1. BEFORE 시작 "캡처"를 DB

  2. 사용자

  3. 사용자가 버튼

    를 "저장"프레스 에디트 박스의 값을 변경
  4. AFTER : DB 캡처를 중지하십시오.

이전 상태 (수동으로 BEFOREAFTER 상태를 캡처 함)를 비교하는 도구가 필요합니다.

나는 이런 종류의 도구를 찾았지만 데이터 또는 스키마 비교를 더 많은 데이터 소스와 비교하기위한 도구를 찾았다.

감사합니다.

+0

['트랜잭션 로그] (http://msdn.microsoft.com/en-us/library/ms190925(v=sql.105) .aspx)는 어떻게됩니까?)? 아니면 그냥 로그 테이블 만들기. – TLama

+0

한 번 나는 나가 묻는 무슨을하기 위하여 allwoed 제품의 민주당 원을 보았다는 것을 기억한다, 유감스럽게도 나는 그것이 어느 제품인지 되 부를 수 없다. 그것은 훌륭했다. – LaBracca

+0

응용 프로그램에서 변경하지 않은 변경 내용을 포함하여 Sql Server db에 대한 모든 변경 내용을 catch하려는 경우 db 테이블에 트리거를 설정하여 변경 내용을 기록 할 수 있으며 트리거 설정에 도움이되는 제품이 있습니다. OTOH, 앱 변경 사항에만 관심이 있고 한 번에 한 행만 업데이트하는 경우 자체 로깅 기능을 작성하는 것은 그리 어렵지 않습니다. – MartynA

답변

1

다음은 우리가 가지고있는 응용 프로그램의 추출물입니다. 이 코드는 응용 프로그램의 모든 데이터 집합 구성 요소에 연결된 BeforePost 이벤트 처리기에 있습니다. 이 링크는 많은 데이터 세트가 있으므로 코드를 사용하여 수행됩니다. 이것은 실제로 변경 사항을 기록하지 않고 (필드 목록 만 표시) 목표에 맞게 변경해야합니다. 이것은 당신이 당신이 도구를 요청 때문에 달성하려고하는 무엇을 정확하게 맞다면 나도 몰라하지만 모두의 보고서를 작성하는 효과적인 방법이 될 것입니다 우리의 코드는 수집

CurrentReport := Format('Table %s modified', [DataSet.Name]); 
    for i := 0 to DataSet.FieldCount - 1 do 
    begin 
    XField := DataSet.Fields[i]; 
    if (XField.FieldKind = fkData) and (XField.Value <> XField.OldValue) then 
    begin 
     CurrentReport := CurrentReport + Format(', %s changed', [XField.FieldName]) 
    end; 
    end; 

참고 변경 보고서가 성공적으로 완료된 후에 만 ​​기록합니다.

+0

코드를 공유해 주셔서 감사합니다. 위의 주석에 쓴 것처럼 앱에서 사용하는 것이 좋습니다. 복잡한 응용 프로그램을 리버스 엔지니어링하면 이러한 이유로 도구가 도움이됩니다. – LaBracca