Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[13508] Re:dbexpress 다중테이블 수정 도움 부탁드립니다.
손덕진 [sakpung] 2154 읽음    2010-12-21 10:41
tdatasetprovider에서 ongettablename event가 발생 한다면
onbeforeupdaterecord event도 같이 발생을 했을 것입니다.
그 event에서 작업을 진행 하면 됨니다.

해당 event의 parameter를 보면
sourceds : 원본 dataset내용
deltads : 변경된 dataset의 내용
updatekind : 작업된 내용(insert, update, delete중 하나)
applied : 적용 했는지 여부 반환
입니다.

작업 방식은 updatekind의 값이 뭐냐에 따라 db에 해당 query를 실행 시키면 되는 것입니다.

case updatekind of
   ukmodify : // 수정 작업
      begin
         // table이 2개 이니까 query문을 2번 실행 시켜야 합니다.
         // 참고로 key에 대한 값은 sourceds에서 fieldbyname으로 해당 값을 찾을수 있고
         // 변경된 값은 deltads에서 fieldbyname으로 찾을수 있습니다.
        
         applied := true;  // 적용 완료
      end;
   ukinsert :  ; // 삽입작업
     begin
         applied := true;  // 적용 완료
     end;
   ukdelete : ; // 삭제 작업
     begin
         applied := true;  // 적용 완료
     end;
end;


나머지 내용은 modify와 비슷 합니다.
table a와 table b에 대해 query문을 각각 만들어 실행 하면 됨니다.



db2 님이 쓰신 글 :
: sqlconnection -> sqlquery -> datasetprovider -> clientdataset -> datasource -> dbgrid 로 연결후 수정/삭제/입력 후 저장하는 샘플 제작중입니다.
:
: sqlquery에 단일테이블 select 에 대해서는 잘 되는데 테이블 조인후 특정테이블의 값만 db에 반영하려고 하면 어떻게 해야 하는지요.
:
:
: 여기저기 검색한 결과
:
: 1. sqlquery의 필드에 대하여 Providerflag를 설정
:
: 2. datasetprovider의 ongettablename 이벤트에 수정할 테이블명 지정하고 applyupdate하면 될 것 같은데
: 에러메시지도 없고 db에 반영이 안됩니다.
:
:
:
: //sqlquery의 sql문
:
: select b.name,a.*
: from table1 a,
:        table2 b
: where a.key=b.key
:
:
: //db반영
: procedure TForm1.SaveButtonClick(Sender: TObject);
: begin
:   if clientdataset1.ChangeCount>0  then
:   begin
:     if clientdataset1.active then
:       clientdataset1.CheckBrowseMode;
:     clientdataset1.ApplyUpdates(-1);
:   end;
: end;
:
:
: //ongettablename 이벤트
: procedure TForm1.DataSetProvider1GetTableName(Sender: TObject; DataSet: TDataSet;
:   var TableName: WideString);
: begin
:  TableName :='table1';
: end;
:
:
: 위와 같은 소스인데 목적은 table1에 대한 수정/입력/삭제입니다.
: updatesql처럼 DML문장을 제어할 수 있는 속성이나 이벤트가 어디 있을까요?
:
: 미리 감사드립니다.

+ -

관련 글 리스트
13506 dbexpress 다중테이블 수정 도움 부탁드립니다. db2 2000 2010/12/13
13508     Re:dbexpress 다중테이블 수정 도움 부탁드립니다. 손덕진 2154 2010/12/21
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.