Q&A

  • ClientDataSet 에서 delete 를 호출할때 에러..
안녕하세요..

초보가.. 간단한 DB 관련 프로그램을 짜려니 힘이 드네여;;

환경은.. delphi 2009 + DB2 + dbExpress 구요..

SQLConnection + SQLDataSet + DataSetProvider + ClientDataSet + DataSource
입니다.




procedure TForm_D.SpeedButton1Click(Sender: TObject);
begin
  if (Edit3.Text='') or (Edit4.Text='') then
   begin
   ShowMessage('Port를 입력해 주세요!');
   exit;
   end;
  With Clientdataset1 do
   begin
   last;
   append;
   fieldbyname('EAI_SYS').AsString := '대외';
   fieldbyname('EAI_R_ADAPTERNAME').AsString := Edit1.Text;
   fieldbyname('EAI_R_MEMO').AsString := Edit2.Text;
   fieldbyname('EAI_R_TESTPORT').AsInteger := StrToInt(Edit3.Text);
   fieldbyname('EAI_R_REALPORT').AsInteger := StrToInt(Edit4.Text);
   fieldbyname('EAI_S_ADAPTERNAME').AsString := Edit1.Text;
   fieldbyname('EAI_S_MEMO').AsString := Edit2.Text;
   fieldbyname('EAI_S_TESTPORT').AsInteger := StrToInt(Edit5.Text);
   fieldbyname('EAI_S_REALPORT').AsInteger := StrToInt(Edit6.Text);
   post;
   ApplyUpdates(-1)
   end;

end;
//////////////// insert  부분인데... 이 부분은 이상없이 잘 됩니다. 실제 DB에 적용두 잘되구..


procedure TForm_D.SpeedButton2Click(Sender: TObject);
begin

   Clientdataset1.Delete;
   Clientdataset1.ApplyUpdates(0);

end;

///////////////// 여기가 문제인 Delete 부분입니다.

프로그램을 실행시켜서... 삭제버튼을 눌러보면
exception class EDatabaseError with message 'Update affected more than 1 record.
라고 뜹니다..

간단한 부분이라 생각했는데.. 왜 그런지.. ㅡㅜ
좀 살려주세요~
1  COMMENTS
  • Profile
    이현식 2010.10.14 01:12
    우선.. Post 호출후 AfterPost 이벤트에서 ApplyUpdate호출해 주시는게 좋구요.

    TADODataSet -> Fields Editor -> PK필드 선택 -> Provider Flags -> pfInUpdate, pfInWhere, pfInKey를 선택해주시고
    TDataSetProvider -> UpdateMode -> upWhereKeyOnly 선택해주세요.