질문 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;
끝까지 읽어 주셔서 감사합니다.
이왕이면 답장까지 써주세요.
Delete(삭제), Post(적용), Cancel(취소), First(처음), Last(끝),
Prev(이전), Next(다음) 등등의 메소드를 가지고 있습니다.
따라서 데이터를 추가하려면
DataSet.Append나 DataSet.Insert
...
DataSet.Post
와 같이 기술하면 됩니다.
마찬가지로 수정이나 삭제도 동일합니다.
단 삭제후에는 Post메소드를 호출하지 않습니다.
질문하신대로 DBNavigator를 사용하지 않고 각 버튼의 기능을 사용하시려면
위의 메소드 중 적절한 것을 사용하면 됩니다.
아울러 데이터에 조작을 가할때는 항상 현 데이터셋의 상태를 감시하여
불필요한 조작이 가해지지 않도록 하는 것이 좋으며, Query의 경우
데이터의 변경을 위해서는 RequestLive프로퍼티를 True로 하여야
합니다. 물론 아시는 것이겠지만 Query는 경우에 따라
RequestLive프로퍼티가 제대로 작동하지 않을 수 있습니다.
이는 주로 조건절에 그룹핑을 하거나 했을 경우입니다.
뭐 자세한 것은 관련 책자를 참고하심이 좋을 듯 하네요.
그럼 20000...