📄 devicedbsdlg.cpp
字号:
sql.Format("update device_info_tab "
"set device_name = '%s',"
"description = '%s',"
"oper_date = '%s',"
"buyer = '%s' "
"where device_code = '%s'",m_strDeviceName,
m_strDescription,strDate,m_strBuyer,strDeviceCode);
TRACE(sql);
m_db.ExecuteSQL(sql);
//更新列表框控件的值.
m_listDevice.SetItemText(nItem,1,m_strDeviceName);
m_listDevice.SetItemText(nItem,2,strDate);
m_listDevice.SetItemText(nItem,3,m_strBuyer);
m_listDevice.SetItemText(nItem,4,m_strDescription);
//更新设备名称和设备编号组合框的数据
RefreshComboNameData();
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::OnBtnDeviceDel()
{
// TODO: Add your control notification handler code here
int nItem = m_listDevice.GetNextItem(-1, LVNI_SELECTED);
//如果没有选择要修改的纪录,返回.
if(nItem == -1){
AfxMessageBox("没有选择要修改的设备信息");
return;
}
CString strDeviceCode = m_listDevice.GetItemText(nItem,0);
TRY{
CString deletedSql;
//首先删除设备编号为strDeviceCode的所有借出信息
deletedSql.Format("delete from device_lend_info_tab where device_code = '%s'",strDeviceCode);
m_db.ExecuteSQL(deletedSql);
//然后删除设备编号为strDeviceCode设备信息记录
deletedSql.Format("delete from device_info_tab where device_code = '%s'",strDeviceCode);
m_db.ExecuteSQL(deletedSql);
//从界面中删除记录信息.
m_listDevice.DeleteItem(nItem);
//更新设备名称和设备编号组合框的数据
RefreshComboNameData();
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::OnCloseupComboName()
{
// TODO: Add your control notification handler code here
TRY{
CRecordset rs(&m_db);
//打开所有的设备信息记录.
CString sql;
CString strSelected;
//获取当前选择项目
int nIndex = m_comboName.GetCurSel();
//如果没有选择,退出
if(nIndex == -1)
return;
//获取当前选择的设备名称
m_comboName.GetLBText(nIndex,strSelected);
//如果选项为空,退出
if(strSelected.IsEmpty())
return;
//打开所有设备名称为strSelected的设备编号,因为会有相同的设备,但是
//设备的编号是不一样的,这样比较方便检索
sql.Format("select device_code from device_info_tab "
"where device_name = '%s'",strSelected);
rs.Open(CRecordset::dynaset,sql);
m_comboCode.ResetContent();
while (!rs.IsEOF()) {
CString strCode;
//获取设备编号字段值
rs.GetFieldValue((short)0, strCode);
//向设备编号组合框添加名称为前面选择的设备名称的所有设备编号.
m_comboCode.AddString(strCode);
rs.MoveNext();
}
m_comboCode.SetCurSel(0);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::RefreshComboNameData()
{
m_comboName.ResetContent();
TRY{
CRecordset rs(&m_db);
//打开所有的设备名称记录.
rs.Open(CRecordset::dynaset, "select distinct device_name from device_info_tab");
bool a;
a=rs.IsEOF()?true:false;
while (!rs.IsEOF()) {
CString strName;
//获取设备名称字段值
rs.GetFieldValue((short)0, strName);
//向设备名称组合框添加所有设备名称.
m_comboName.AddString(strName);
rs.MoveNext();
}
rs.Close();
m_comboName.SetCurSel(0);
//更新设备编号组合框的数据
CString strSelected;
if(!a){
m_comboName.GetLBText(0,strSelected);
CString sql;
sql.Format("select device_code from device_info_tab "
"where device_name = '%s'",strSelected);
rs.Open(CRecordset::dynaset,sql);
m_comboCode.ResetContent();
while (!rs.IsEOF()) {
CString strCode;
//获取设备编号字段值
rs.GetFieldValue((short)0, strCode);
//向设备编号组合框添加名称为前面选择的设备名称的所有设备编号.
m_comboCode.AddString(strCode);
rs.MoveNext();
}
}
m_comboCode.SetCurSel(0);
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CMemoryException,pEx)
{
pEx->ReportError();
AfxMessageBox ("memory exception");
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::OnBtnLend()
{
// TODO: Add your control notification handler code here
if(! helper.isOperAllowed(OPERATOR) ){
AfxMessageBox("本用户权限不允许这个操作");
return;
};
//从界面控件中获取信息更新到控件变量中.
if(!UpdateData())
return;
if(m_strBorrower.IsEmpty()){
MessageBox("请输入借书人的姓名");
return;
}
if(m_strSelectedName.IsEmpty()){
MessageBox("请选择设备名称");
return;
}
if(m_strSelectedCode.IsEmpty()){
MessageBox("请选择设备编号");
return;
}
TRY{
CRecordset rs(&m_db);
CString sql;
//获取需要借出设备的状态信息.
sql.Format("Select lend_status,lend_id from device_info_tab "
"where device_code = '%s'",m_strSelectedCode);
rs.Open(CRecordset::snapshot, sql);
int lendStatus = 0;
int lendID = 0 ;
//如果有记录,说明设备已经借出,提示用户谁借了设备.
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
lendStatus = var.m_iVal;
var.Clear();
//获取借出ID,从而可以获取借出人的信息
rs.GetFieldValue(1, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
lendID = var.m_iVal;
}
rs.Close();
//如果已经借出
if(lendStatus == 1){
//获取借出人的姓名
sql.Format("Select borrower from device_lend_info_tab "
"where lend_id = %d",lendID);
rs.Open(CRecordset::snapshot, sql);
CString borrower;
if(!rs.IsEOF()) {
rs.GetFieldValue((short)0, borrower);
}
rs.Close();
CString msg = "设备已经借出,借出人为:";
msg += borrower;
//提示用户,谁已经借出了设备.
MessageBox(msg);
return;
}
//借出时间为当前时间.
CTime dt = CTime::GetCurrentTime();
CString currentDT = dt.Format("%Y-%m-%d");
//插入借出信息记录.
sql.Format("Insert into device_lend_info_tab("
"device_code,borrower,borrow_date,"
"return_date) "
"VALUES("
"'%s','%s','%s',null)",
m_strSelectedCode,
m_strBorrower,currentDT);
TRACE(sql);
m_db.ExecuteSQL(sql);
//修改设备信息表中的借出状态和借出ID.
sql.Format("update device_info_tab "
"set lend_status = 1,"
"lend_id = %d "
"where device_code = '%s'",lendID,m_strSelectedCode);
TRACE(sql);
m_db.ExecuteSQL(sql);
//向界面中插入新的设备信息.
InsertLendInfoItem(lendID,m_strSelectedCode,
m_strSelectedName,m_strBorrower,currentDT,"") ;
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::OnBtnReturn()
{
// TODO: Add your control notification handler code here
//从界面控件中获取信息更新到控件变量中.
if(!helper.isOperAllowed(OPERATOR))
{
AfxMessageBox("本用户权限不允许这个操作");
return;
}
if(!UpdateData())
return;
if(m_strSelectedName.IsEmpty()){
MessageBox("请选择设备名称");
return;
}
if(m_strSelectedCode.IsEmpty()){
MessageBox("请选择设备编号");
return;
}
TRY{
CRecordset rs(&m_db);
CString sql;
//查询设备是否已经借出,如果没有借出,则提示"此设备没有借出,归还失败"信息.
sql.Format("Select lend_status,lend_id from device_info_tab "
"where device_code = '%s'",m_strSelectedCode);
rs.Open(CRecordset::snapshot, sql);
int lendStatus = 0;
int lendID = 0 ;
if(!rs.IsEOF()) {
CDBVariant var;
rs.GetFieldValue((short)0, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
lendStatus = var.m_iVal;
var.Clear();
rs.GetFieldValue(1, var, SQL_C_SLONG);
if (var.m_dwType != DBVT_NULL)
lendID = var.m_iVal;
}
CString c;
c.Format("lend id = %d",lendID);
//MessageBox(c);
rs.Close();
if(lendStatus == 0){
MessageBox("此设备没有借出,归还失败");
return;
}
//设置借出信息表中的归还日期为当前日期.
COleDateTime dt = COleDateTime::GetCurrentTime();
CString currentDT = dt.Format("%Y-%m-%d");
//插入借出信息记录.
sql.Format("update device_lend_info_tab "
"set return_date = '%s' "
"where lend_id = %d",currentDT,lendID);
TRACE(sql);
// AfxMessageBox(sql);
m_db.ExecuteSQL(sql);
//设置设备信息表中的借出状态为0,借出ID为0,该设备可以被下次借出.
sql.Format("update device_info_tab "
"set lend_status = 0,"
"lend_id = 0 "
"where device_code = '%s'",m_strSelectedCode);
TRACE(sql);
m_db.ExecuteSQL(sql);
//设置标志,表示在借出信息的列表框控件中是否含有要归还的设备
//信息,如果有就为1,否则为0
int flag = 0 ;
//查询借出信息控件上是否含有借出ID为LendID的借出信息,
//如果有直接更新界面上的归还日期值.
for(int i = 0 ; i< m_listLend.GetItemCount(); i++){
int id = atoi(m_listLend.GetItemText(i,0));
if(id == lendID){
m_listLend.SetItemText(i,5,currentDT);
flag = 1;
}
}
//如果列表框控件中没有借出信息,则在借出信息列表框控件中的最后一行插入
//借出信息,归还日期为当前日期.
if(flag == 0){
//从数据库中获取借出日期信息.
sql.Format("Select borrower,borrow_date from device_lend_info_tab "
"where lend_id = %d",lendID);
rs.Open(CRecordset::snapshot, sql);
CString borrower,date;
if(!rs.IsEOF()) {
rs.GetFieldValue((short)0, borrower);
rs.GetFieldValue(1, date);
}
rs.Close();
InsertLendInfoItem(lendID,m_strSelectedCode,
m_strSelectedName,borrower,date,currentDT) ;
}
}
CATCH(CDBException,ex)
{
AfxMessageBox (ex->m_strError);
AfxMessageBox (ex->m_strStateNativeOrigin);
}
AND_CATCH(CException,e)
{
TCHAR szError[100];
e->GetErrorMessage(szError,100);
AfxMessageBox (szError);
}
END_CATCH
}
void CDeviceDBSDlg::OnBtnLendList()
{
// TODO: Add your control notification handler code here
//创建借出信息对话框实列.
CLendInfoDlg dlg;
//把数据库的指针传入对话框中.
dlg.m_pDB = &m_db;
//打开借出信息对话框.
dlg.DoModal();
}
void CDeviceDBSDlg::OnBtnFrequencyList()
{
// TODO: Add your control notification handler code here
//创建借出频率信息对话框实列.
CFreqListDlg dlg;
//把数据库的指针传入对话框中.
dlg.m_pDB = &m_db;
//打开借出频率信息对话框.
dlg.DoModal();
}
void CDeviceDBSDlg::OnBtnLentDevice()
{
// TODO: Add your control notification handler code here
//创建未归还信息对话框实列.
CDeviceNRtDlg dlg;
//把数据库的指针传入对话框中.
dlg.m_pDB = &m_db;
//打开未归还信息对话框.
dlg.DoModal();
}
void CDeviceDBSDlg::OnOK()
{
// TODO: Add extra validation here
// CDialog::OnOK();
}
void CDeviceDBSDlg::OnSysExit()
{
// TODO: Add your control notification handler code here
m_db.Close();
CDialog::OnOK();
}
void CDeviceDBSDlg::OnCancel()
{
// TODO: Add extra cleanup here
CDialog::OnCancel();
}
void CDeviceDBSDlg::OnEditProfile()
{
//创建编辑用户资料对话框实列.
CEditProfile dlg;
//把数据库的指针传入对话框中.
dlg.m_pDB = &m_db;
//打开编辑用户资料对话框.
dlg.DoModal();
}
void CDeviceDBSDlg::OnEditUser()
{
if(!helper.isOperAllowed(LEADER)){
AfxMessageBox("本用户权限不允许该操作");
return ;
}
//创建编辑用户对话框实列.
CEditUser dlg;
//把数据库的指针传入对话框中.
dlg.m_pDB = &m_db;
//打开编辑用户对话框.
// dlg.initData();
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -