|
어제 따로 답변을 드렸습니다만..
하시려는 작업은 대략 다음과 같지요.
dbExpress에서 ClientDataSet을 이용해서 양방향 데이터셋을 구현하고 셀렉트된 결과가 dbgrid에 뿌려졌을 때.
레코드들을 수정하거나 새로운 레코드를 추가한 경우 그것을 ApplyUpdate에 의해서 자동으로(백그라운드 SQL로)
서버 디비에 반영되게 하지 말고, 명시적으로 SQL문을 날리고 싶다는 것이지요.
인서트 혹은 업데이트되는 레코드를 추적하려면, 데이터셋의 AfterUpdate와 AfterInsert 이벤트에서 해당
레코드를 기억해두면 되겠지요. 예를 들면 RecNo를 기억해놓을 수 있겠지요. 그리고 버튼 클릭과 같이 서버로
데이터를 반영하려고 할 때, 기억해둔 RecNo를 기초로 insert 혹은 update 문을 동적으로 생성해서 날려주면
되겠습니다.
그럼...
seiyes 님이 쓰신 글 :
: 그리드를 이용하여 다음과 같이 했습니다......
:
: dbexpress를 사용하여 dbGrid를 이용하여 data를 뿌렸는데요...
: 여러 row중에 update되거나 insert되는 넘들을 찾아서
: update를 해주고 싶습니다....
:
: /*
: if ( ClientDataSet1->State == dsEdit || ClientDataSet1->State == dsInsert )
: {
: ClientDataSet1->Post();
: }
:
: ClientDataSet1->ApplyUpdates(-1);
: */
:
: 이렇게 할 경우 암시적인 CUD인 경우로서 dataSEt이 알아서 update해준다는 건 이해가 됩니다..
:
: 하지만 그렇지 않을 경우 즉 조회는 dataSet으로 해왔지만...
: CUD는 SQLQuery를 사용하고 싶습니다....
:
: 그러면....
:
: //1. for 문을 record갯수만큼 돌린다.
: //2. update나 insert된 row를 찾는다...
: //3. 그넘들을 insert하거나 update한다...
:
: 라는 결론이 나오는데...
:
: <<transaction 시작>>
: for ( int i = 0 ; i < ClientDataSet2->RecNo ; i ++)
: {
: if (update되거나 insert됬느냐?)
: {
: db에 insert.......
: }
: }
: <<commit or rollback...>>
:
: 이런 형태가 될텐데....음....
: 코딩(update되거나 insert됬느냐?)을 어떻게 해야 하는지 고수분들의 좋은 의견 부탁드립니다...
:
: 두번째 질문은....여기를 둘러보다가...문뜩...
: 고수님들이..DBExpress는 사용을 많이 안하는듯하신데...
: 즉, ADO나 BDE를 사용을 많이 사용하는데...혹시 dBExpress가 안좋은 점이라고 있는건지요??
:
:
:
:
:
:
:
:
:
:
:
:
:
|