Q&A

  • QUERY를 사용해 데이타 삭제시 에러...ㅡ.ㅡ;;
QUERY1:CANNOT PERFORM THIS OPRATION ON AN OPEN DATASET!

이란 메세지가 나오네요



QUERY1.PREPARE;

query1.clOSE;

QUERY1.SQL.CLEAR;

query1.sql.add('delete from DESIGN where NAME=:KK');

query1.parambyname('KK').asstring:=edit1.text;

query1.post;



위의 소스와 같이 QUERY를 사용해서 등록된 사용자를 지우려고 했습니다.

EDIT1에 이름을 적구 버튼을 누르면 위의 소스가 실행이 되는겁니다.

그런데 맨위의 에러 메세지가 나오고 컴파일이 안되네요.

이유가 뭘까요?

고수님들의 조언을 기다리겠습니다.





3  COMMENTS
  • Profile
    초보자 2001.02.08 02:58
    바가지 wrote:

    > QUERY1:CANNOT PERFORM THIS OPRATION ON AN OPEN DATASET!

    > 이란 메세지가 나오네요

    >

    > QUERY1.PREPARE;

    > query1.clOSE;

    > QUERY1.SQL.CLEAR;

    > query1.sql.add('delete from DESIGN where NAME=:KK');

    > query1.parambyname('KK').asstring:=edit1.text;

    > query1.post;

    >

    > 위의 소스와 같이 QUERY를 사용해서 등록된 사용자를 지우려고 했습니다.

    > EDIT1에 이름을 적구 버튼을 누르면 위의 소스가 실행이 되는겁니다.

    > 그런데 맨위의 에러 메세지가 나오고 컴파일이 안되네요.

    > 이유가 뭘까요?

    > 고수님들의 조언을 기다리겠습니다.

    >

    >



    쿼리로 입력,수정,삭제를 할때에는..

    query1.post;<-요기를 ExecSql로 해줘야하는겁니다.(전 이렇게 알고 있거든요)



    Post할적엔 테이블사용시 쓰는거고요..

  • Profile
    김광섭 2001.02.08 02:48
    바가지 wrote:

    > QUERY1:CANNOT PERFORM THIS OPRATION ON AN OPEN DATASET!

    > 이란 메세지가 나오네요

    >

    > QUERY1.PREPARE;

    > query1.clOSE;

    > QUERY1.SQL.CLEAR;

    > query1.sql.add('delete from DESIGN where NAME=:KK');

    > query1.parambyname('KK').asstring:=edit1.text;

    > query1.post;

    >

    > 위의 소스와 같이 QUERY를 사용해서 등록된 사용자를 지우려고 했습니다.

    > EDIT1에 이름을 적구 버튼을 누르면 위의 소스가 실행이 되는겁니다.

    > 그런데 맨위의 에러 메세지가 나오고 컴파일이 안되네요.

    > 이유가 뭘까요?

    > 고수님들의 조언을 기다리겠습니다.

    >

    일반 쿼리 Select 문 외(Update or Delete)에서는 ExecSQL를 써요. ^^

    Query1.Open ==> query1.ExecSQL

  • Profile
    basser 2001.02.08 18:34
    델고수를 꿈꾸는 초봅니다.

    위의 분들이 답변을 해주셨는데, 참고하시라고 적어봅니다.



    Prepare 메쏘드는 SQL 실행전에 DB에 SQL의 최적화를 요구하는 것이죠.

    그리고, Query.Open 또는 Query.Close를 사용하는 것도 좋지만

    Query.Active := True 또는 Query.Active := False 를 사용하는 것이

    좋다고 하네요. 이유는 Open/Close시 Active를 True/False로 설정해서라는군요.



    그럼...





    김광섭 wrote:

    > 바가지 wrote:

    > > QUERY1:CANNOT PERFORM THIS OPRATION ON AN OPEN DATASET!

    > > 이란 메세지가 나오네요

    > >

    > > QUERY1.PREPARE; ---> 이 문장을 ExecSQL 앞에 적어주세요.

    > > query1.clOSE;



    QUERY1.UNPREPARE;



    > > QUERY1.SQL.CLEAR;

    > > query1.sql.add('delete from DESIGN where NAME=:KK');

    > > query1.parambyname('KK').asstring:=edit1.text;

    > > query1.post; ---> 여기엔 ExecSQL 로

    > >

    > > 위의 소스와 같이 QUERY를 사용해서 등록된 사용자를 지우려고 했습니다.

    > > EDIT1에 이름을 적구 버튼을 누르면 위의 소스가 실행이 되는겁니다.

    > > 그런데 맨위의 에러 메세지가 나오고 컴파일이 안되네요.

    > > 이유가 뭘까요?

    > > 고수님들의 조언을 기다리겠습니다.

    > >

    > 일반 쿼리 Select 문 외(Update or Delete)에서는 ExecSQL를 써요. ^^

    > Query1.Open ==> query1.ExecSQL