Q&A

  • DBGrid 에서 선택한 레코드삭제가 안됩니다.
안녕하세요.. 흐미.. 이거땜시 오늘 시간이 다가네요.. 움니.. 저녁도 안직 안먹었습니다.



본론부터 말씀드리겠습니다. Database, Datasource, Query, DBGrid로 해서 선택한 레코드를 찾아서 지우는것입니다.



소스는 다음과 같습니다. 근데 절대 안지워지고 SQL커서만 한참을 기다렸다 꿈쩍도 안합니다.

참고(Window2000, MSSQL NetworkDB입니다 ODBC 로연결해서 잘붙습니다)



// 선택한 레코드를 삭제한다.

procedure TForm1.DeleteBtnClick(Sender: TObject);

var

i: Integer;

MsgBuff: String;

TempSEQNO: String;

DeleteSQL: String;

begin



if( DBGrid.SelectedRows.Count = 0 )then begin

Exit;

end;



MsgBuff := '선택하신 '+ IntToStr(DBGrid.SelectedRows.Count)+'개의 레코드를 삭제하시겠습니까?';

if Application.MessageBox(PChar(MsgBuff),'경고', MB_OKCANCEL ) = IDOK then begin



DeleteSQL := 'DELETE FROM MASTER WHERE SEQNO IN (';

for i:=0 to DBGrid.SelectedRows.Count-1 do begin

DBGrid.DataSource.DataSet.GotoBookmark(pointer(DBGrid.SelectedRows.Items[i]));

TempSEQNO := Query.FieldByName('SEQNO').AsString;



if(i = DBGrid.SelectedRows.Count-1 )then

DeleteSQL := DeleteSQL + '''' + TempSEQNO + ''')'

else

DeleteSQL := DeleteSQL + '''' + TempSEQNO + ''',';

end;

end;



DBGrid.SelectedRows.Delete;



Query.Close;

Query.SQL.Clear;

Query.SQL.Add(DeleteSQL); // 요기까지는 됩니다.

Query.ExecSQL; // 이눔의 자슥이 도저히 꿈쩍도 안혀요... T_T

Query.CommitUpdates;



Query.SQL.Clear;

Query.SQL.Add(FindSQL); // 처음 목록을 보여주는 SQL을 다시 실행시킵니다.

Query.Open;



end;

1  COMMENTS
  • Profile
    nilriri 2000.11.21 18:39
    DBGrid.SelectedRows.Delete; <-- 이건 없어도 되지 않나요?

    다른건 이상이 없어 보이는데...

    정확히 알지도 못하면서리..지송^.^~





    최현수 wrote:

    > 안녕하세요.. 흐미.. 이거땜시 오늘 시간이 다가네요.. 움니.. 저녁도 안직 안먹었습니다.

    >

    > 본론부터 말씀드리겠습니다. Database, Datasource, Query, DBGrid로 해서 선택한 레코드를 찾아서 지우는것입니다.

    >

    > 소스는 다음과 같습니다. 근데 절대 안지워지고 SQL커서만 한참을 기다렸다 꿈쩍도 안합니다.

    > 참고(Window2000, MSSQL NetworkDB입니다 ODBC 로연결해서 잘붙습니다)

    >

    > // 선택한 레코드를 삭제한다.

    > procedure TForm1.DeleteBtnClick(Sender: TObject);

    > var

    > i: Integer;

    > MsgBuff: String;

    > TempSEQNO: String;

    > DeleteSQL: String;

    > begin

    >

    > if( DBGrid.SelectedRows.Count = 0 )then begin

    > Exit;

    > end;

    >

    > MsgBuff := '선택하신 '+ IntToStr(DBGrid.SelectedRows.Count)+'개의 레코드를 삭제하시겠습니까?';

    > if Application.MessageBox(PChar(MsgBuff),'경고', MB_OKCANCEL ) = IDOK then begin

    >

    > DeleteSQL := 'DELETE FROM MASTER WHERE SEQNO IN (';

    > for i:=0 to DBGrid.SelectedRows.Count-1 do begin

    > DBGrid.DataSource.DataSet.GotoBookmark(pointer(DBGrid.SelectedRows.Items[i]));

    > TempSEQNO := Query.FieldByName('SEQNO').AsString;

    >

    > if(i = DBGrid.SelectedRows.Count-1 )then

    > DeleteSQL := DeleteSQL + '''' + TempSEQNO + ''')'

    > else

    > DeleteSQL := DeleteSQL + '''' + TempSEQNO + ''',';

    > end;

    > end;

    >

    > DBGrid.SelectedRows.Delete;

    >

    > Query.Close;

    > Query.SQL.Clear;

    > Query.SQL.Add(DeleteSQL); // 요기까지는 됩니다.

    > Query.ExecSQL; // 이눔의 자슥이 도저히 꿈쩍도 안혀요... T_T

    > Query.CommitUpdates;

    >

    > Query.SQL.Clear;

    > Query.SQL.Add(FindSQL); // 처음 목록을 보여주는 SQL을 다시 실행시킵니다.

    > Query.Open;

    >

    > end;