Q&A

  • Table에 3000여건 등록시 속도개선문제...
Server에는 Oracle에 Table이 있고 Client는 조금 멀리 떨어져있습니다.

회선은 사내Lan으로 연결되어 있구 속도는 최대 64kbps이지만 여러부서로 분기

되므로 속도가 많이 떨어 집니다.



현업에서 본사의 Table에 3000여건의 자료를 읽어올때는 2분 정도가 소요되구

이것을 기록할때는 거의 Down되듯 합니다.

본사에서 등록할때 2분정도 소요시간되더라구요.(속도 10Mbps는 나옴)

현업에서의 등록처리시 다른 방법은 없는지 혹시 하시면 한수 부탁드립니다. T.T





Logic은 대강 다음과 같이 구현했구요(초보라서...^^)

//////////////////////////////////////////////////////////////////////////

sSQL : String;

i : Integer;



Database1.StartTransaction;

try

for i := 1 to Cnt do begin

sSQL := 'Insert into DB (Gbn, Sosok, Dat, OrderNo, Sabun, Saup ' +

'Values (:Gbn, :Sosok, :Dat, :OrderNo, :Sabun, :Saup)';

ParamByName('Gbn').Asinteger := i;

ParamByName('Sosok').AsString := '1234';

(기타등등...)

Qry.sql.Text := sSQL;

Qry.Execsql;



end;

Database1.Commit;

execpt

Database1.Rollback;

Showmessage('기록에 실패했습니다!...');

end;

//////////////////////////////////////////////////////////////////////////

2  COMMENTS
  • Profile
    111 2001.08.25 19:45
    // 짧으나마 한마디 남김다.



    sSQL : String;

    i : Integer;

    bError: boolean;



    Database1.StartTransaction;

    try

    for i := 1 to Cnt do begin

    sSQL := 'Insert into DB (Gbn, Sosok, Dat, OrderNo, Sabun, Saup ' +

    'Values (:Gbn, :Sosok, :Dat, :OrderNo, :Sabun, :Saup)';

    ParamByName('Gbn').Asinteger := i;

    ParamByName('Sosok').AsString := '1234';

    (기타등등...)

    Qry.sql.Text := sSQL;

    Qry.Execsql;



    if (i > 0) and (i mod 100 = 0) then // 100개단위로 Commit

    begin

    if Database1.InTransaction then

    begin

    bError := False;



    try

    Database1.Commit;

    execpt

    Database1.Rollback;

    bError := True;

    end;



    if bError then break;

    end;



    if not Database1.InTransaction then

    Database1.StartTransaction;

    end;



    application.ProcessMessages; // 기타 Message처리



    end; // for i := 1 to Cnt do begin



    if Database1.InTransaction then

    Database1.Commit;

    execpt

    if Database1.InTransaction then

    Database1.Rollback;

    Showmessage('기록에 실패했습니다!...');

    end;



  • Profile
    전문성 2001.08.25 20:40
    답변에 감사합니다...



    그러데요..궁굼한게 있어서

    말씀하신것 처럼 구현하면 3000건중 500건째에서 Error가 생기면

    앞에 Commit된 400건은 Rollback후 지워버리는 Logic을 다시 타야 하는 건가요?



    아니면 말씀하신 코드안에 그걸 해결하는 방법이 있는지요?(있음 어떤부분인지

    좀 가르쳐주세요... )