: : 안뇽하세엽?
: : 너굴휩니다.
: :
: : DBEdit control or DBComboBox의 경우 값이 변경되면
: : 변경이 되었는지 안되었는지 체크를 어떻게 하는건가여?
: :
: : 한두개는 직접 해도 상관 없지만
: : 10개 이상을 일일이 직접하는것은 상당한 노가다일것 같아엽...
: :
: : 제 프로그램은 지금 DBGrid에서 하나의 레코드를 더블클릭하면
: : 그것의 내용을 잘 알아 볼 수 있도록 새 폼을 생성시킵니다.
: : 이때 원래의 DataSet과는 다른 TQuery를 사용합니다.
: :
: : 요럽게..
: :
: : void __fastcall TfrmMain::DBGrid1DblClick(TObject *Sender)
: : {
: : AnsiString tempqry;
: :
: : tempqry = "select * from cable.db where CABLEID ='" + DM->Query1->FieldByName("CABLEID")->AsString +"'";
: : DM->Query10->Close();
: : DM->Query10->SQL->Clear();
: : DM->Query10->SQL->Add(tempqry);
: : frmConn->ShowModal();
: : }
: :
: : frmConn이라는 폼은 DBEdit or DBComboBox를 사용해서 디비 내용을 보여 줍니다.
: : 이런경우 만약 에디트 박스의 값을 하나라도 수정했을 경우에만
: : Update시키려고 합니다.
: :
: : 어떤 방법이 가장 이상적인 방법일가여?
: : 며칠 고민하다가.. (다른것도 하면서 ^^ )
: : 제 머리를 탓하면서 요기에 질문 올립니다.
: : 그럼 부탁드립니다.
:
:
:
: 임펠리테리입니다.
:
: DBComboBox나 DBEdit 등은 일반적인 TComboBox나 TEdit와 마찬가지로 OnChange 이벤트를
: 가지고 있습니다. 이 이벤트가 바로 원하시는 동작을 해줍니다.
:
: 새로 만드시는 폼 클래스의 private 섹션에 다음과 같이 추가합니다.
: class TSubForm : public TForm
: {
: ...
: private:
: bool Modified;
: void __fastcall EditComboBoxChange(TObject *Sender);
: ...
: };
: 그리고 Modified 변수를 초기화하기 위해 폼을 더블클릭해서 OnCreate 핸들러를 작성합니다.
: (자동으로 false값이 주어지기는 합니다만 명시적으로 지정해주는 것이 좋습니다.)
: void __fastcall TSubForm::FormCreate(TObject *Sender)
: {
: Modified = false;
: }
:
: 그리고 다음과 같이 코딩합니다.
: void __fastcall TSubForm::EditComboBoxChange(TObject *Sender)
: {
: Modified = true;
: }
:
: 그리고 시프트 키를 누른채로 폼 위의 모든 디비에디트, 디비콤보박스를 클릭하여 모두 선택합니다.
: 그런 후 오브젝트 인스펙터에서 OnChange 이벤트 항목을 선택했을때 나타나는 콤보박스의
: 아래쪽 화살표 버튼을 눌러 리스트를 나타나게 한 후, EditComboBoxChange를 선택합니다.
:
: 이것으로 끝입니다. 이제 서브폼의 어떤 디비에디트/디비콤보박스의 내용을 수정했더라도
: 무조건 EditComboBoxChange() 함수가 실행되고, 그때마다 Modified는 true로 설정됩니다.
: 폼을 닫으면서 무언가가 수정되었는가 확인하려면 이 Modified 변수만 확인하면 되겠죠?
:
: 간단한 걸 너무 자세히 설명했나... ^^;;;;
: 그럼 참고하시길...
답변 감사힙니다.
그런데 한가지가 잘못된것 같더군여..
임프님께서 말씀하신대로 DBComboBox는 그렇게 하면 되는데여..
DBEdit에서는 OnChange 이벤트 처리를 제대로 안하더군여..
도움말을 찾아보니 OnChange이벤트가 발생할때 DBEdit의 Modified() 내장함수를 사용해서
처리를 해 주어야 했어여..
다음은 제가 처리한 부분입니다.
void __fastcall TfrmConn::DBEdit14Change(TObject *Sender)
{
Modified = DBEdit14->Modified |
DBEdit15->Modified |
DBEdit16->Modified |
DBEdit17->Modified |
DBEdit18->Modified |
DBEdit19->Modified |
DBEdit20->Modified |
DBEdit21->Modified |
DBEdit22->Modified |
DBEdit23->Modified |
DBEdit24->Modified |
DBEdit25->Modified |
DBEdit26->Modified ;
}
임프님 덕분에 문제 해결봤습니다. ^^
이벤트처리를 하나만 해 놓구 그 이벤트를 선택해서 사용한다는
아이디어를 미처 생각하지 못했었네요.. ^^;
|