Q&A

  • ADOQuery에서 Delete가 되질 않습니다..
If ADOQuery1.State in [dsBrowse] then
  Begin
    If MessageDlg( '현재 자료를 삭제하시겠습니까?',mtConfirmation, [mbYes, mbNo], 0 ) = mrYes then
    begin
      ADOQuery1.Delete;
{      sSql := ADOQuery1.fieldbyname('C001').AsString;
      ADOQuery1.SQL.Clear;
      sSql := 'Delete from DC0001 WHERE C001 = ''' + ADOQuery1.fieldbyname('C001').AsString + '''';
      ADOQuery1.SQL.Add(sSql);
      ADOQuery1.ExecSQL;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      sSql := 'SELECT A.C001 AS C001, A.C002 AS C002, A.C003 AS C003, A.C004 AS C004, A.C005 AS C005, B.C002 AS R001  FROM DC0001 A ';
      sSql := sSql + 'LEFT OUTER JOIN DC0004 B ON A.C003 = B.C001 ORDER BY A.C001';
      ADOQuery1.SQL.Add(sSql);
      ADOQuery1.Open;
}
    end;
  end;

위와 같이 DataSet.Delete를 하면 '업데이트나 새로 고치는 데 필요한 키열 정보가 부족합니다.'라고 나오면서 삭제 되질 않습니다..

또한 주석처리한 부분은 쿼리로 지우려고 했는데...

분명

sSql := ADOQuery1.fieldbyname('C001').AsString;

하면 잘 받아지는 값이

sSql := 'Delete from DC0001 WHERE C001 = ''' + ADOQuery1.fieldbyname('C001').AsString + '''';

이렇게 하는까 값이 비어 있네요^^

하루종일 헤매다가 답답해서 올립니다..!!!!

참고로 JOIN하지 않은 단독테이블에서는 잘 동작합니다..

근데 조인만 하면 안되네요..!!!!!!!!!!

답변 좀 부탁드립니다..!!!!!!!


즐프하세요^^
2  COMMENTS
  • Profile
    남경만 2005.03.28 18:03
    저도 이래요.
    ADODataSet.Delete 를 하면 저도 저런 메시지가 떠서...
    4개 테이블을 조인했는데... 하나씩 지우려 하니까...
    '업데이트나 새로 고치는 데 필요한 키열 정보가 부족합니다.' 라는 메시지...
    그래서 PK를 물고 테이블을 하나씩 지우려 하니까..
    한 테이블 지우고 나면 2번째 테이블부터는 ADODataSet에서는 어쩌구 저쩌구...
    지금 집이 아니라서 메시지 잘 기억이 안 나네요...
    그래서 생각한 것이 ADOQuery를 쓸까 했는데...
    역시나 저런 문제에 부딪히다니....
    저도 어여 Delete를 해야하는데...
    여러분 좀 도와주세요.. ㅠ,.ㅠ

    다음에는 테이블을 조인 안하고 ADO하나에 한 테이블씩 불러서.. A테이블을 검색하고..
    A테이블 값으로 B테이블을 검색학..
    이런식으로 해야것네요.. 그래야 좀 속편하게 하지 않을까?





  • Profile
    남경만 2005.03.30 02:31
    해결되었네요..
    문제는 프로그램이 아니고.. 디비쪽에 있었습니다..
    외래키를 잘 못 주는 바람에...
    중복이 되어 두번째 삭제시 에러가 발생했네요...
    중복이 안되게 데이터를 입력하고 테스트하면 이상이 없고...
    처음에 디비설계를 잘 못 해서.. 이렇게 고생하네요... ^^
    그나저나 insert는 왜 안되는지.. ㅡ,.ㅡ