2009년 4월 16일 목요일

Three Tier 방식에서 100건씩 잘라서 넘기기 In DELPHI & Pro-C


IDX := 0;

For ii := 0 To AdvStringGrid.RowCount-2 Do Begin Inc(IDX);

If ((ii+1) MOD 100) = 0 Then Begin If Not SaveData(100, ii-99) Then Exit;
IDX := 0; End Else Begin If (AdvStringGrid.RowCount - 1) = (ii + 1) Then If Not SaveData(IDX, AdvStringGrid.RowCount - 1 - IDX) Then Exit; End;End;

Two Tier 방식에서는 필요가 없겠지만 Three Tier 방식에서는 반드시 필요한 거 같다...

수백, 수천 건의 데이터를 넘기게 되면 아무래도 로드가 심해져 문제가 발생 할 수 있기 때문에. 즉, 호출하고 물고있는 시간이 길어져 TimeOut으로 통신이 끊긴다던지... 아니면 사이즈가 커서 못 넘어 간다던지.

아래는 함수는 데이터를 호출한 서비스로 넘기는 함수다.

Function TGEA201F1.SaveData(sCnt, gCnt: Integer): Boolean;Var IDX, iCnt, RowNo : Integer; ChkStatus : Boolean;Begin Result := False;
Try geReqedt := HgeReqedt.Create;

With geReqedt Do Begin sLocate := VarArrayCreate([0, sCnt-1], varVariant); sReqno := VarArrayCreate([0, sCnt-1], varVariant);
iCnt := 0;

With AdvStringGrid Do Begin For IDX := gCnt To sCnt + gCnt - 1 Do Begin agProdList.GetCheckBoxState(0, IDX+1, ChkStatus);
If ChkStatus And (StrToInt(DelChar(Cells[9, IDX+1], ',')) > 0) Then Begin sLocate [iCnt] := G_LOCATE; sReqno [iCnt] := lsReqNo;
Inc(iCnt); End; End; End; End;

//서비스 호출...

Result := True;

Finally geReqedt.Free; Screen.Cursor := crDefault; End;end;

댓글 없음:

댓글 쓰기