Q&A

  • TQuery에서 Grid자동편집이 되나요?
TTable와 TDataSource를 연결하여 AutoEdit를 true로 설정하면

TDataSource에 연결된 Grid의 마지막줄에서 아래 화살표키를

누르면 자동으로 자료가 추가되는데....

TTable대신 TQuery를 사용했을때도 마찬가지의 결과를 얻을 수

있나요?

3  COMMENTS
  • Profile
    이재식 1999.09.29 05:50
    이양규 wrote:

    > TTable와 TDataSource를 연결하여 AutoEdit를 true로 설정하면

    > TDataSource에 연결된 Grid의 마지막줄에서 아래 화살표키를

    > 누르면 자동으로 자료가 추가되는데....

    > TTable대신 TQuery를 사용했을때도 마찬가지의 결과를 얻을 수

    > 있나요?



    이재식 Wrote :

    네, 마찬가지 입니다.

    그런데요, TTable컴포넌트를 DataSource와 연결시키면

    DataSource속성 중 AutoEdit는 디폴트로 true,

    테이블 컴포넌트의 readonly속성은 false가 되요.

    그래서, 위에서 설명한 것처럼 신규입력 및 수정이 가능해요.

    그런데, Query컴포넌트는 좀 다릅니다.

    테이블 컴포넌트와 비슷하지만, DataSource와 연결시키면

    역시 DataSource속성의 AutoEdit는 true입니다만,

    쿼리 컴포넌트에는 readonly속성이 없습니다.

    대신 RequestLive속성이 있죠. 쿼리를 open(or Active := true)하기전에

    반드시 이 속성값이 true로 되어 있어야 합니다.

    이 속성은 디폴트로 false이기 때문에 말입니다.

    물론, 위의 설명은 여러개의 테이블을 조인하지 않는 경우입니다.

    조인을 하면 쿼리 컴포넌트는 무조건 수정이 안되는 읽기전용 속성으로

    변합니다. 그래서 UpdateSQL컴포넌트를 써야 해요.

    그러나, 이 컴포넌트가 자동적으로 모든것을 알아서 해준다고 생각하시면

    곤란합니다. 다만 조인결과에 대해 수정모드로 바꾸어 줄뿐, 실질적으로

    물리 DB에 삭제, 수정, 입력하는 작업등은 코딩해 주어야 되죠.

    가급적이면 UpdateSQL컴포넌트는 쓰지 않는 방향으로 하는것이

    좋습니다. 특히 C/S개발에서는 말이죠.

    그럼, 도움이 되셨나요?

    즐거운 시간되시길...

  • Profile
    이양규 1999.09.29 21:28
    재식님의 답변 감사합니다.

    많은 도움이 되었습니다.



    그런데 저는 2개의 테이블을 같이 사용해야 하는데

    재식님의 방법을(UpdateSQL을 사용하지 않는 방법)이용할 수는 없을까요?



    예를 들면

    customer.db, bank.db가 있는데 customer.db에는 간단한 신상자료가 있고

    bank.db에는 customer.db한명의 계좌번호를 저장합니다.



    customer.db <-------------------------> bank.db

    1 n

    1대 다 관계인데....

    customer.db의 내용은 dbEdit를 bank.db의 내용은 dbGrid를 사용하여

    표시를 해주고 dbGrid의 내용 즉, bank.db는 제가 질문 드렸든 방법

    (화살표키를 이용하여 자료를 편집, 추가)으로 관리하고 customer.db의 내용은

    버튼을 이용하여 편집명령을 받은 후에 자료를 입력하고 저장할 수 있도록

    하고 싶습니다.











  • Profile
    이재식 1999.09.30 18:04
    이양규 wrote:

    > 재식님의 답변 감사합니다.

    > 많은 도움이 되었습니다.

    >

    > 그런데 저는 2개의 테이블을 같이 사용해야 하는데

    > 재식님의 방법을(UpdateSQL을 사용하지 않는 방법)이용할 수는 없을까요?

    >

    > 예를 들면

    > customer.db, bank.db가 있는데 customer.db에는 간단한 신상자료가 있고

    > bank.db에는 customer.db한명의 계좌번호를 저장합니다.

    > 즉

    > customer.db <-------------------------> bank.db

    > 1 n

    > 1대 다 관계인데....

    > customer.db의 내용은 dbEdit를 bank.db의 내용은 dbGrid를 사용하여

    > 표시를 해주고 dbGrid의 내용 즉, bank.db는 제가 질문 드렸든 방법

    > (화살표키를 이용하여 자료를 편집, 추가)으로 관리하고 customer.db의 내용은

    > 버튼을 이용하여 편집명령을 받은 후에 자료를 입력하고 저장할 수 있도록

    > 하고 싶습니다.

    >



    안녕하세요?

    답장이 좀 늦었습니다.

    글을 읽어보니 다양한 선택의 방법이 있습니다.

    물론 편한 방법이 제일 좋죠.

    위에서 이야기를 내용을 UpdateSQL를 안쓰고 하려면

    가장쉬운 방법이 DBGrid와 DBEdit를 쓰지 말아야 합니다.

    즉,DBGrid대신 StringGrid 또는 Formula, SpreadSheet를 쓰면 되고요,

    DBEdit대신 Edit박스를 쓰면 되죠.

    이렇게 되면 물론 코딩이 많아지죠.



    그런데, 무조건 UpdateSQL를 쓰지 않는것은 또 효율성을 저하시키는

    경우도 있겠죠.

    위 경우는 UpdateSQL를 써도 상관없을 듯 합니다.

    이것을 쓰면 위에서 이야기한 내용은 특별히 여러 코딩없이

    쉽게 해결이 됩니다.

    참, UpdateSQL은 단일 테이블, 또는 C/S환경하에서는 가급적 쓰지

    않는것이 좋다는 것이지, 무고건 안좋다는 얘기는 아닙니다.

    다만, 이것을 쓸때 자동 수정, 입력, 삭제를 기대하지 말고

    이것은 사용자가 직접 코딩을 해주는 것이 좋고요,

    결론적으로 입력모드의 Dbgrid를 수정모드로 해야할 필요가 있을때 쓰기위한

    방법이라고 생각하면 됩니다.

    상황에 따라서는 오히려 이 컴포넌트를 안쓰니만 못한 경우도

    나올 수 있는데, 특별히 DBGrid내에서 사용자 입력 및 편집을

    받고 싶을때는 쓰는것도 괜찮습니다.



    아니면, Update이된 상용DBGrid가 많습니다.

    돈주고 사야하는데, 그럴 필요까지는 없겠죠.



    제가 위의 내용과 비슷한 것을 아주 간단히 샘플로 만들었는데,

    필요하시다면 연락주십시요.

    참, 작업의 편의성을 위해서 UpdateSQL를 이용했습니다.