Q&A

  • 마이다스에서 applyupdate 처리방법
안녕하세요.

c/s환경에서의 마이다스 db applyupdate처리방법때문에 애를 먹고 있습니다.



db 하나만 조작할때문 문제가 없습니다만

두개이상의 db를 제어할때 항상 문제가 발생하고 있습니다.



clientdataset1 = master

clientdataset2 = details

clientdataset3 = etc



try

clientdataset1.applyupdate(-1);

clientdataset2.applyupdate(-1);

clientdataset3.applyupdate(-1);

except



end;



현재는 이렇게 처리하고 있습니다만 3번 clientdataset3에서 문제가 발생하면

1.2 dataset는 등록이 되어버림니다.

1,2,3 다될려면 다되고 아니면 안되야 되는데

어떻게 처리해야할지 감을 못잡겠습니다.

그렇다고 아래와같이 처리할수도 없고... 갈켜주세요.



Database1.StartTransaction;



try

Master.ApplyUpdates;

Detail.ApplyUpdates;

Database1.Commit;

except

Database1.Rollback;

raise;

end;

Master.CommitUpdates;

Detail.CommitUpdates;

수고하세요.









3  COMMENTS
  • Profile
    김고진 1999.11.04 18:38
    DataBase1.StartTransaction;

    try

    Master.ApplyUpdates;

    Client.ApplyUpdates;

    Etc.ApplyUpdates;

    except

    DataBase1.Rollback;

    Exit;

    end;

    DataBase1.Commit;



    모든 저장루틴을 Transaction에 걸고 에러 유발시에만 Rollback를 하는게 보편적인 방법입니다.

    Commit에서 에러 유발시에는 직접적으로 그 데이타를 찾아서 Delete하는 수 밖에 없어요...

    대부분 ApplyUpdates에서 Pass가 되면 Commit적용할때는 그대로 Pass가 됩니다.

  • Profile
    황선희 1999.11.04 19:42
    김고진 wrote:

    > DataBase1.StartTransaction;

    > try

    > Master.ApplyUpdates;

    > Client.ApplyUpdates;

    > Etc.ApplyUpdates;

    > except

    > DataBase1.Rollback;

    > Exit;

    > end;

    > DataBase1.Commit;

    >

    > 모든 저장루틴을 Transaction에 걸고 에러 유발시에만 Rollback를 하는게 보편적인 방법입니다.

    > Commit에서 에러 유발시에는 직접적으로 그 데이타를 찾아서 Delete하는 수 밖에 없어요...

    > 대부분 ApplyUpdates에서 Pass가 되면 Commit적용할때는 그대로 Pass가 됩니다.





    저는 약간 경우가 다릅니다.



    try

    CDS1.ApplyUpdates(-1);

    showmessage('등록되었습니다.');

    except

    CDS1.CancelUpdates;

    CDS1.Cancel;

    showmessage('취소하였습니다.');

    end;



    테이블에 유니크 인덱스를 잡았기 때문에 ApplyUpdates가 되는 것이 아니라,



    CancelUpdates가 실행되어야 합니다.



    그런데, 메세지는 자꾸만 '등록되었습니다'만 나오고, 인덱스가 잡히지 않은 데이타를 변경했지만, 디비에는 반영이 되지 않습니다.



    어떻게 해야 정상적인 루틴으로 돌아갈 수 있는지요?



  • Profile
    김용민 1999.11.04 20:46
    안녕하세요.

    StartTransaction명령은 서버에서나 사용가능하다고 보고있습니다.

    클라이언트에서 Database를 사용한다는건 2tier방식과 별차이가 없다고

    생각되어지는데...

    황선희님의 경우 단일테이블이나 조인된 몇개의 테이블은 전혀문제없이 처리할수

    있습니다. 제가 알고자하는거는 단지 조인되지않은 몇개의 테이블이

    완전하게 입력되어지던지 아니던지를 바라는 마음에서 질문을 올린거죠.

    물론 Database를 사용하지 않고요...



    황선희님의 질문에 대한답은 다음과 같이 처리하시면 가능합니다.

    Server쪽



    begin

    updatesql.dataset:=query1;

    setusqlparams(updatesql.qyery[updatekind], deltads);

    updatesql.execsql(updatekind);

    applied:=true;

    end;





    황선희 wrote:

    > 김고진 wrote:

    > > DataBase1.StartTransaction;

    > > try

    > > Master.ApplyUpdates;

    > > Client.ApplyUpdates;

    > > Etc.ApplyUpdates;

    > > except

    > > DataBase1.Rollback;

    > > Exit;

    > > end;

    > > DataBase1.Commit;

    > >

    > > 모든 저장루틴을 Transaction에 걸고 에러 유발시에만 Rollback를 하는게 보편적인 방법입니다.

    > > Commit에서 에러 유발시에는 직접적으로 그 데이타를 찾아서 Delete하는 수 밖에 없어요...

    > > 대부분 ApplyUpdates에서 Pass가 되면 Commit적용할때는 그대로 Pass가 됩니다.

    >

    >

    > 저는 약간 경우가 다릅니다.

    >

    > try

    > CDS1.ApplyUpdates(-1);

    > showmessage('등록되었습니다.');

    > except

    > CDS1.CancelUpdates;

    > CDS1.Cancel;

    > showmessage('취소하였습니다.');

    > end;

    >

    > 테이블에 유니크 인덱스를 잡았기 때문에 ApplyUpdates가 되는 것이 아니라,

    >

    > CancelUpdates가 실행되어야 합니다.

    >

    > 그런데, 메세지는 자꾸만 '등록되었습니다'만 나오고, 인덱스가 잡히지 않은 데이타를 변경했지만, 디비에는 반영이 되지 않습니다.

    >

    > 어떻게 해야 정상적인 루틴으로 돌아갈 수 있는지요?

    >

    • 황현동
    • 1999.11.04 13:07
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 오세웅
      1999.11.04 19:20
      황현동 wrote: > api라는것 설명 부탁합니다.. > > 이걸 알아야 할것 같은데.. 모르거든요.. > > 선...
    • termy
    • 1999.11.04 10:36
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 오승섭
      1999.11.04 18:47
      안녕하세요 .... 질문하신 내용이 약간 이해하기가 힘든데 .... Query된 결과 값을 받아오는 방법은 ...
    • termy
      1999.11.04 19:13
      질문에 답변해 주셔서 감사합니다. 그런데 제가 원하는 것은 컴포넌트를 이용하지 않고 (예를 들어 결과...
    • 오승섭
      1999.11.04 19:21
      안녕하세요 .... 받아 올 변수를 선언하시고, 각각의 Query된 결과를 옮겨주면 됩니다. 예) var 변수...
    • 권오경
      1999.11.05 21:56
      신 기종 wrote: > 메인 폼에서 버튼을 누르면 조그만 모달 윈도우를 띄우는데 > > 메인폼이 Maximize ...
    • 오세웅
      1999.11.04 19:04
      신 기종 wrote: > 메인 폼에서 버튼을 누르면 조그만 모달 윈도우를 띄우는데 > > 메인폼이 Maximize ...
    • 장명선
    • 1999.11.04 06:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.11.04 20:26
      델파이에 포함되어있는 POP3 컴포넌트를 사용하시면 됩니다. 델파이에 Example까지 있으니 금방 만드실 ...
    • 김용민
    • 1999.11.04 06:05
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김고진
      1999.11.04 18:38
      DataBase1.StartTransaction; try Master.ApplyUpdates; Client.ApplyUpdates; Etc.ApplyUpdates...
    • 황선희
      1999.11.04 19:42
      김고진 wrote: > DataBase1.StartTransaction; > try > Master.ApplyUpdates; > Client.ApplyUpdat...
    • 김용민
      1999.11.04 20:46
      안녕하세요. StartTransaction명령은 서버에서나 사용가능하다고 보고있습니다. 클라이언트에서 Database...
    • 이만준
      1999.11.04 04:35
      안녕하세요... a := b = c 에서 a 는 boolean 형이구요.... b 와 c 가 같으면 True 가 되고 ...
    • byungjoon
    • 1999.11.04 04:26
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 오승섭
      1999.11.04 05:01
      안녕하세요 ... Group By 가 빠진 것 같기도 하고 .... 쩝 .... 에러 메세지를 좀 보여주세요 .... ...
    • byungjoon
      1999.11.04 05:34
      에러 메시지는 아래와 같아요. project1.exe raised exception class EDBEngineError with message 'Ge...
    • 오승섭
      1999.11.04 18:21
      안녕하세요 ... 문장을 이렇게 바꿔보시죠 .... String변수를 하나 선언하고, str_Value : Strin...
    • 조복기
      1999.11.04 19:39
      안녕하세요.. memo를 하나 폼에 놓고 sql.add문 대입후에 마지막줄에 memo1.Line := sql -> ...
    • 화랑
    • 1999.11.04 02:39
    • 4 COMMENTS
    • /
    • 0 LIKES
    • netuse
      2000.01.21 08:46
      저는 비주얼베이직으로 서버 컴포넌트를 만들어서 사용했습니다. 우선 저의 경우를 예를 들면 비줄얼 베이...
    • 디밥
      1999.11.06 18:26
      화랑 wrote: > 안녕하세요.. 화랑입니다.. > > 저는 Active Server Component를 개발을 하고 있는데.. ...
    • 화랑
      1999.11.06 21:36
      MTS Component로 하게 되면 쉽게 IDE Debugging이 가능합니다. 이말이 잘 이해가 되지 않습니다.. 여러...
    • 디밥
      1999.11.07 00:14
      Help에 보심 나오는데.... DLL을 Debugging할 때 처럼 하면 됩니다. Parameters 메뉴에서 실행...
    • 땡글이
    • 1999.11.04 02:31
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이만준
      1999.11.04 04:30
      uses 절에 dbgrids 가 있나 확인해보세요... Undeclared identifier 에러는 대부분 uses 절에 유닛을 ...
    • 초짜
    • 1999.11.04 00:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      1999.11.04 20:20
      음.. 이상하군요. 왜 다른키를 방향키로 인식을 할까요..??? 방향키를 누르면 다른 입력란으로 가게 ...
    • 류재성
    • 1999.11.03 23:59
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 장지원
      2000.03.16 01:48
      류재성 wrote: > Win2000에서 Delphi4C/S Install이 않되네요... > > Win2000을 쓰고는 싶은데... 설치...
    • 유재우
      1999.11.12 19:34
      류재성 wrote: > Win2000에서 Delphi4C/S Install이 않되네요... > > Win2000을 쓰고는 싶은데... 설치...
    • ARITH
      1999.11.17 07:33
      근데 저는 델파이5를 한글WIN2000에서 설치는 했는데.. DATABASE DESKTOP프로그램에서 좀 문제가 생기네요...
    • 김 성중
      1999.12.13 21:46
      ///저는 Del4를 잘쓰고 있습니다만 BDE에서 메모리충돌이 가끔 있더군요 저도아직 해결 못했습니다. ...
    • 김고진
    • 1999.11.03 23:49
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조복기
      1999.11.04 01:54
      안녕하세요..자유게시판지기입니다. 현재 paradox에 관련된 자료는 델파이헬프에 의존을 할수밖에 없...