각각 쿼리해온 내용이 DBGrid1과 DBGrid2에 뿌려집니다... DBGrid2에서 원하는 항목을 선택한 후 확인 버튼을 눌러 DBGrid1에 Insert합니다. DBGrid1에 미리 Insert한 내용을 한눈에 알아보기위해 DBGrid2에서 선택하여 DBGrid1에 넣은 내...
정우성
•
2001.02.10 20:29
안녕하세요... 정우성입니다.
질문의 내용을 대략 정리하면..
---------------------------------...
안녕하세요... 정우성입니다.
질문의 내용을 대략 정리하면..
-----------------------------------------------------------
DBGrid2의 내용을 선택하여 DBGrid1로 Insert 했을경우
기존의 DBGrid1내용과 새로 등록된 DBGrid1의 내용을
색깔이나.. 또는 기타 방법으로 항목들을 비교 또는 구분한다.
-----------------------------------------------------------
이렇게 구현할려면 확인버튼을 눌렀을 경우 바로 DB에 Insert가 되면 안되고
TQuery를 사용하여 Cachedupdate를 True 지정한 다음 임의의 필드를 추가합니다.
임의의 필드을 추가하는 방법은 간단합니다.
//----------------------------------------------------------------------------
임의의 필드를 추가하는 이유 기존 DATA와 New DATA를 구분하기 위해서 필요함
//----------------------------------------------------------------------------
1. DBGrid1의 SQL문 이렇게 작성합니다.
Select 주민번호, -|
성명, |
생년월일, | 실제로 존재하는 필드 입니다.
성별, | '*'를 사용하시면 안됩니다.
소속사, -|
'X' Temp <=== 임의로 추가한 Temp성 필드입니다.
From 연예인
2. DBGrid2의 내용을 선택후 확인 버튼 클릭 이벤트에서 아래와 같이 처리합니다.
With Query1 do
begin
Insert;
FieldByNaem('주민번호').AsString := Edit1.Text;
FieldByNaem('성명' ).AsString := Trim(Edit2.Text);
FieldByNaem('성별' ).AsString := ComboBox1.ItemIndex;
FieldByNaem('소속사' ).AsString := Table1.FieldByNaem('소속사').AsString;
FieldByNaem('Temp' ).AsString := 'O'; //여기가 중요합니다.
Post;
end;
==================================================================================
1. 번에서 기존 DATA를 불러왔을 경우에는 Temp가 'X'로 셋팅되어 있고
2. 번에서 신규로 등록 할때는 Temp를 'O'으로 셋팅하므로 일단 기존데이타와
신규등록 된 자료가 구분이 됩니다. 2.번과 같은 경우에는 실제로 등록된 상태가
아니므로 나중에.. 일괄적으로 실제 DB에 Insert 하여야 합니다.
참고적으로 UpdateSQL컴포넌트를 사용하면 쉽게 해결될 것입니다.
==================================================================================
3. DBGrid1에서 기존 DATA와 신규 DATA를 구분하여 색깔을 다르게 처리합니다.
이렇게 하기 위해서는 선행되어야 할 작업이 몇개 있습니다.
1) 만약 DBGrid1에 Columns(TColumn)추가가 되어 있으면 모두 삭제를 합니다.
2) DBGrid1의 Columns의 Width 등 기타 설정을 하시려면 DBGrid1의 Query
컴포넌트에서 처리합니다. 특히 DBGrid1의 ColumnTitle에 필드명이 아닌
문자열을 넣고 싶으면 Query의 해당 필드의 DisplayLabel에서 입력하시면
됩니다.
3) DBGrid1의 Query에서 추가한 Temp 필드의 Visible를 False로 지정합니다.
=> 구지 보여주고 싶지 않으니깐...^^
4. 1, 2, 3번 같이 처리후 DBGrid1의 DBGrid1DrawDataCell 이벤트에
아래와 같이 코딩합니다.
//Temp 필드의 값이 'O'일때 레코드 색을 변경처리한다.
//즉 신규일때만 'O'이므로 레코드 색변경
if Field.DataSet.FieldByName('Temp').AsString = 'O' then
begin
(Sender as TDbGrid).canvas.brush.Color := $0080FFFF;
(Sender as TDbGrid).canvas.font.Color := clBlack;
(Sender as TDbGrid).canvas.FillRect(Rect);
(sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State) ;
end
else
begin
(sender as TDbGrid).DefaultDrawDataCell(Rect,Field,State) ;
end;
여기까지 오시는데 수고 하셨습니다. ^^
자 이렇게 하시고 Run를 하여 확인합니다.
확인 버튼으로 등록하시면 신규는 노란색으로 칠해질거에요..
아흑.. 안돼면.. 우짜지.. 해보시구여... 안되시면.. 메일 주십시오..
같이 고민해드리겠습니다..
그럼.. 즐코하시구여.. 항상 건승하세요...
음햐햐... 광화문에서 이상 정우성이였습니다..