Q&A

  • DBGrid에서 MultiSelect된 행 삭제하기
안녕하세요? 이중락 입니다.

DBGrid에서 MultiSelect된 행을 삭제하려 하는데 잘 안되네요.

어쩔때는 선택한 마지막행만 안지워지고 어쩔때는 몇개만 선택했는데도 모든 레코드를 삭제해 버립니다. T.T

델코와 여기의 Q&A란을 아무리 뒤져도 안나오고....

아래는 제대로 잘 안되는 소스 입니다.

한수 부탁드리겠습니다.

==================================================================================



if MessageDlg('선택된 모든 레코드를 삭제하시겠습니까?', mtWarning, [mbOk, mbCancel], 0) = mrOk then begin

with DBGrid1 do begin

DataSource.DataSet.DisableControls;

if SelectedRows.Count > 0 then begin

For i:=0 to SelectedRows.Count-1 do

if SelectedRows.Indexof(SelectedRows.Items[i]) > -1 then

DataSource.DataSet.Delete;

end;

DataSource.DataSet.EnableControls;

Query1.Active := False;

Query1.Active := True;

end;

end;



2  COMMENTS
  • Profile
    문홍철 2000.02.02 18:28
    이중락 wrote:

    > 안녕하세요? 이중락 입니다.

    > DBGrid에서 MultiSelect된 행을 삭제하려 하는데 잘 안되네요.

    > 어쩔때는 선택한 마지막행만 안지워지고 어쩔때는 몇개만 선택했는데도 모든 레코드를 삭제해 버립니다. T.T

    > 델코와 여기의 Q&A란을 아무리 뒤져도 안나오고....

    > 아래는 제대로 잘 안되는 소스 입니다.

    > 한수 부탁드리겠습니다.

    > ==================================================================================

    >

    > if MessageDlg('선택된 모든 레코드를 삭제하시겠습니까?', mtWarning, [mbOk, mbCancel], 0) = mrOk then begin

    > with DBGrid1 do begin

    > DataSource.DataSet.DisableControls;

    > if SelectedRows.Count > 0 then begin

    > For i:=0 to SelectedRows.Count-1 do

    > if SelectedRows.Indexof(SelectedRows.Items[i]) > -1 then

    > DataSource.DataSet.Delete;

    > end;

    > DataSource.DataSet.EnableControls;

    > Query1.Active := False;

    > Query1.Active := True;

    > end;

    > end;

    >



    DBGrid에서 선태한 레코드를 가리키는 SelectedRows는 문자열 String의

    집합이다. 그런데 이문자열은 특수문자열로 Pointer형을 문자화

    시킨겁니다.

    이정도면 단번에 DataSet의 GetBookmark난 GotoBookmark가 생각이

    나시는 분이 있을겁니다.

    여기서 DataSet의 GotoBookmark를 사용합니다.



    with self.dbgrdMain, self.qryMain do

    begin

    try DisabldControls

    for iCount := SelectedRows.Count-1 downto 0 to

    begin

    GotoBookmark(Pointer(SelecteRows.Items[iCount]));

    Delete;

    end;

    finally

    EnableControls;

    end;

    end;



    이렇게 하면 될것니다. List에 대한 삭제는 꼭 downto를

    사용하셔야 합니다. 레코드를 삭제하면 BookMark도 없어지기

    때문에 Up Count로 하면 Access 어쩌고저쩌고 할것니다.

    뭔가 이상하면 Mail 주세요...

  • Profile
    구창민 2000.02.02 05:35
    이중락 wrote:

    > 안녕하세요? 이중락 입니다.

    > DBGrid에서 MultiSelect된 행을 삭제하려 하는데 잘 안되네요.

    > 어쩔때는 선택한 마지막행만 안지워지고 어쩔때는 몇개만 선택했는데도 모든 레코드를 삭제해 버립니다. T.T

    > 델코와 여기의 Q&A란을 아무리 뒤져도 안나오고....

    > 아래는 제대로 잘 안되는 소스 입니다.

    > 한수 부탁드리겠습니다.

    > ==================================================================================

    >

    > if MessageDlg('선택된 모든 레코드를 삭제하시겠습니까?', mtWarning, [mbOk, mbCancel], 0) = mrOk then begin

    > with DBGrid1 do begin

    > DataSource.DataSet.DisableControls;

    > if SelectedRows.Count > 0 then begin

    > For i:=0 to SelectedRows.Count-1 do

    > if SelectedRows.Indexof(SelectedRows.Items[i]) > -1 then

    > DataSource.DataSet.Delete;

    > end;

    > DataSource.DataSet.EnableControls;

    > Query1.Active := False;

    > Query1.Active := True;

    > end;

    > end;

    >



    삭제는 따로 'Delete 테이블명 조건' 형태의 쿼리를 던지셔서

    일괄 삭제하시는 편이 더 좋을 것 같습니다만..

    아래 처럼 하시면 일단 삭제되긴 합니다.

    그렇지만, 좋은 방법이 아닌듯 합니다.



    var

    I: Integer;

    begin

    with Table1, DBGrid1 do

    begin

    DisableControls;

    for I := 0 to SelectedRows.Count - 1 do

    begin

    Bookmark := SelectedRows[I];

    Delete;

    end;

    EnableControls;

    end;

    end;



    그럼, 즐거운 프로그래밍 되시길~

    • 김동근
    • 2000.02.02 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.02 06:27
      김동근 wrote: > BORDBK50.dll 파일좀 압축해 보내주세요 > 이게시판은 첨부파일이 추가되지 않습니...
    • 초보왕
    • 2000.02.02 04:52
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 양병규
      2000.02.02 09:41
      만약 밑에 있는 Edit가 DBEdit이고 DBEdit와 DBGrid의 DataSource가 같은 놈이라면 절대 그런일은 없습니다...
    • 김미라
    • 2000.02.02 04:21
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2000.02.02 06:25
      김미라 wrote: > 안녕하세요? 고생이 많으시네요. > 제가 요즘 디렉토리 속성을 변경하는 프로그램을 만...
    • 오명석
    • 2000.02.02 04:13
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 김순호
      2000.02.02 18:17
      오명석 wrote: > 자꾸 질문만 올려서 미안합니다. > > TComm을 구해 스캐너(시리얼)로 읽으니 Hex값이 ...
    • 이중락
      2000.02.02 04:29
      오명석 wrote: > 자꾸 질문만 올려서 미안합니다. > > TComm을 구해 스캐너(시리얼)로 읽으니 Hex값이 ...
    • 이중락
      2000.02.02 04:31
      COME__ON wrote: > 델파이하고 오라클이 모에요? > 델파이는 S/W를 개발하는 언어(RAD TOOL)이고 오...
    • 이중락
    • 2000.02.02 04:11
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 문홍철
      2000.02.02 18:28
      이중락 wrote: > 안녕하세요? 이중락 입니다. > DBGrid에서 MultiSelect된 행을 삭제하려 하는데 잘 안되...
    • 구창민
      2000.02.02 05:35
      이중락 wrote: > 안녕하세요? 이중락 입니다. > DBGrid에서 MultiSelect된 행을 삭제하려 하는데 잘 안되...
    • 민성기
      2000.02.02 15:36
      성병규 wrote: > 폼상에 이미지를 올려놓았을 때, 이미지만 나타나고 폼이 나타나지 않게 할려면은 어떻게...
    • 양병규
      2000.02.02 09:48
      아마도 질문하신 내용으로 봐서 스프레시폼같은걸 맹그시는것 같은디... 질문하신 내용이 그러니깐... ...
    • 이중락
      2000.02.02 04:15
      성병규 wrote: > 폼상에 이미지를 올려놓았을 때, 이미지만 나타나고 폼이 나타나지 않게 할려면은 어떻게...
    • 이충기
    • 2000.02.02 03:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박철우
      2000.02.04 04:13
      델파이4를 사용하신다면 datadump라는 것이 있습니다. 일단은 기존의 데이터를 새로 인스톨한 프로그램의 ...
    • 이중락
      2000.02.02 04:23
      이충기 wrote: > 안녕하세요? > > 델파이로 작성된 프로그램을 사용하게 되었는데 기존 쓰던 자료를 사...
    • 김기수
    • 2000.02.02 03:42
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유 효종
      2000.02.02 18:37
      김기수 wrote: > 프로그램 실행상태에서 > > SpeedButton1 ~ SpeedButton18 까지 > > SpeedButton...
    • 하늘소
    • 2000.02.02 03:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유 효종
      2000.02.02 18:44
      하늘소 wrote: > > 안녕하십니까.. > 아쉬울때만 찾아오는군요. 다른분들에게 도움도 못드리고. >...
    • 최재원
    • 2000.02.02 03:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 클라라
      2000.02.02 10:15
      최재원 wrote: > 수고 하십니다. > > 제가 지금 작업하고 있는 프로그램이 특정 디렉토리의 > > tx...
    • 최재원
      2000.02.02 22:41
      > 경상도 화이팅! 먼저 질문 답해주신 것 감사합니다.. 근데 한번 더 귀찮게 해드려야 겠는데요, ...
    • 최재원
      2000.02.02 23:30
      그냥 어찌 하다가 해결을 하긴 했습니다. txt파일은 여전히 첫 줄이 비는데요, 고놈은 나두고 db변환...
    • 초보왕
    • 2000.02.02 02:38
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유 효종
      2000.02.02 02:46
      초보왕 wrote: > 1.dbgrid에서 엔터키로 필드이동하는 방법 > 2. dbgrid에서 직접입력을 하다가 특정필드...
    • 송수현
    • 2000.02.02 02:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 유 효종
      2000.02.02 02:42
      송수현 wrote: > 안녕하세요 꾸벅~! > program ct1; > > uses > Forms, > test1 in 'test1.pas'...
    • 유 효종
      2000.02.02 02:48
      손규만 wrote: > [질문]Delphi 4.0에서 사용한 컴포넌트를 Delphi 5.0에 사용하는데 에러가 나는데 이것을...
    • 손규만
      2000.02.02 02:55
      유효종님 감사드립니다. 그럼 한가지 더 묻겠습니다. 제가 소스는 가지고 있는데 어떻게 해야 되는지 초...
    • 유 효종
      2000.02.02 03:05
      손규만 wrote: > 유효종님 감사드립니다. > 그럼 한가지 더 묻겠습니다. > 제가 소스는 가지고 있는데 ...
    • 델초
    • 2000.02.02 01:12
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 델초
      2000.02.02 02:18
      첫번째 질문후 여기저기pc에서 테스트를 해 보았는데...참 이상하네요 1. 델파이, MSSQL-client 가 설치...
    • 이영수
      2000.02.07 09:15
      음. 어떻게 하신지는 모르겠지만. 우선 MSSQL Client 용을 Client PC 에 설치하시고. Delphi 의 BDE 에...
    • 델초
      2000.02.09 01:54
      우선 답변에 감사드립니다. 일단은 제가 실수를 한것 같습니다. DATABASE 오브젝트중 ALIAS와 DATAB...