?? ociexampledlg.cpp
字號:
m_grid.SetColWidth(0,500); //設置第0列寬度
m_grid.SetColWidth(1,1000); //設置第1列寬度
for(int i=2;i<=4;i++) //設置第2-4列寬度
m_grid.SetColWidth(i,900); //設置第5列寬度
m_grid.SetColWidth(5,1100); //設置第6列寬度
}
void COCIExampleDlg::OnDestroy()
{
CDialog::OnDestroy();
//代碼4.5.1,//結束會話
OCISessionEnd(svchp, errhp, authp, (ub4) 0);
//斷開與數據庫的連接
OCIServerDetach(srvhp, errhp, OCI_DEFAULT);
//釋放OCI句柄
OCIHandleFree((dvoid*)srvhp, OCI_HTYPE_SERVER);
OCIHandleFree((dvoid*)svchp, OCI_HTYPE_SVCCTX);
OCIHandleFree((dvoid*)errhp, OCI_HTYPE_ERROR);
OCIHandleFree((dvoid*)authp, OCI_HTYPE_SESSION );
OCIHandleFree((dvoid*)stmthp, OCI_HTYPE_STMT );
OCIHandleFree((dvoid*)dschp, OCI_HTYPE_DESCRIBE);
}
void COCIExampleDlg::OnButtonExit()
{
this->EndDialog(IDOK);
}
//初始化OCI
void COCIExampleDlg::Init_OCI()
{
//代碼4.1.2,初始化OCI環境
OCIEnvInit(&envhp, OCI_DEFAULT,0, 0);
//代碼4.2.1:分配句柄與數據結構
OCIHandleAlloc(envhp, (dvoid**)&errhp,OCI_HTYPE_ERROR, 0, 0); //分配錯誤句柄
ErrorProc (errhp,OCIHandleAlloc(envhp, (dvoid**)&srvhp, OCI_HTYPE_SERVER, 0, 0)); //分配服務器句柄
ErrorProc (errhp,OCIHandleAlloc(envhp, (dvoid**)&svchp, OCI_HTYPE_SVCCTX, 0, 0 )); //分配服務環境句柄
ErrorProc (errhp,OCIHandleAlloc(envhp, (dvoid**)&authp, OCI_HTYPE_SESSION, 0, 0)); //分配會話句柄
ErrorProc (errhp,OCIHandleAlloc((dvoid*)envhp,(dvoid**)&dschp, OCI_HTYPE_DESCRIBE,0,0)); //分配描述句柄
ErrorProc (errhp,OCIHandleAlloc ((dvoid*)envhp,(dvoid**)&stmthp,OCI_HTYPE_STMT, 0, 0)); //分配語句句柄
/*
說明:常量"OC_ HTYPE _STMT"等等是OCI句柄的宏定義,標明我們所分配的句柄的類型。
句柄的宏定義具體可以參考oci. h文件中的"Handle Types"部分。
*/
//代碼4.3.2,連接數據庫
ErrorProc(errhp,OCIServerAttach(srvhp, errhp,(unsigned char*)(LPCTSTR)
m_strServerName, (sb4)strlen(m_strServerName),OCI_DEFAULT));
// 設置服務環境的服務器屬性
ErrorProc (errhp, OCIAttrSet ((dvoid*)svchp, (ub4) OCI_HTYPE_SVCCTX,
(dvoid*)srvhp, (ub4) 0,OCI_ATTR_SERVER, errhp));
//代碼4.3.3,認證用戶并且開始會話
//認證用戶名稱;
ErrorProc(errhp,OCIAttrSet(authp,OCI_HTYPE_SESSION,(dvoid*)(LPCTSTR)m_strUserName,
(ub4)strlen(m_strUserName),OCI_ATTR_USERNAME,errhp));
//認證用戶密碼
ErrorProc(errhp,OCIAttrSet(authp,OCI_HTYPE_SESSION,(dvoid*)(LPCTSTR)m_strPassword,
(ub4)strlen(m_strPassword), OCI_ATTR_PASSWORD,errhp));
//創建并開始一個用戶會話,應用程序必須在連接服務器之后才能調用該函數
ErrorProc(errhp,OCISessionBegin (svchp, errhp, authp,OCI_CRED_RDBMS,OCI_DEFAULT));
//設置服務器環境的會話屬性
ErrorProc(errhp,OCIAttrSet(svchp, OCI_HTYPE_SVCCTX,(dvoid*)authp, 0, OCI_ATTR_SESSION, errhp));
}
BEGIN_EVENTSINK_MAP(COCIExampleDlg, CDialog)
//{{AFX_EVENTSINK_MAP(COCIExampleDlg)
ON_EVENT(COCIExampleDlg, IDC_MSFLEXGRID, -600 /* Click */, OnClickMsflexgrid, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void COCIExampleDlg::OnClickMsflexgrid()
{
if(m_grid.GetRow()<1) return;
m_name=m_grid.GetTextMatrix(m_grid.GetRow(),1);
m_english=atoi(m_grid.GetTextMatrix(m_grid.GetRow(),2));
m_politics=atoi(m_grid.GetTextMatrix(m_grid.GetRow(),3));
m_speciality1=atoi(m_grid.GetTextMatrix(m_grid.GetRow(),4));
m_speciality2=atoi(m_grid.GetTextMatrix(m_grid.GetRow(),5));
m_totalscore=atoi(m_grid.GetTextMatrix(m_grid.GetRow(),6));
this->UpdateData (FALSE);
}
//英語成績改變時,總成績也應隨著動態改變
void COCIExampleDlg::OnChangeEditEnglish()
{
this->UpdateData (TRUE); //更新數據
m_totalscore=m_english+m_politics+m_speciality1+m_speciality2;
this->UpdateData (FALSE); //更新總成績編輯框內容
}
//政治成績改變時,總成績也應隨著動態改變
void COCIExampleDlg::OnChangeEditPolitics()
{
this->UpdateData (TRUE); //更新數據
m_totalscore=m_english+m_politics+m_speciality1+m_speciality2;
this->UpdateData (FALSE); //更新總成績編輯框內容
}
//專業課1成績改變時,總成績也應隨著動態改變
void COCIExampleDlg::OnChangeEditSpeciality1()
{
this->UpdateData (TRUE); //更新數據
m_totalscore=m_english+m_politics+m_speciality1+m_speciality2;
this->UpdateData (FALSE); //更新總成績編輯框內容
}
//專業課2成績改變時,總成績也應隨著動態改變
void COCIExampleDlg::OnChangeEditSpeciality2()
{
this->UpdateData (TRUE); //更新數據
m_totalscore=m_english+m_politics+m_speciality1+m_speciality2;
this->UpdateData (FALSE); //更新總成績編輯框內容
}
/*增加記錄*/
void COCIExampleDlg::OnButtonAdd()
{
//準備SOL語句
wsprintf ((char*)textSQL,"INSERT INTO Score VALUES('%s',%d,%d,%d,%d,%d)",m_name,m_english,m_politics,m_speciality1,m_speciality2,m_totalscore);
if (status =OCIStmtPrepare(stmthp, errhp,textSQL, strlen ((char*)textSQL),OCI_NTV_SYNTAX, OCI_DEFAULT))
{
ErrorProc (errhp, status); //捕捉錯誤
return;
}
//執行SOL語句
if (status =OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1,0,NULL, NULL, OCI_DEFAULT))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
//提交
if (status =OCITransCommit(svchp, errhp, (ub4)0))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
else
MessageBox("增加記錄成功!");
/*刷新表格里的數據*/
int nRows=m_grid.GetRows(); //得到表格控件中總行數
m_grid.SetRows(nRows+1); //表格控件中總行數加1(因為新增加了一條記錄)
m_grid.SetTopRow(nRows+1); //設置表格控件的頂行,是了將光標滾動的新增記錄行
CString tempstr;
tempstr.Format("%d",nRows); m_grid.SetTextMatrix(nRows,0,tempstr); //寫入序號
m_grid.SetTextMatrix(nRows,1,m_name); //寫入姓名
tempstr.Format("%d",m_english); m_grid.SetTextMatrix(nRows,2,tempstr); //寫入英語成績
tempstr.Format("%d",m_politics); m_grid.SetTextMatrix(nRows,2,tempstr); //寫入政治成績
tempstr.Format("%d",m_speciality1); m_grid.SetTextMatrix(nRows,3,tempstr); //寫入專業課1成績
tempstr.Format("%d",m_speciality2); m_grid.SetTextMatrix(nRows,4,tempstr); //寫入專業課2成績
tempstr.Format("%d",m_totalscore); m_grid.SetTextMatrix(nRows,5,tempstr); //寫入總成績
}
/*修改記錄*/
void COCIExampleDlg::OnButtonModify()
{
int nRow=m_grid.GetRow(); //得到表格控件中光標所在行(即所要修改的行)
if(m_grid.GetRows()>1 && nRow<1)
{
MessageBox("請先選擇要修改的記錄行!");
return;
}
CString stroldname=m_grid.GetTextMatrix (m_grid.GetRow (),1);
CString strSQL;
//準備SOL語句
strSQL.Format ("UPDATE Score SET 姓名='%s',英語=%d,政治=%d,專業課1=%d,\
專業課2=%d,總成績=%d WHERE 姓名='%s'",m_name, m_english, m_politics,\
m_speciality1,m_speciality2,m_totalscore,stroldname);
wsprintf ((char*)textSQL,strSQL);
//準備SQL語句
if (status =OCIStmtPrepare(stmthp, errhp,textSQL, strlen ((char*)textSQL),OCI_NTV_SYNTAX, OCI_DEFAULT))
{
ErrorProc (errhp, status); //捕捉錯誤
return;
}
//執行SOL語句
if (status =OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1,0,NULL, NULL, OCI_DEFAULT))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
//提交
if (status =status =OCITransCommit(svchp, errhp, (ub4)0))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
else
MessageBox("修改記錄成功!"); // TODO: Add your control notification handler code here
/*刷新表格里的數據*/
CString tempstr;
m_grid.SetTextMatrix(nRow,1,m_name); //寫入姓名
tempstr.Format("%d",m_english); m_grid.SetTextMatrix(nRow,2,tempstr); //寫入英語成績
tempstr.Format("%d",m_politics); m_grid.SetTextMatrix(nRow,2,tempstr); //寫入政治成績
tempstr.Format("%d",m_speciality1); m_grid.SetTextMatrix(nRow,3,tempstr); //寫入專業課1成績
tempstr.Format("%d",m_speciality2); m_grid.SetTextMatrix(nRow,4,tempstr); //寫入專業課2成績
tempstr.Format("%d",m_totalscore); m_grid.SetTextMatrix(nRow,5,tempstr); //寫入總成績
}
//刪除記錄
void COCIExampleDlg::OnButtonDelete()
{
int nRow=m_grid.GetRow(); //得到表格控件中光標所在行(即所要修改的行)
if(m_grid.GetRows()>1 && nRow<1)
{
MessageBox("請先選擇要刪除的記錄行!");
return;
}
CString stroldname=m_grid.GetTextMatrix (m_grid.GetRow (),1);
CString strSQL;
//準備SOL語句
strSQL.Format ("DELETE FROM Score WHERE 姓名='%s'",m_name);
wsprintf ((char*)textSQL,strSQL);
//準備SQL語句
if (status =OCIStmtPrepare(stmthp, errhp,textSQL, strlen ((char*)textSQL),OCI_NTV_SYNTAX, OCI_DEFAULT))
{
ErrorProc (errhp, status); //捕捉錯誤
return;
}
//執行SOL語句
if (status =OCIStmtExecute(svchp, stmthp, errhp, (ub4) 1,0,NULL, NULL, OCI_DEFAULT))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
//提交
if (status =status =OCITransCommit(svchp, errhp, (ub4)0))
{
ErrorProc(errhp,status); //捕捉錯誤
return;
}
else
MessageBox("刪除記錄成功!"); // TODO: Add your control notification handler code here
OnButtonConnect(); //刷新表格數據
}
//升序
void COCIExampleDlg::OnRadioAsc()
{
m_sortStyle=0;
}
//降序
void COCIExampleDlg::OnRadioDesc()
{
m_sortStyle=1;
}
//排序
void COCIExampleDlg::OnButtonSort()
{
CString sortASC_DESC,sortFiled;
if(m_sortStyle==0) //得到升序或降序
sortASC_DESC="ASC";
else
sortASC_DESC="DESC";
//排序的字段名
m_CombolFieldName.GetLBText (m_CombolFieldName.GetCurSel (),sortFiled);
//設置附加SQL語句
SQL.Format("ORDER BY %s %s",sortFiled,sortASC_DESC);
OnButtonConnect(); //刷新表格數據
}
//初始化查詢的符號
void COCIExampleDlg::Init_condition()
{
m_CombolCondition.ResetContent ();
m_CombolCondition.ResetContent ();
m_CombolCondition.AddString (">");
m_CombolCondition.AddString (">=");
m_CombolCondition.AddString ("<");
m_CombolCondition.AddString ("<=");
m_CombolCondition.AddString ("=");
m_CombolCondition.AddString ("!=");
m_CombolCondition.SetCurSel(0);
}
void COCIExampleDlg::OnButtonQuery()
{
CString sortFiled,sortcondition;
this->UpdateData ();
//排序的字段名
m_CombolFieldName.GetLBText (m_CombolFieldName.GetCurSel (),sortFiled);
//排序的字段名
m_CombolCondition.GetLBText (m_CombolCondition.GetCurSel (),sortcondition);
//設置附加SQL語句
if(m_CombolFieldName.GetCurSel()==0) //姓名
SQL.Format("WHERE %s %s '%s'",sortFiled,sortcondition,m_strFiledvalue);
else
SQL.Format("WHERE %s %s %d",sortFiled,sortcondition,atoi(m_strFiledvalue));
OnButtonConnect(); //刷新表格數據
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -