Q&A

  • query와 updateSQL를 이용하여 dbgrid에서 입력하는방법좀...
고수님 안녕하세요 김인수입니다

제가 질답게시판에서 알아본결과 dbgrid에서 자료를 입력하는 방법은
두가지가 있다고 읽었습니다 아래와 같이요
근대 저는 잘안되더군요 문제는 아래와 같습니다

1. query1 컴퍼넌트와 updateSQL를 이용하여 디비그리드에서
  직접입력하는 방법입니다

   1. query1의 UpdateObject란 프로퍼티에 UpdateSQL컴퍼넌트연결
   2. CashedUpdate란 부분에 True로 놓으면 테이블과 똑같이 사용가능.
   3. 저장시 query1.Post;
             query1.ApplyUpdates;
   4. 디비그리드에서 옵션부분에서 dgediting을 true로 했구요
      디비그리드에서 각 컬럼을 readOnly를 false로 했습니다

   이렇게 했거든요..?
   근대 3처럼 저장시에 에라가 아래와 같이 나는군요

  "NO SQL Statement Available"


   글구 어떤 고수님께서 쓰신것을 보면 query의 requestlive속성를
   true로 놓으면 insert가 된다고 하는데 그렇게 할경우는
   에라메세지가 아래처럼 나더군요

   "Table or view does not exist" 라구 뜨너군요


   도저히 어떻해 해야할지 모르겠어요
   나의 영원한 스승이시며 나의 보배이신 고수님 도와주세요 ㅜ.ㅜ
   뭐가 문제인가요..?  어떻하면 좋죠...?
  
   디비그리드에서 옵션부분에서 dgediting을 true로 했구요
   디비그리드에서 각 컬럼을 readOnly를 false로 했습니다




2. Table1 컴퍼넌트를 이용할경우
  테이블과 디비그리드를 연결하고 디비그리드의 옵션부분의 Edit를 True로
  설정하여 사용하면 디비그리드에 직접입력가능하더라구요
  
  근대 문제가 있습니다
  dbgrid에서 자료를 수정해서 입력하고 저장하면
  저장되고난후 자기맘대로 소트가 되서 dbgrid에 뿌려지더군요
  그러면 안되거든요
  어떻게 하면 dbgrid에서 테이블컴퍼넌트를 사용시에 제가 원하는 대로 자료를
  뿌리도록 할수 있을까요..?

  제발좀 알려주세요 고수님
  항상 저는 고수님의 도움만 받아 너무너무 죄송합니다
  저는 항상 항상 고수님께 감사드립니다.
  도와주실꺼죠..?
  기다릴깨요... 오늘 늦게까지요....
2  COMMENTS
  • Profile
    데빠이 2002.01.26 22:16
    혹시여...
    query 컴포넌트의 sql property에 쿼리문을 넣으셨나염?
    글구, updatesql 컴포넌트를 더블클릭하시거나 프로퍼티에보면 insert, delete, modify sql 이 있는데 이들 각각에 문장이 작성되어 있는지
    궁금하네여...아님, updatesql 을  더블클릭하셔서 키가되는 필드와
    업데이트 되어야하는 필드를 선택하신후에 제너레이트 에스큐엘
    눌러 각각의 쿼리문을 확인하신후에 함 해보심 어떨런지...
    지금 제가 데빠이를 실행시키지 않아서 감감하네여.. ^__________^

    굴구 테이블 컴포넌트에서 직접 하는건...저도 요즘 그넘이 자동 소트
    되는것 때문에 골치썩고 있담돠...계속 자료 수집중이지만...
    혹시 알고 계심 저도 좀... ^^

    허접하지만, 도움이 되셨길 바라구여..
    즐건 주말되세여...

  • Profile
    김인수 2002.01.26 23:13
    안녕하세요 답변 대단히 감사합니다
    지적하신곳을 꼭확인해서 체크하겠습니다



    이 질문에 대해서는....
    저는 아직 초보라서 고수님들이 가르침이 있어도
    소화를 못해서 고수님들이 적어준것을 그대로 커피해서 아래에 적어
    보겠습니다



    ##########################################
    최도석 고수님의 답변입니다
    답을 달기는 처음인 듯합니다.
    쿼리로 입력하는 것은 테이블의 내용중 필터링등을 했을 경우에 쓰이고
    그 사용법도 약간 까다롭습니다.(3일정도 헤매다가 이제는 터득하였음.)

    단지 디비그리드에서 자료를 입력하기 위해서라면 테이블을 이용하는 것이
    쉽습니다.
    자료가 입력된 위치에 있지 않고 정렬이 되는 것은 인덱스때문입니다.
    사용자가 따로 인덱스를 지정하지 않는 한, 델파이는 데이타베이스 테이블을 만들때에 프라이머리키로 지정된 필드에 따라 정렬하도록 되어 있습니다.
    따라서 프라이머리키나 지정 인덱스를 살펴 보시길 바랍니다
    ###########################################
    박후선 고수님께서 알려준 답변입니다
    테이블은 기본적으로 항상 소팅이 됩니다. 따라서 막을 방법은 사실상 없지만 pimary key를 포함해서 키를 하나도 만들지 않으면 소팅이 되지는 않습니다. 하지만 이 방법은 SQL 구문에서의 업데이트는 전혀 불가능하게 합니다. primary key가 없으므로 어디를 업데이트해야할 지를 모르는것입니다. TTable만을 사용한다고 가정할 경우 가능한 방법입니다.

    따라서 바로 바로 소팅이 되지 않는 방법은 Query와 UpdateSQL을 이용하는 방법이 됩니다만, 다시 Open하면 어차피 소트는 이루어질 것입니다. order by를 걸지 않는다고 해결되지 않습니다. order by를 걸지 않으면 어떤게 먼저 나올지 아무도 모르니까요.
    ############################################

    물론 저는 개인적으로 query와UpdateSQL를 사용했구 소트부분은
    query 컴퍼넌트의 이벤트 onchange를 이용해서 원하는 형식으로 소트를
    했습니다...이게 제가 가지고 있는 전부입니다
    어떻게든 도움을 드리고 싶지만.....제가 워낙 실력이 부족해서...

    암튼 답변 정말 감사드립니다
    저에겐 많은 도움이 되었습니다
    그럼 안녕히 계세요