: 안뇽하세엽?
: 너굴휩니다.
:
: 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 변수만 확인하면 되겠죠?
간단한 걸 너무 자세히 설명했나... ^^;;;;
그럼 참고하시길...
|