Q&A

  • SQL의 DELETE기능에서 에러 발생
초보적인 질문 하나 하게됐습니다.
SQL 기능을 이용해서 아래와 같이 Delete를 하려고 하는데
Data가 지워지긴 지워지는데
ENoResultSet  error가 발생하면서
'Error creating Cursor Handle'이라는 메시지가 뜹니다.
어느 부분을 수정해야 할까요?
(참고로 프로그램 압축파일을 첨부합니다)

  Search:='';
  Search:='Delete from "'+DBfile+'"';
  Search:=Search+' where ';
  Search:=Search+'("'+DBfile+'".RANK = :RANK)';

  Memo1.Lines.Add(Search);
  ShowMessage('Start');
  With Query1 do begin
    close;
    SQL.Clear;
    SQL.Add(Search);
    ParamByName('RANK').AsString := Rank;
    ExecSQL();
    Active:=true;
  end;
2  COMMENTS
  • Profile
    이강석 2010.02.03 19:05
    Active:=true;

    위 부분이 필요한가요?? 한번 빼보시죠..
  • Profile
    이용벽 2010.02.04 00:11
    감사합니다. 거짓말처럼 깨끗이 해결되네요.
    지금까지 SQL에는
    ...
    OpenDatabase;
    Active := true;

    위 두문장을 습관적으로 써왔었습니다.

    이번 SQL DELETE에서 문제가 생겼을 때 이 사이트에서 검색한 결과로
    OpenDatabase; 를 ExecSQL(); 로 바꾼 것인데
    원인은 Active:=true; 에 있었네요.
    혹시나 해서 Active:=true;를 빼고 OpenDatabase;를 써봤는데
    아무 동작도 하지 않는다는 걸 확인했습니다.

    이제 SQL DELETE에 있어서는

    With Query1 do begin
    Close;
    SQL.Clear;
    SQL.Add(Search);
    ParamByName('RANK').AsString := Rank;
    ExecSQL();
    end;

    이 형태가 표준이라는 걸 확실히 알았습니다.
    다시 한번 감사드리고
    혹시 같은 문제에 부딪치신 분들에게 도움이 되길 바랍니다.