2017-11-24 21 views
0

델파이 DataSnap REST 애플리케이션으로 테스트를하고 있습니다. 마법사를 사용하면 서버와 클라이언트간에 작동하는 응용 프로그램을 만들 수있는 좋은 출발점을 얻을 수 있습니다. 프로그램 코드가 여기에 표시됩니다.서버 측 UpdateSQL 명령어를 동적으로 생성하기 위해 TFDJSONDeltas에서 델타 데이터 셋을 얻는 방법

procedure TServerMethodsMain.ApplyDataSetChanges(const ATableName: String; 
                const ADeltaList: TFDJSONDeltas); 
    var 
     LApply: IFDJSONDeltasApplyUpdates; 
    begin 
     LApply := TFDJSONDeltasApplyUpdates.Create(ADeltaList); 

     DataModule1.FDQuery1.UpdateOptions.UpdateTableName := ATableName; 

     LApply.ApplyUpdates(ATableName, DataModule1.FDQuery1.Command); 

     if LApply.Errors.Count > 0 then 
     raise Exception.Create(LApply.Errors.Strings.Text); 
    end; 

지금 여기 서버 측에서 데이터 업데이트에 대한 하나의 문제입니다 :

값이 함께 업데이트됩니다 모든 OLDVALUEs 원래 레코드를 식별하는 기준으로 사용되는 모든 필드를 표시합니다. 따라서 다른 사용자가 동일한 레코드에서 하나 이상의 값을 변경하면 클라이언트 응용 프로그램에서 오류가 발생합니다.

TFDJSONDeltas에서 델타 레코드를 얻는 방법을 알고 싶습니다. 그렇다면 수정 된 값으로 만 UPDATE SQL을 작성할 수 있습니다. 또한 레코드는 기본/키 필드로만 식별 할 수 있습니다.

감사합니다.

답변

0

FireDAC은 원하는 UPDATE SQL을 완벽하게 생성 할 수 있습니다. 그것은 많은 옵션을 가지고 있습니다!

FDQuery1.UpdateOptions.KeyFields 속성을 지정하고 FDQuery1.UpdateOptions.UpdateMode를 기본값 인 upWhereKeyOnly로 둡니다.

또한 Delphi는 많은 FireDAC 샘플을 제공합니다.

+0

감사합니다. Erwin. 나는 너의 충고를 지금 시도 할 것이다. – James

+0

귀하의 조언과 완벽하게 작동합니다! 여기에 다른 언급이 있습니다. KeyField는 데이터 세트를 준비/열기 전에 지정해야합니다. – James