Q&A

  • Q] delete와 insert기능을 구현하고 싶은데요...
질문 1] DB Navigator의 insert(+) 와 delete(-) 를 이용하지 않고

직접 그 기능을 구현하려면 어떻게 해야 하나요?



질문 2] DB Navigator의 각각의 button을 직접 누르지 않고 First나 Next

처럼Insert나 Delete도 실행시킬 수 있나요?



* source 구성



- DataModule - Query1 : query 정의

- DataSource1 : Query1과 연관된 data source

- UpdateSQL1 : Query1에 정의된 table에 대한

Delete, Insert 와 ModifySQL 정의



- Form1 - DBGrid1 : DataSource1을 Datasource로 갖는 DBGrid

- 삭제버튼 : !!! 요걸 눌렀을 때 DBGrid의 current row를

삭제하고 싶어라~



요걸 눌렀을 때 DataSource1의

OnDataChange 의 usDeleted

효과를 주기위해 아래와 같이 써줬는데

error가 나더군요.



UpdateSQL1.SetParams(ukDelete);

UpdateSQL1.ExecSQL(ukDelete);



이렇게 하면 안된는 건가요?

또, Query1의 UpdateStatus를 강제적으로

ukDelete로 바꿔보면 될까 해서



Query1.UpdateStatus := usDeleted;



라고 썼더니 또 error가 나더라구요.



이렇게 coding하는게 아닌데 엉뚱한 걸

가지고 헤매는 건가요?



왕초보 한번 도와주세요. please~ ^ ^;;



- 입력버튼 : !!! 요걸 눌렀을때 DBGrid의 new row를

display하고 싶다.



* 현재 구현되어 있는 상태



- DataSource1의 OnDataChange event에 UpdataStatus에 따라 해당 SQL을

실행하라는 code 기술되어 있음.



procedure TForm1.DataSource1DataChange(Sender: TObject; Field:

TField);

begin

with Query1 do begin

case UpdateStatus of

usModified: begin

UpdateSQL1.SetParams(ukModify);

UpdateSQL1.ExecSQL(ukModify);

end;



usInserted : begin

UpdateSQL1.SetParams(ukInsert);

UpdateSQL1.ExecSQL(ukInsert);

end;



usDeleted : begin

UpdateSQL1.SetParams(ukDelete);

UpdateSQL1.ExecSQL(ukDelete);

end;

end;

end;

end;



끝까지 읽어 주셔서 감사합니다.

이왕이면 답장까지 써주세요.







1  COMMENTS
  • Profile
    유도삼 1999.11.23 03:58
    델파이의 TDataSet(Table, Query)은 Append(추가), Insert(삽입), Edit(수정),

    Delete(삭제), Post(적용), Cancel(취소), First(처음), Last(끝),

    Prev(이전), Next(다음) 등등의 메소드를 가지고 있습니다.

    따라서 데이터를 추가하려면

    DataSet.Append나 DataSet.Insert

    ...

    DataSet.Post

    와 같이 기술하면 됩니다.

    마찬가지로 수정이나 삭제도 동일합니다.

    단 삭제후에는 Post메소드를 호출하지 않습니다.



    질문하신대로 DBNavigator를 사용하지 않고 각 버튼의 기능을 사용하시려면

    위의 메소드 중 적절한 것을 사용하면 됩니다.



    아울러 데이터에 조작을 가할때는 항상 현 데이터셋의 상태를 감시하여

    불필요한 조작이 가해지지 않도록 하는 것이 좋으며, Query의 경우

    데이터의 변경을 위해서는 RequestLive프로퍼티를 True로 하여야

    합니다. 물론 아시는 것이겠지만 Query는 경우에 따라

    RequestLive프로퍼티가 제대로 작동하지 않을 수 있습니다.

    이는 주로 조건절에 그룹핑을 하거나 했을 경우입니다.

    뭐 자세한 것은 관련 책자를 참고하심이 좋을 듯 하네요.



    그럼 20000...