Q&A

  • DB초보입니다....SQL문을 사용해 볼려고 하는데..안되네요
쿼리 컴퍼넌트를 이용해 SQL문을 사용해서

추가,삭제,수정...등을 해볼려고 하는데 잘 안되네요..

삭제의 경우

TXT := 'WHERE Name = "'+Query1.FieldByName('Name').AsString+'"';

With Query1 Do

begin

Active := False;

SQL.Clear;

SQL.Add(' Delete FROM data.db');

SQL.Add(TXT);

Active := True;

end;

이렇게 하면 현재 선택되어진넘이 삭제는 되지만 에러 메세지를 나타내고

그리드는 완존히 백지화(전부 지워짐)됩니다.

물론 프로그램을 다시 실행시키면 전에 삭제한건 없어지고 나머진 그대로 나와요..

에러도 안나오고 제대로 지우는 방법이 없을까요?...

지우는데서 이렇게 애를 태우니까 추가나 수정도 해볼 엄두가 나지 않는구요...

이제막 SQL에 대해서 배우는 중입니다.

이것 말고 다른문장이 필요한가요?...

추가, 수정도 Insert 나 Update 말고 사용하는 구문이 따로 있나요?..

가르켜 주세요..

그럼..



4  COMMENTS
  • Profile
    nilriri 2000.08.02 01:55
    샬롬!



    음... 디비에사용하신 쿼리를 딜리트 하시는데 그대로 사용하셨군요...

    그래서리....그 쿼리를 닫어붕께 그리드는 자연적으로 백지화 되야부렀을 것이고



    일케하시믄...



    그리드에 쓰신쿼리는 삭제하기전에 active := false 후에 true 하시거나

    refresh를 해줘도 될것이고



    삭제를 위한 쿼리를 또다른 쿼리를 생성하셔서 거기다가 딜리트 문을 담아서

    처리를 하시믄 되겠네요...



    > TXT := 'WHERE Name = "'+Query1.FieldByName('Name').AsString+'"';

    > With Query2 Do

    > begin

    > Query1.Active := False;

    Close;

    > SQL.Clear;

    > SQL.Add(' Delete FROM data.db');

    > SQL.Add(TXT);

    ExecSql;

    Close;

    > Query1.Active := True;

    > end;





    김종석 wrote:

    > 쿼리 컴퍼넌트를 이용해 SQL문을 사용해서

    > 추가,삭제,수정...등을 해볼려고 하는데 잘 안되네요..

    > 삭제의 경우

    > TXT := 'WHERE Name = "'+Query1.FieldByName('Name').AsString+'"';

    > With Query1 Do

    > begin

    > Active := False;

    > SQL.Clear;

    > SQL.Add(' Delete FROM data.db');

    > SQL.Add(TXT);

    > Active := True;

    > end;

    > 이렇게 하면 현재 선택되어진넘이 삭제는 되지만 에러 메세지를 나타내고

    > 그리드는 완존히 백지화(전부 지워짐)됩니다.

    > 물론 프로그램을 다시 실행시키면 전에 삭제한건 없어지고 나머진 그대로 나와요..

    > 에러도 안나오고 제대로 지우는 방법이 없을까요?...

    > 지우는데서 이렇게 애를 태우니까 추가나 수정도 해볼 엄두가 나지 않는구요...

    > 이제막 SQL에 대해서 배우는 중입니다.

    > 이것 말고 다른문장이 필요한가요?...

    > 추가, 수정도 Insert 나 Update 말고 사용하는 구문이 따로 있나요?..

    > 가르켜 주세요..

    > 그럼..

    >

  • Profile
    최석기 2000.08.02 01:46
    김종석 wrote:

    > 쿼리 컴퍼넌트를 이용해 SQL문을 사용해서

    > 추가,삭제,수정...등을 해볼려고 하는데 잘 안되네요..

    > 삭제의 경우

    > TXT := 'WHERE Name = "'+Query1.FieldByName('Name').AsString+'"';

    > With Query1 Do

    > begin

    > Active := False;

    > SQL.Clear;

    > SQL.Add(' Delete FROM data.db');

    > SQL.Add(TXT);

    > Active := True;

    > end;

    > 이렇게 하면 현재 선택되어진넘이 삭제는 되지만 에러 메세지를 나타내고

    > 그리드는 완존히 백지화(전부 지워짐)됩니다.

    > 물론 프로그램을 다시 실행시키면 전에 삭제한건 없어지고 나머진 그대로 나와요..

    > 에러도 안나오고 제대로 지우는 방법이 없을까요?...

    > 지우는데서 이렇게 애를 태우니까 추가나 수정도 해볼 엄두가 나지 않는구요...

    > 이제막 SQL에 대해서 배우는 중입니다.

    > 이것 말고 다른문장이 필요한가요?...

    > 추가, 수정도 Insert 나 Update 말고 사용하는 구문이 따로 있나요?..

    > 가르켜 주세요..

    > 그럼..

    >



    님 SQL문에서 SELECT 같은 넘은 결과를 넘겨 받을수 있는 반면에 Insert나 Delete나 Update는 단지 테이블에 조작만 하잖아요..



    그래서 사용 방식이 조금 틀립니다..

    님은 테이블 사용하듯이 하셨네요 ^^



    TXT := 'WHERE Name = "'+Query1.FieldByName('Name').AsString+'"';

    With Query1 Do

    begin

    CLOSE;

    SQL.Clear;

    SQL.Add(' Delete FROM data.db');

    SQL.Add(TXT);

    ExecSQL;

    end;



    Insert,Delete,Update 문 같은 것은 ExecSQL을 사용하시고요.

    Select문의 경우에는 Open 메쏘드를 사용하세요..



  • Profile
    김종석 2000.08.02 06:27
    삭제는 잘되는데요...삭제후 그리드가 공백으로 나와요..

    죄송해요...첨이라서

  • Profile
    hugehead 2000.08.02 06:53
    query를 두개 사용하세요.



    Query1에는 "SELECT 어쩌구 저쩌구"를 넣으시고, DataSource1 과 DBGrid에 연결시키세요.



    Query2는 버튼이든 뭣에든간에 이벤트에



    Query2.Close;

    Query1.Close;

    Query2.Clear;

    Query2.SQL.Add("Delete from 어쩌구 where 저쩌구 = " + Query1.FieldByName("거시기").AsString);

    Query2.ExecSQL;

    Query1.Open;



    물론 진짜로 그리드에 공백이 안 나오려면 위를 실행시키셔 레코드를 삭제하여도 Select문에서 가져오는 데이터가 존재해야겠지요. 홀라당 다 지워버리면 안 나오는건 당연하구요.







    김종석 wrote:

    > 삭제는 잘되는데요...삭제후 그리드가 공백으로 나와요..

    > 죄송해요...첨이라서