Q&A

  • SQL의 DELETE나 UPDATE에 관한 질문입니다...
Primary Key 지정이 없는 경우의 DELETE나 UPDATE는 어떻게 해야하는지

궁금합니다.



보통의 Table은 DBGrid에서 레코드를 이동해서 선택된 레코드를 삭제하는데,

SQL의 경우는 현재의 레코드 위치를 알고 그 위치의 레코드를 삭제하거나,

갱신하려고 하는데, 방법좀 일러주시면 감사하겠습니다.





2  COMMENTS
  • Profile
    이승우 2000.08.13 19:42


    예를 들어 아래와 같이 teble 이 구성되어 있다면

    name type size key

    aaa string 1

    bbb string 2

    ccc string 10



    Delete-------------------------

    With Query1 do Begin

    Sql.add('Delete From Table_Name');

    Sql.add('Where aaa = :aaa');

    Parambyname('aaa').asstring := edit1.Text;

    Execsql;

    End;

    Update-------------------------

    With Query1 do Begin

    Sql.add('Update Table_Name');

    Sql.add('Set bbb = :bbb, ccc = :ccc');

    Sql.add('Where aaa = :aaa');

    Parambyname('aaa').asstring := edit1.Text;

    Parambyname('bbb').asstring := edit2.Text;

    Parambyname('ccc').asstring := edit3.Text;

    Execsql;

    End;



  • Profile
    김계성 2000.08.15 12:42
    이승우 wrote:

    >

    > 예를 들어 아래와 같이 teble 이 구성되어 있다면

    > name type size key

    > aaa string 1

    > bbb string 2

    > ccc string 10

    >

    > Delete-------------------------

    > With Query1 do Begin

    > Sql.add('Delete From Table_Name');

    > Sql.add('Where aaa = :aaa');

    > Parambyname('aaa').asstring := edit1.Text;

    > Execsql;

    > End;

    > Update-------------------------

    > With Query1 do Begin

    > Sql.add('Update Table_Name');

    > Sql.add('Set bbb = :bbb, ccc = :ccc');

    > Sql.add('Where aaa = :aaa');

    > Parambyname('aaa').asstring := edit1.Text;

    > Parambyname('bbb').asstring := edit2.Text;

    > Parambyname('ccc').asstring := edit3.Text;

    > Execsql;

    > End;

    >



    위와같이 답변을 주셨는데요...제가 좀 자세히 질문을 드려야 할것 같군여...

    일단. 저는 InterBase와 ISQL을 이용해서 프로그램 하구있구여.

    IBDataBase, IBTransaction컴퍼넌트를 이용해 서버의 데이타베이스에 접속하고,

    DBGrid에 DataSource와 IBDataSet을 연결해서 데이타의 모습을

    화면에 계속 보여주는 상탭니다..



    그런데 제가 앞선 질문에서 말했듯이, Primary Key를 사용하지 않고

    데이터를 선택적으로(즉, DBGrid상에서 레코드를 선택해서 선택한) 레코드를 삭제, 혹은

    갱신 작업을 하고 싶습니다.



    이승우님께서 주신 답변은 만일 aaa필드에 같은 값이 있으면 모두 한꺼번에 지워져

    버리는 결과가 나오게 되지여...ㅠ.ㅠ



    ex> Name Phone

    홍길동 123-4567

    홍서범 234-6789 <---- 동명이인인 이 데이터만을 수정, 삭제

    김길동 234-3498

    홍서범 767-0009



    결과적으로 저는 TTable 컴퍼넌트 처럼 자유로운 레코드 이동과 논리적으로 이동된

    레코드에서의 작업을 하고 싶은겁니다.



    델파이를 애용하시는 여러분의 고귀한 말씀을 기다립니다.