Q&A

  • 오라클 전문가님들 도와주십시오 !
안녕 하세요

오라클8i 와 델파이5로 프로그램을 하고 있습니다.

메인폼에 DataBase 가져다 놓고 설정하구

그리고 다른 폼에서 Query로 Insert, Update, delete 작업을 합니다.

잘 되었읍니다.

어느 순간



//트랜잭션 시작

main.DBAmedia.startTransaction;

try

with Query1 do begin

close;

sql.clear;

sql.add('Update JGPDB Set');

sql.add('t_wjmt = :p_wjmt, t_vat = :p_vat, t_kubn = :p_kubn');

sql.add('where t_bmyy = :p_bmyy and t_srno = :p_srno and t_oyno = :p_oyno');

sql.add(' and t_year = :p_year and t_mnth = :p_mnth and t_wjcd = :p_wjcd');

ParamByName('p_bmyy').asstring := mbmyy.text;

ParamByName('p_srno').asstring := msrno.text;

ParamByName('p_oyno').asstring := moyno.text;

ParamByName('p_year').asstring := myear.text;

ParamByName('p_mnth').asstring := mmnth.text;

ParamByName('p_wjcd').asstring := mwjcd.text;

ParamByName('p_wjmt').asfloat := mamnt.Value;

ParamByName('p_vat').asfloat := mamnt.Value * 0.1;

ParamByName('p_kubn').asstring := mkubn.text;

Execsql;

end;

main.DBAmedia.commit;

Except

begin

main.DBAmedia.rollback;

showmessage(수정실패.!');

Exit;

end;

end;



위 구문에서 Execsql을 만나면 커서는 모래시계로 변하며 꿈쩍을 않함니다.

음 죽은거죠.

Lock이 걸린것 같은데 SQL+ Plus 에서 RollBack 또는 Commit을 한다음

프로그램을 실행하문 또다시 위구문 Execsql에서 죽습니다. 모래시계 못봐서 환장

했는지 모래시계만 보입니다.

책을 보아도 어려운 말들만 써있고 왜 락이걸리는지 또는 락이 아니라면 저 무시무시

한 모래시계는 뭔지 저런경우 어떻게 하면 풀리는지(오라클을 강제로 내리고 다시

올리면 되리라고 생각은 합니다만...)오라클 고수,델파이 고수여러분 땀이 흐르고

있습니다. 저거 해결 못하문 날밤 새야 하는데 새는것보다 못풀까봐....





2  COMMENTS
  • Profile
    뿌요 2001.02.09 18:42
    안녕하세요..

    쿼리를 explore에서 돌려도 그런현상인지요..

    프로그램상에서 말구요..



    엄성철 wrote:

    > 안녕 하세요

    > 오라클8i 와 델파이5로 프로그램을 하고 있습니다.

    > 메인폼에 DataBase 가져다 놓고 설정하구

    > 그리고 다른 폼에서 Query로 Insert, Update, delete 작업을 합니다.

    > 잘 되었읍니다.

    > 어느 순간

    >

    > //트랜잭션 시작

    > main.DBAmedia.startTransaction;

    > try

    > with Query1 do begin

    > close;

    > sql.clear;

    > sql.add('Update JGPDB Set');

    > sql.add('t_wjmt = :p_wjmt, t_vat = :p_vat, t_kubn = :p_kubn');

    > sql.add('where t_bmyy = :p_bmyy and t_srno = :p_srno and t_oyno = :p_oyno');

    > sql.add(' and t_year = :p_year and t_mnth = :p_mnth and t_wjcd = :p_wjcd');

    > ParamByName('p_bmyy').asstring := mbmyy.text;

    > ParamByName('p_srno').asstring := msrno.text;

    > ParamByName('p_oyno').asstring := moyno.text;

    > ParamByName('p_year').asstring := myear.text;

    > ParamByName('p_mnth').asstring := mmnth.text;

    > ParamByName('p_wjcd').asstring := mwjcd.text;

    > ParamByName('p_wjmt').asfloat := mamnt.Value;

    > ParamByName('p_vat').asfloat := mamnt.Value * 0.1;

    > ParamByName('p_kubn').asstring := mkubn.text;

    > Execsql;

    > end;

    > main.DBAmedia.commit;

    > Except

    > begin

    > main.DBAmedia.rollback;

    > showmessage(수정실패.!');

    > Exit;

    > end;

    > end;

    >

    > 위 구문에서 Execsql을 만나면 커서는 모래시계로 변하며 꿈쩍을 않함니다.

    > 음 죽은거죠.

    > Lock이 걸린것 같은데 SQL+ Plus 에서 RollBack 또는 Commit을 한다음

    > 프로그램을 실행하문 또다시 위구문 Execsql에서 죽습니다. 모래시계 못봐서 환장

    > 했는지 모래시계만 보입니다.

    > 책을 보아도 어려운 말들만 써있고 왜 락이걸리는지 또는 락이 아니라면 저 무시무시

    > 한 모래시계는 뭔지 저런경우 어떻게 하면 풀리는지(오라클을 강제로 내리고 다시

    > 올리면 되리라고 생각은 합니다만...)오라클 고수,델파이 고수여러분 땀이 흐르고

    > 있습니다. 저거 해결 못하문 날밤 새야 하는데 새는것보다 못풀까봐....

    >

    >

  • Profile
    강호규 2001.02.09 21:59
    글쌔요...

    대충 2가지로 요약할 수 있겠지요.



    1.락

    이경우에는 해당 레코드에 락을 걸고 있는 프로세서를 찾아야 할 것 같군요.

    어느PC의 어느 어플리케이션이 해당 레코드 락을 걸고 있는지를 찾아서 해결하면

    될 것 같습니다.

    어플리케이션에서 작업시작 후 모래시계가 뜨면

    SQL*Plus에서 커밋하면 어플리케이션의 모래시계가 없어지나요?

    그렇다면 SQL*Plus에서 락을 걸고 있는 걸테고...





    2.업데이트시간이 많이 걸린다.(이경우는 아닌것 같고요...)





    뿌요 wrote:

    > 안녕하세요..

    > 쿼리를 explore에서 돌려도 그런현상인지요..

    > 프로그램상에서 말구요..

    >

    > 엄성철 wrote:

    > > 안녕 하세요

    > > 오라클8i 와 델파이5로 프로그램을 하고 있습니다.

    > > 메인폼에 DataBase 가져다 놓고 설정하구

    > > 그리고 다른 폼에서 Query로 Insert, Update, delete 작업을 합니다.

    > > 잘 되었읍니다.

    > > 어느 순간

    > >

    > > //트랜잭션 시작

    > > main.DBAmedia.startTransaction;

    > > try

    > > with Query1 do begin

    > > close;

    > > sql.clear;

    > > sql.add('Update JGPDB Set');

    > > sql.add('t_wjmt = :p_wjmt, t_vat = :p_vat, t_kubn = :p_kubn');

    > > sql.add('where t_bmyy = :p_bmyy and t_srno = :p_srno and t_oyno = :p_oyno');

    > > sql.add(' and t_year = :p_year and t_mnth = :p_mnth and t_wjcd = :p_wjcd');

    > > ParamByName('p_bmyy').asstring := mbmyy.text;

    > > ParamByName('p_srno').asstring := msrno.text;

    > > ParamByName('p_oyno').asstring := moyno.text;

    > > ParamByName('p_year').asstring := myear.text;

    > > ParamByName('p_mnth').asstring := mmnth.text;

    > > ParamByName('p_wjcd').asstring := mwjcd.text;

    > > ParamByName('p_wjmt').asfloat := mamnt.Value;

    > > ParamByName('p_vat').asfloat := mamnt.Value * 0.1;

    > > ParamByName('p_kubn').asstring := mkubn.text;

    > > Execsql;

    > > end;

    > > main.DBAmedia.commit;

    > > Except

    > > begin

    > > main.DBAmedia.rollback;

    > > showmessage(수정실패.!');

    > > Exit;

    > > end;

    > > end;

    > >

    > > 위 구문에서 Execsql을 만나면 커서는 모래시계로 변하며 꿈쩍을 않함니다.

    > > 음 죽은거죠.

    > > Lock이 걸린것 같은데 SQL+ Plus 에서 RollBack 또는 Commit을 한다음

    > > 프로그램을 실행하문 또다시 위구문 Execsql에서 죽습니다. 모래시계 못봐서 환장

    > > 했는지 모래시계만 보입니다.

    > > 책을 보아도 어려운 말들만 써있고 왜 락이걸리는지 또는 락이 아니라면 저 무시무시

    > > 한 모래시계는 뭔지 저런경우 어떻게 하면 풀리는지(오라클을 강제로 내리고 다시

    > > 올리면 되리라고 생각은 합니다만...)오라클 고수,델파이 고수여러분 땀이 흐르고

    > > 있습니다. 저거 해결 못하문 날밤 새야 하는데 새는것보다 못풀까봐....

    > >

    > >