Q&A

  • 마스터테이블의레코드삭제하면 디테일의레코드도 삭제되게못하나요?
Q&A 데이터 베이스 [2]번 페이지에 있는 질문을 작성한 강동희 입니다.



답변을 보고 해보았는데 잘 되지 않아서 이
2  COMMENTS
  • Profile
    송종석 2001.04.06 19:30
    마스터 1, 디테일 1인 경우입니다. 응용하세요

    마스터: Shop.db

    디테일: Trans.db

    연결필드: ShopNo



    procedure TfrmShop.bbtnDeleteClick(Sender: TObject);

    var

    strShopNo: ShortString;

    begin

    if MessageDlg('관련자료가 모두 삭제됩니다. 정말 지우시겠습니까?',

    mtConfirmation,[mbYes,mbNo],0) = mrYes then

    begin

    strShopNo:= tblShop.FieldByName('SHOPNO').AsString;

    qryDetail.Close;

    qryDetail.SQL.Clear;

    qryDetail.SQL.Text:= 'Delete From Trans Where ShopNo = '

    + QuotedStr(strShopNo);

    qryDetail.ExecSQL;

    qryDetail.Close;

    tblShop.Delete;

    end;

    end;



    주의: ShopNo필드가 문자형인 경우입니다. Integer형인 경우 세 줄을 바꾸어야 합니다.



    1) nShopNo: Integer;

    2) nShopNo:= tblShop.FieldByName('SHOPNO').AsInteger;

    3) qryDetail.SQL.Text:= 'Delete From Trans Where ShopNo = '

    + IntToStr(nShopNo);



  • Profile
    솔뫼마당 2001.04.05 02:23
    당연히 가능합니다.



    첫째 방법은 마스터와 디테일에 등록된 레코드를 조건절에 주어 삭제하면 됩니다.

    순서는 크게 상관이 없지만 통상적으로 디테일을 먼저 삭제하고 마스터를 삭제합니다.

    이것은 만약의 경우 DB 오류발생시 안전한 처리를 위한 것입니다. (RDBMS, XBASE 공히)



    둘째 방법은 RDBMS를 사용할 경우, 마스터테이블에 트리거를 생성하여

    마스터 테이블의 레코드 삭제를 콜하면 트리거가 디테일의 내용을 먼저 삭제하고

    마스터 레코드가 삭제되도록 합니다.



    강동희 wrote:

    > Q&A 데이터 베이스 [2]번 페이지에 있는 질문을 작성한 강동희 입니다.

    >

    > 답변을 보고 해보았는데 잘 되지 않아서 이