Q&A

  • UpDateSQL에 대해 설명좀 해주십시오. 부탁..
안녕하세요. 까마귀입니다.



거두절미하고 말씀드리겠습니다.

제가 밑에서 언급했던 Grid문제 때문에 UpDateSQL을 꼭 써야 겠습니다. UpDateSQL을 쓰니 그런 문제가 발생하지 않더군요.

그런데, 이 UpDateSQL을 사용하니 또 다른 문제가 생겼습니다. 수정/삽입이 않되는 것입니다.

삭제는 해보지 않았지만 똑 같으리라고 생각합니다.

델파이 4.0 C/S 이고요, MS SQL 7.0사용합니다. C/S 환경이고요.

쿼리를 사용했고요, 조인은 없습니다. Order By등의 문장도 없고요.

단순히 한 테이블의 내용을 그대로 가져오는 것입니다.

Query에서 CachedUpdate는 True로 줬고요, UpdateObject도 연결을 했습니다.

물론 UpDateSQL에서 문장(?)을 다 생성을 해줬습니다.

아무런 문제가 없다고 생각을 하는데도 수정/삽입이 되지를 않습니다.

UpDateSQL에 대해 검색을 해봤는데 제대로 답을 구할수가 없었습니다.

자세한 설명을 좀 부탁합니다.

아니면, C/S에서 UpDateSQL이 제대로 동작하는 예제를 좀 보내주셨으면 무척 고맙겠습니다.

도움 기다립니다.







위대한 단군혼이 살아있는 나라.... 대한민국.

3  COMMENTS
  • Profile
    freesia 2000.04.14 22:24
    까마귀 wrote:

    > 안녕하세요. 까마귀입니다.

    >

    > 거두절미하고 말씀드리겠습니다.

    > 제가 밑에서 언급했던 Grid문제 때문에 UpDateSQL을 꼭 써야 겠습니다. UpDateSQL을 쓰니 그런 문제가 발생하지 않더군요.

    > 그런데, 이 UpDateSQL을 사용하니 또 다른 문제가 생겼습니다. 수정/삽입이 않되는 것입니다.

    > 삭제는 해보지 않았지만 똑 같으리라고 생각합니다.

    > 델파이 4.0 C/S 이고요, MS SQL 7.0사용합니다. C/S 환경이고요.

    > 쿼리를 사용했고요, 조인은 없습니다. Order By등의 문장도 없고요.

    > 단순히 한 테이블의 내용을 그대로 가져오는 것입니다.

    > Query에서 CachedUpdate는 True로 줬고요, UpdateObject도 연결을 했습니다.

    > 물론 UpDateSQL에서 문장(?)을 다 생성을 해줬습니다.

    > 아무런 문제가 없다고 생각을 하는데도 수정/삽입이 되지를 않습니다.

    > UpDateSQL에 대해 검색을 해봤는데 제대로 답을 구할수가 없었습니다.

    > 자세한 설명을 좀 부탁합니다.

    > 아니면, C/S에서 UpDateSQL이 제대로 동작하는 예제를 좀 보내주셨으면 무척 고맙겠습니다.

    > 도움 기다립니다.

    >

    >

    >

    > 위대한 단군혼이 살아있는 나라.... 대한민국.



    수정 삭제의 경우도

    TTable 컴포넌트 쓰는 방식으로 쓰시면 됩니다..



    Query1.Insert; //Insert 할때



    Query1.post; //insert 한후





    //그리드에서 수정할땐 그리드에 레코드를 클릭하면

    //Query가 Edit모드로 바뀝니다..그래서 수정한수

    Query1.Post;



    그리고 post 했을때 바로 DB에 적용되지는 않죠..

    ApplyUpdate를 해주어야 DB에 적용됩니다..

    다음은 예제 입니다.

    보통은 ApplyUpdate를 해줄때 Query1컴포넌트의 Event에 AfterPost 이벤트에

    사용자 함수 를 만들어 호출하죠..

    제가 사용자 함수를 간단히 만들었습니다..



    procedure TDM.Query1AfterPost(DataSet: TDataSet);

    begin

    UpdateChange(DataSet As TBDEDataSet);

    end;



    procedure UpdateChange(DataSet :TBDEDataSet);

    begin

    with Database1 do

    begin

    StartTransaction;

    with DataSet do

    begin

    try

    ApplyUpdates;//query

    Commit; //database

    except

    //MessageDlg('업데이트 에러', mtError, [mbOK], 0);

    Rollback;

    raise;

    end;

    CommitUpdates;

    end;

    end;

    end;





  • Profile
    까마귀 2000.04.14 23:14
    freesia wrote:

    > 까마귀 wrote:

    > > 안녕하세요. 까마귀입니다.

    > >

    > > 거두절미하고 말씀드리겠습니다.

    > > 제가 밑에서 언급했던 Grid문제 때문에 UpDateSQL을 꼭 써야 겠습니다. UpDateSQL을 쓰니 그런 문제가 발생하지 않더군요.

    > > 그런데, 이 UpDateSQL을 사용하니 또 다른 문제가 생겼습니다. 수정/삽입이 않되는 것입니다.

    > > 삭제는 해보지 않았지만 똑 같으리라고 생각합니다.

    > > 델파이 4.0 C/S 이고요, MS SQL 7.0사용합니다. C/S 환경이고요.

    > > 쿼리를 사용했고요, 조인은 없습니다. Order By등의 문장도 없고요.

    > > 단순히 한 테이블의 내용을 그대로 가져오는 것입니다.

    > > Query에서 CachedUpdate는 True로 줬고요, UpdateObject도 연결을 했습니다.

    > > 물론 UpDateSQL에서 문장(?)을 다 생성을 해줬습니다.

    > > 아무런 문제가 없다고 생각을 하는데도 수정/삽입이 되지를 않습니다.

    > > UpDateSQL에 대해 검색을 해봤는데 제대로 답을 구할수가 없었습니다.

    > > 자세한 설명을 좀 부탁합니다.

    > > 아니면, C/S에서 UpDateSQL이 제대로 동작하는 예제를 좀 보내주셨으면 무척 고맙겠습니다.

    > > 도움 기다립니다.

    > >

    > >

    > >

    > > 위대한 단군혼이 살아있는 나라.... 대한민국.

    >

    > 수정 삭제의 경우도

    > TTable 컴포넌트 쓰는 방식으로 쓰시면 됩니다..

    >

    > Query1.Insert; //Insert 할때

    >

    > Query1.post; //insert 한후

    >

    >

    > //그리드에서 수정할땐 그리드에 레코드를 클릭하면

    > //Query가 Edit모드로 바뀝니다..그래서 수정한수

    > Query1.Post;

    >

    > 그리고 post 했을때 바로 DB에 적용되지는 않죠..

    > ApplyUpdate를 해주어야 DB에 적용됩니다..

    > 다음은 예제 입니다.

    > 보통은 ApplyUpdate를 해줄때 Query1컴포넌트의 Event에 AfterPost 이벤트에

    > 사용자 함수 를 만들어 호출하죠..

    > 제가 사용자 함수를 간단히 만들었습니다..

    >

    > procedure TDM.Query1AfterPost(DataSet: TDataSet);

    > begin

    > UpdateChange(DataSet As TBDEDataSet);

    > end;

    >

    > procedure UpdateChange(DataSet :TBDEDataSet);

    > begin

    > with Database1 do

    > begin

    > StartTransaction;

    > with DataSet do

    > begin

    > try

    > ApplyUpdates;//query

    > Commit; //database

    > except

    > //MessageDlg('업데이트 에러', mtError, [mbOK], 0);

    > Rollback;

    > raise;

    > end;

    > CommitUpdates;

    > end;

    > end;

    > end;

    >

    >





    먼저 답변감사드립니다.

    그런데, 위와 같은 경우에는 매 한건한건마다 저장이 되는 방식으로 보이는데요.

    지금 입력의 경우 보통 2,3건이상이 입력된고 나서 한꺼번에 저장을 해야 합니다.

    그것도 그런 입력하는 부분이 5개가 있고요.

    합하면 한번 저장을 누를때 15건정도의 데이터가 한번에 저장이 됩니다.

    물론 하나라도 에러가 나면 모두 취소가 되고요.

    제가 원하는 것은 한건한건씩이 아닌 한꺼번에 저장할수 있는 방법입니다.

    이론적으로는 ApplyUpdate하고, Commit하고, 에러나면 RollBack하면 되는거라고 아는데, 실제 적용이 되지 않아서 올린 말입니다.

    좀 상세하게 위의 상황에 맞는 설명을 좀 바랍니다.

    아니면 예제나...

    그럼... 감사합니다.







    위대한 단군혼이 살아있는 나라.... 대한민국

  • Profile
    freesia 2000.04.14 23:57
    > > 수정 삭제의 경우도

    > > TTable 컴포넌트 쓰는 방식으로 쓰시면 됩니다..

    > >

    > > Query1.Insert; //Insert 할때

    > >

    > > Query1.post; //insert 한후

    > >

    > >

    > > //그리드에서 수정할땐 그리드에 레코드를 클릭하면

    > > //Query가 Edit모드로 바뀝니다..그래서 수정한수

    > > Query1.Post;

    > >

    > > 그리고 post 했을때 바로 DB에 적용되지는 않죠..

    > > ApplyUpdate를 해주어야 DB에 적용됩니다..

    > > 다음은 예제 입니다.

    > > 보통은 ApplyUpdate를 해줄때 Query1컴포넌트의 Event에 AfterPost 이벤트에

    > > 사용자 함수 를 만들어 호출하죠..

    > > 제가 사용자 함수를 간단히 만들었습니다..

    > >

    > > procedure TDM.Query1AfterPost(DataSet: TDataSet);

    > > begin

    > > UpdateChange(DataSet As TBDEDataSet);

    > > end;

    > >

    > > procedure UpdateChange(DataSet :TBDEDataSet);

    > > begin

    > > with Database1 do

    > > begin

    > > StartTransaction;

    > > with DataSet do

    > > begin

    > > try

    > > ApplyUpdates;//query

    > > Commit; //database

    > > except

    > > //MessageDlg('업데이트 에러', mtError, [mbOK], 0);

    > > Rollback;

    > > raise;

    > > end;

    > > CommitUpdates;

    > > end;

    > > end;

    > > end;

    > >

    > >

    >

    >

    > 먼저 답변감사드립니다.

    > 그런데, 위와 같은 경우에는 매 한건한건마다 저장이 되는 방식으로 보이는데요.

    > 지금 입력의 경우 보통 2,3건이상이 입력된고 나서 한꺼번에 저장을 해야 합니다.

    > 그것도 그런 입력하는 부분이 5개가 있고요.

    > 합하면 한번 저장을 누를때 15건정도의 데이터가 한번에 저장이 됩니다.

    > 물론 하나라도 에러가 나면 모두 취소가 되고요.

    > 제가 원하는 것은 한건한건씩이 아닌 한꺼번에 저장할수 있는 방법입니다.

    > 이론적으로는 ApplyUpdate하고, Commit하고, 에러나면 RollBack하면 되는거라고 아는데, 실제 적용이 되지 않아서 올린 말입니다.

    > 좀 상세하게 위의 상황에 맞는 설명을 좀 바랍니다.

    > 아니면 예제나...

    > 그럼... 감사합니다.

    >

    >

    >

    > 위대한 단군혼이 살아있는 나라.... 대한민국





    글쿤요...저는 업데이트가 하나하나 수정할때 마다

    하는 방식인줄 알고 설명했네요..

    여러개를 한꺼번에 업데이트 할려고 할때

    Post하면 직접 DB에 적용시키지 않고 데이타를 캐쉬에 저장을 합니다..

    여러개 수십개든 Update 난후 Post해 캐시에 저장시켜놓구

    마지막에 한번에 DB에 적용 시키면 되겠죠(ApplyUpdate : 캐쉬에 있는 내용을 DB에 실제 적용)

    위의 까마귀님의 예를 든다면

    여러개 입력하구 난후 마지막 저장 버튼을 누를때

    ApplyUpdat를 수행하면 되겠죠



    글구 CommitUpdates를 수행하면 깨끗이 캐시를 비웁니다..



    글구 참고로 델파이에서 UpdateSql예제가 기본적으로 있습니다..

    위치는 Program FilesBorlandDelphi5Demos 밑에 찾아보면 Cashed Update예제가 있을겁니다 참고 하시면 좋을듯 싶네요..



    답변이