Visual C++ ODBC 參數化記錄集查詢設計

來源:互聯網
上載者:User

ODBC通過RFX自動完成資料來源和記錄集對象之間的資料轉送交換,而通過DDX對話方塊資料交換實現記錄集資料和表單控制項的綁定。本文給出了一個通過GetDefaultSQL的方法設計了一個簡單的查詢,不過這兒的查詢語句是設定好的,靈活性不高,各個條件之間是OR的關係,沒法實現複雜的查詢。

在使用參數化記錄集之前,需要先確定所需的參數。學習所用的資料表如下:

這兒將所有的欄位都設定為參數,在記錄集類定義參數,並初始化:

// 參數定義longm_stunum2;CStringWm_name2;CStringWm_gender2;longm_age2;longm_classnum2;
 
// 建構函式中初始化
m_stunum2 = 0;m_name2 = L"*";m_gender2 = L"*";m_age2 = 10;m_classnum2 =1;m_nParams=5;

在DoFieldExchange中添加參數資料交換函數:

void CdatatestSet::DoFieldExchange(CFieldExchange* pFX){pFX->SetFieldType(CFieldExchange::outputColumn);// Macros such as RFX_Text() and RFX_Int() are dependent on the// type of the member variable, not the type of the field in the database.// ODBC will try to automatically convert the column value to the requested typeRFX_Long(pFX, _T("[學號]"), m_stunum);RFX_Text(pFX, _T("[姓名]"), m_name );RFX_Text(pFX, _T("[性別]"), m_gender);RFX_Long(pFX, _T("[年齡]"), m_age);RFX_Long(pFX, _T("[班級編號]"), m_classnum);pFX->SetFieldType(CFieldExchange::inputParam);RFX_Long(pFX, _T("1”), m_stunum2);RFX_Text(pFX, _T("2"), m_name2 );RFX_Text(pFX, _T("3"), m_gender2);RFX_Long(pFX, _T("4"), m_age2);RFX_Long(pFX, _T("5"), m_classnum2);}

設定查詢條件的過濾字串,串中的參數預留位置(?)與上面綁定的順序一致:

CString CdatatestSet::GetDefaultSQL(){m_strFilter=L"學號=? OR 姓名=? OR 性別=? OR 年齡=? OR 班級編號=?";return _T("[學生資訊表]");}

最後在View類中設定資料交換,並編寫相應的查詢函數:

void CdatatestView::DoDataExchange(CDataExchange* pDX){CRecordView::DoDataExchange(pDX);// 可以在此處插入DDX_Field* 函數以將控制項“串連”到資料庫欄位,例如// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);// 有關更多資訊,請參閱MSDN 和ODBC 樣本DDX_FieldText(pDX,IDC_EDIT1,m_pSet->m_stunum,m_pSet);DDX_FieldText(pDX,IDC_EDIT2,m_pSet->m_name,m_pSet);DDX_FieldText(pDX,IDC_EDIT3,m_pSet->m_gender,m_pSet);DDX_FieldText(pDX,IDC_EDIT4,m_pSet->m_age,m_pSet);DDX_FieldText(pDX,IDC_EDIT5,m_pSet->m_classnum,m_pSet);//對話方塊資料交換DDX_Text(pDX,IDC_EDIT6,m_stunum);DDX_Text(pDX,IDC_EDIT7,m_name);DDX_Text(pDX,IDC_EDIT8,m_sex);DDX_Text(pDX,IDC_EDIT9,m_age);DDX_Text(pDX,IDC_EDIT10,m_classnum);}void CdatatestView::OnMyQuery(){UpdateData(TRUE);m_pSet->m_classnum2=m_classnum;m_pSet->m_name2=m_name;m_pSet->m_gender2=m_sex;m_pSet->m_stunum2=m_stunum;m_pSet->m_age2=m_age;m_pSet->Requery();UpdateData(FALSE);}

最後的結果如下:

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.