Q&A

  • 디테일 테이블의 [입력,수정,삭제] 못하나요?
3개의 테이블(shop,item,trans)을 shop과 item을 마스터로 잡고 디테일에는 trans테이블로 설정했습니다.

******************************************************************************

With DM.Query1 DO begin

close;

sql.clear;

sql.Add('select trans.shop, trans.item, trans.disp, trans.price from shop, item, trans');

sql.Add('where trans.shop = shop.shop And trans.item=item.item');

Open;

end;

******************************************************************************

요렇게 ㅠ.ㅜ



연결에 성공하였으나...

디테일 테이블인 trans를 입력,수정,삭제 하려고 하면, Query1의 Dataset이

ReadOnly래요!

그러면, 디테일테이블의 입력,수정,삭제를 가능케 하려면,

마스터, 디테일의 조인(Join)을 다시 풀어줘야 하나요?



3  COMMENTS
  • Profile
    이희정 2001.03.28 20:22
    강동희 wrote:

    > 3개의 테이블(shop,item,trans)을 shop과 item을 마스터로 잡고 디테일에는 trans테이블로 설정했습니다.

    > ******************************************************************************

    > With DM.Query1 DO begin

    > close;

    > sql.clear;

    > sql.Add('select trans.shop, trans.item, trans.disp, trans.price from shop, item, trans');

    > sql.Add('where trans.shop = shop.shop And trans.item=item.item');

    > Open;

    > end;

    > ******************************************************************************

    > 요렇게 ㅠ.ㅜ

    >

    > 연결에 성공하였으나...

    > 디테일 테이블인 trans를 입력,수정,삭제 하려고 하면, Query1의 Dataset이

    > ReadOnly래요!

    > 그러면, 디테일테이블의 입력,수정,삭제를 가능케 하려면,

    > 마스터, 디테일의 조인(Join)을 다시 풀어줘야 하나요?

    >



    query에서 join을 걸면 그 query는 request가 True가 되지 않죠.



    따라서 그 query로는 데이타를 읽어올 수만 있고 write를 할 수는 없습니다.



    그렇지만.. 그렇다고 입력화면에서 입력을 못하시면 안되겠죠?



    dataaccess component중에 UpdateSQL이라는 component가 있습니다.



    그 component 갖다 놓으시고



    join이 걸린 query의 property중 updateObject라는 속성에 updatesql을 선택하세요.



    그리고 updatesql component를 더블 클릭하신후 왼쪽 상단에 자료가 입력되어야할 테이블명을 선택하시고 gettablefield버튼을 누리시면 테이블에 있는 모든 Field가 오른쪽리스트박스에 들어옵니다.



    마지막으로 Generate SQL 해주시면 자동으로 insert, update, delete sql문이 들어옵니다.





  • Profile
    강동희 2001.03.28 21:07


    > query에서 join을 걸면 그 query는 request가 True가 되지 않죠.

    >

    > 따라서 그 query로는 데이타를 읽어올 수만 있고 write를 할 수는 없습니다.

    >

    > 그렇지만.. 그렇다고 입력화면에서 입력을 못하시면 안되겠죠?

    >

    > dataaccess component중에 UpdateSQL이라는 component가 있습니다.

    >

    > 그 component 갖다 놓으시고

    >

    > join이 걸린 query의 property중 updateObject라는 속성에 updatesql을 선택하세요.

    >

    > 그리고 updatesql component를 더블 클릭하신후 왼쪽 상단에 자료가 입력되어야할 테이블명을 선택하시고 gettablefield버튼을 누리시면 테이블에 있는 모든 Field가 오른쪽리스트박스에 들어옵니다.

    >

    > 마지막으로 Generate SQL 해주시면 자동으로 insert, update, delete sql문이 들어옵니다.

    >



    ***********************

    답변감사합니다.

    UpDatesql 컴포넌트를 배치해서, insert, update, delete 상태가 되긴 했는데...

    좀 이상해요.,..

    예를 들어서. 폼상에서 delete를 하면 없어지는데.

    폼을 종료하고나서 다시 그 폼을 띄우면 좀전에 삭제한 레코드가 그대로 남아있어요.

    헉,. 산넘어산. 이럴땐 어케해야나요?

  • Profile
    이희정 2001.03.28 23:01
    강동희 wrote:

    >

    > > query에서 join을 걸면 그 query는 request가 True가 되지 않죠.

    > >

    > > 따라서 그 query로는 데이타를 읽어올 수만 있고 write를 할 수는 없습니다.

    > >

    > > 그렇지만.. 그렇다고 입력화면에서 입력을 못하시면 안되겠죠?

    > >

    > > dataaccess component중에 UpdateSQL이라는 component가 있습니다.

    > >

    > > 그 component 갖다 놓으시고

    > >

    > > join이 걸린 query의 property중 updateObject라는 속성에 updatesql을 선택하세요.

    > >

    > > 그리고 updatesql component를 더블 클릭하신후 왼쪽 상단에 자료가 입력되어야할 테이블명을 선택하시고 gettablefield버튼을 누리시면 테이블에 있는 모든 Field가 오른쪽리스트박스에 들어옵니다.

    > >

    > > 마지막으로 Generate SQL 해주시면 자동으로 insert, update, delete sql문이 들어옵니다.

    > >

    >

    > ***********************

    > 답변감사합니다.

    > UpDatesql 컴포넌트를 배치해서, insert, update, delete 상태가 되긴 했는데...

    > 좀 이상해요.,..

    > 예를 들어서. 폼상에서 delete를 하면 없어지는데.

    > 폼을 종료하고나서 다시 그 폼을 띄우면 좀전에 삭제한 레코드가 그대로 남아있어요.

    > 헉,. 산넘어산. 이럴땐 어케해야나요?



    이런.. 제가 하나를 빼먹었군요.



    updateSQL을 썼기때문에..insert, update, delete시에 마지막에



    query.applyupdate;

    query.commitupdate;



    해주셔야합니다.



    cancel도 그냥 cancel 하심 안되구요..cancelupdate하셔야됩니다.