Q&A

  • ListView Caption 랑 DB랑 비교해서 DB에서 삭제 할수 있나요.
안녕하세요..!!고수님들..!!

다름이 아니오라..!! 제가 구현 할려고 하는게..!!

조회버튼을 누르면 저장된 DB의 내용이 ListView에 부려집니다..!!

여기서 ListView에는 Checkd 옵션을 프로퍼티에서 주었구요..!!

ListView에 DB의 내용이 다 조회되었을때...

자기가 삭제하고픈 ListView 에 check 옵션을 체크하고 삭제 버튼을 누르면

리스트뷰에서도 삭제되고 DB에서도 삭제시키려 합니다..!!

그냥 리스트뷰에서 선택된 부분만 삭제시키는 것은 아래와 같이 해결됬는데..

     for i := 0 to ListView1.Items.Count-1 do
     begin
         if ListView1.Items[i].Checked then
            ListView1.Items.Delete(i);
     end;

이걸 DB내용까지 적용시켜 DB랑 비교하여 삭제하려 하니 DB의 맨처음꺼만

삭제가 되던군요..!! 아무래도 제가 ListView의 Check 내용과  DB의 내용을

비교를 못한거 같습니다..!!

고수님들께서 보시고 이런 방법이 있으시면 조언을 주시기 바랍니다..!!

혹. 내용이 부족하면 보충 설명 더 하겠습니다..!!

고수님들의 많은 관심 부탁드리겠습니다..!!

여지껏 델 초보였습다..^__^
3  COMMENTS
  • Profile
    이경규 2002.05.15 21:27
    SQL의 DELETE 문을 사용하세요.
    # Delete 문
      형식) Delete
            From 테이블명
            Where 조건;

      예제) Delete from juso where name= 리스트뷰 의 Caption

    물론, Caption 은 Key 값이어야 겠지요?
  • Profile
    최수림 2002.05.15 22:05
    아래와 같이 DB 삭제 따로 ListView 삭제 따로..했거든요..!!

    그러니 당연히..리스트 뷰에서 선택한 DB가 같이 삭제가 안되지요..1!^^

    이걸 잘 어떻게..혼합을 하면 될거 같은데..!!ㅜ.ㅜ

    고수님께서 어떻게 도움을 주시면 안되겠습니까...?

    sql문을 쓰는데..많이 헷갈리군요..!! 아직 체계가 안잡혀서 인가..ㅜ.ㅜ

         if TestLog.RecordCount <> 0 then
         begin
            ret_msg := MessageDlg(TestLog['Relay_IP'] + '삭제하시겠습니까 ?',
                                                    mtWarning, [mbYes, mbNo], 0);
            if ret_msg = mrYes then
            begin

               TestLog.Delete;

            end
            else
              Application.MessageBox('삭제가 취소 되었습니다.', '삭제취소', MB_OK);
         end
         else
           Application.MessageBox('삭제할 자료가 없습니다.', '삭제취소', MB_OK);


         for i := 0 to ListView1.Items.Count-1 do
         begin
             if ListView1.Items[i].Checked then
                ListView1.Items.Delete(i);
         end;

  • Profile
    이경규 2002.05.15 22:36

    아래 처럼 바꿔보세요.

               begin
                  DeleteMyRecord(리스트뷰의 캡션값);
              end;

    사용자 정의 함수  DeleteMyRecord(변수) 를 만드시구요
    begin
      with Query1 do
      begin
         close; sql.clear;
        sql.add('Delete From TableName Where KeyFieldName = ' + 변수);
        execSql;
      end;
    end;

    그럼 리스트 뷰와 동시 삭제 되겠지요.
    예외처리를 하고 싶으시면 사용자정의 함수에 try 문을 넣으시고
    반환값을 Boolean 으로 하신후에 False 로 넘어오면 리스트뷰
    값도 삭제하지 못하게 만든다면 더욱 세밀해지겠지요.