www.pudn.com > 4-5cha.rar > RentDlg.cpp


// RentDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "Rent.h" 
#include "RentDlg.h" 
#include "RentDVDDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAboutDlg dialog used for App About 
 
class CAboutDlg : public CDialog 
{ 
public: 
	CAboutDlg(); 
 
// Dialog Data 
	//{{AFX_DATA(CAboutDlg) 
	enum { IDD = IDD_ABOUTBOX }; 
	//}}AFX_DATA 
 
	// ClassWizard generated virtual function overrides 
	//{{AFX_VIRTUAL(CAboutDlg) 
	protected: 
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support 
	//}}AFX_VIRTUAL 
 
// Implementation 
protected: 
	//{{AFX_MSG(CAboutDlg) 
	//}}AFX_MSG 
	DECLARE_MESSAGE_MAP() 
}; 
 
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 
{ 
	//{{AFX_DATA_INIT(CAboutDlg) 
	//}}AFX_DATA_INIT 
} 
 
void CAboutDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAboutDlg) 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 
	//{{AFX_MSG_MAP(CAboutDlg) 
		// No message handlers 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRentDlg dialog 
 
CRentDlg::CRentDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(CRentDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CRentDlg) 
	m_name = _T(""); 
	m_check_Date = FALSE; 
	//}}AFX_DATA_INIT 
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); 
} 
 
void CRentDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CRentDlg) 
	DDX_Control(pDX, IDC_EDIT_NAME, m_editName); 
	DDX_Control(pDX, IDC_COMBO_DVD, m_comboDVD); 
	DDX_Control(pDX, IDC_DATETIMEPICKER_TO, m_DateTo); 
	DDX_Control(pDX, IDC_DATETIMEPICKER_FROM, m_DateFrom); 
	DDX_Control(pDX, IDC_LIST_RENT, m_rentInfoList); 
	DDX_Text(pDX, IDC_EDIT_NAME, m_name); 
	DDX_Check(pDX, IDC_CHECK_DATE, m_check_Date); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CRentDlg, CDialog) 
	//{{AFX_MSG_MAP(CRentDlg) 
	ON_WM_SYSCOMMAND() 
	ON_WM_PAINT() 
	ON_WM_QUERYDRAGICON() 
	ON_BN_CLICKED(IDC_BUTTON_RENT, OnButtonRent) 
	ON_BN_CLICKED(IDC_BUTTON_DELE, OnButtonDelete) 
	ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery) 
	ON_BN_CLICKED(IDC_CHECK_DATE, OnCheckDate) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CRentDlg message handlers 
 
BOOL CRentDlg::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	// Add "About..." menu item to system menu. 
 
	// IDM_ABOUTBOX must be in the system command range. 
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); 
	ASSERT(IDM_ABOUTBOX < 0xF000); 
 
	CMenu* pSysMenu = GetSystemMenu(FALSE); 
	if (pSysMenu != NULL) 
	{ 
		CString strAboutMenu; 
		strAboutMenu.LoadString(IDS_ABOUTBOX); 
		if (!strAboutMenu.IsEmpty()) 
		{ 
			pSysMenu->AppendMenu(MF_SEPARATOR); 
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); 
		} 
	} 
 
	// Set the icon for this dialog.  The framework does this automatically 
	//  when the application's main window is not a dialog 
	SetIcon(m_hIcon, TRUE);			// Set big icon 
	SetIcon(m_hIcon, FALSE);		// Set small icon 
	 
	// TODO: Add extra initialization here 
 
	//初始化List控件的栏目名 
    m_rentInfoList.InsertColumn(0,"ID",LVCFMT_LEFT,40,-1); 
    m_rentInfoList.InsertColumn(1,"租借人",LVCFMT_LEFT,160,-1); 
	m_rentInfoList.InsertColumn(2,"租借DVD名",LVCFMT_LEFT,200,-1); 
	m_rentInfoList.InsertColumn(3,"租借日期",LVCFMT_LEFT,160,-1); 
	//选中时是完全行 
    m_rentInfoList.SetExtendedStyle(LVS_EX_FULLROWSELECT| LVS_EX_GRIDLINES); 
	//设置DateTimePicker控件的日期显示格式 
	m_DateFrom.SetFormat("yyyyMMdd"); 
	m_DateTo.SetFormat("yyyyMMdd");	 
	//日期查询初始时是不选 
	m_check_Date=FALSE; 
    m_DateFrom.EnableWindow(FALSE); 
	m_DateTo.EnableWindow(FALSE); 
	//初始化数据库连接 
	HRESULT hr; 
	try 
	{ 
		//实例化连接对象 
		hr=m_pConnection.CreateInstance(__uuidof(Connection)); 
		if(SUCCEEDED(hr)) 
        { 
			//设置连接串属性为UDL文件 
		    m_pConnection->ConnectionString="File Name=my_data1.udl"; 
			//设置等待连接打开的时间为20秒 
			m_pConnection->ConnectionTimeout=20; 
            hr=m_pConnection->Open("","","",adConnectUnspecified); 
	    	if(FAILED(hr)) 
			{ 
			  AfxMessageBox("open fail!"); 
			  return TRUE; 
			} 
		} 
		else  
		{ 
			AfxMessageBox("createinstance of Connection fail!"); 
			return TRUE; 
		} 
	} 
    catch (_com_error e)  
	{ 
		_bstr_t bstrSource(e.Source()); 
		_bstr_t bstrDescription(e.Description()); 
        AfxMessageBox(bstrSource+bstrDescription); 
		return TRUE; 
    } 
    
	//获得本月的出租记录,并显示在List控件中 
    InitListCtr(); 
 	//获得所有的DVD名,加入ComboBox下拉列表中,用来查询 
    InitComboCtr(); 
	return TRUE;  // return TRUE  unless you set the focus to a control 
} 
 
void CRentDlg::OnSysCommand(UINT nID, LPARAM lParam) 
{ 
	if ((nID & 0xFFF0) == IDM_ABOUTBOX) 
	{ 
		CAboutDlg dlgAbout; 
		dlgAbout.DoModal(); 
	} 
	else 
	{ 
		CDialog::OnSysCommand(nID, lParam); 
	} 
} 
 
// If you add a minimize button to your dialog, you will need the code below 
//  to draw the icon.  For MFC applications using the document/view model, 
//  this is automatically done for you by the framework. 
 
void CRentDlg::OnPaint()  
{ 
	if (IsIconic()) 
	{ 
		CPaintDC dc(this); // device context for painting 
 
		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); 
 
		// Center icon in client rectangle 
		int cxIcon = GetSystemMetrics(SM_CXICON); 
		int cyIcon = GetSystemMetrics(SM_CYICON); 
		CRect rect; 
		GetClientRect(&rect); 
		int x = (rect.Width() - cxIcon + 1) / 2; 
		int y = (rect.Height() - cyIcon + 1) / 2; 
 
		// Draw the icon 
		dc.DrawIcon(x, y, m_hIcon); 
	} 
	else 
	{ 
		CDialog::OnPaint(); 
	} 
} 
 
// The system calls this to obtain the cursor to display while the user drags 
//  the minimized window. 
HCURSOR CRentDlg::OnQueryDragIcon() 
{ 
	return (HCURSOR) m_hIcon; 
} 
/************************************/ 
/*函数用所有租借记录初始化列表控件  */ 
/*1.查询tbRentInfo表的本月记录      */ 
/*2.对1得到的每条记录的DVDID,通过  */ 
/*  查询tbDVDInfo表,得到DVDname    */ 
/*3.把1、2得到的结果显示在列表控件中*/ 
/************************************/ 
void CRentDlg::InitListCtr() 
{ 
    HRESULT hr; 
	_RecordsetPtr	pRentRecordset; 
    hr=pRentRecordset.CreateInstance(__uuidof(Recordset)); 
	if(FAILED(hr)) 
	{ 
		AfxMessageBox("createinstance of Recordset failed!\n can`t initiate List control!"); 
		return; 
	} 
	CString strSql; 
	_variant_t var; 
	CString strValue; 
	int curItem=0; 
	strSql="SELECT * FROM tbRentInfo"; 
	try 
	{ 
		hr=pRentRecordset->Open(_variant_t(strSql),  
			                 m_pConnection.GetInterfacePtr(),	 
			                 adOpenDynamic, 
			                 adLockOptimistic, 
			                 adCmdText); 
		if(SUCCEEDED(hr)) 
		{ 
			while(!pRentRecordset->adoEOF) 
			{ 
				var = pRentRecordset->GetCollect((long)0); 
				if(var.vt != VT_NULL) 
					strValue = (LPCSTR)_bstr_t(var); 
				m_rentInfoList.InsertItem(curItem,strValue); 
				 
				var = pRentRecordset->GetCollect("Name"); 
				if(var.vt != VT_NULL) 
					strValue = (LPCSTR)_bstr_t(var); 
				m_rentInfoList.SetItemText(curItem,1,strValue); 
				 
				var = pRentRecordset->GetCollect("DVDID"); 
				if(var.vt != VT_NULL) 
					strValue = (LPCSTR)_bstr_t(var); 
				//需要根据该DVDID查询tbDVDInfo,获得DVDname,插入list控件中 
				//m_rentInfoList.SetItemText(curItem,2,QueryDVDName(strValue)); 
				//使用调用存储过程函数QueryDVDNameSP 
				m_rentInfoList.SetItemText(curItem,2,QueryDVDNameSP(strValue)); 
				 
				var = pRentRecordset->GetCollect("Date"); 
				if(var.vt != VT_NULL) 
					strValue = (LPCSTR)_bstr_t(var); 
				m_rentInfoList.SetItemText(curItem,3,strValue); 
				 
				pRentRecordset->MoveNext(); 
				curItem++; 
				 
			} 
		} 
		else 
		{ 
			AfxMessageBox("Open recordset fail!"); 
		} 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
		return; 
	}  	 
    pRentRecordset->Close(); 
	pRentRecordset=NULL; 
} 
 
void CRentDlg::InitComboCtr() 
{ 
	_RecordsetPtr	pDVDNameRecordset; 
    pDVDNameRecordset.CreateInstance(__uuidof(Recordset)); 
	 
	try 
	{ 
		pDVDNameRecordset->Open("SELECT DVDName FROM tbDVDInfo",  
			              m_pConnection.GetInterfacePtr(),	 
		                  adOpenDynamic, 
			              adLockOptimistic, 
			              adCmdText); 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
		return; 
	}   
 
	_variant_t var; 
	CString strValue; 
	//可以选择空,表示不使用该查询选项 
	m_comboDVD.AddString(""); 
	while(!pDVDNameRecordset->adoEOF) 
	{ 
		var=pDVDNameRecordset->GetCollect("DVDName"); 
        if(var.vt != VT_NULL) 
			strValue = (LPCSTR)_bstr_t(var); 
        m_comboDVD.AddString(strValue); 
       pDVDNameRecordset->MoveNext(); 
	} 
     
    pDVDNameRecordset->Close(); 
	pDVDNameRecordset=NULL; 
} 
 
 
void CRentDlg::OnButtonRent()  
{   //弹出出租对话框 
	CRentDVDDlg rentDvdDlg; 
	rentDvdDlg.DoModal(); 
} 
 
CString CRentDlg::QueryDVDName(CString DVDID) 
{ 
	_RecordsetPtr	pDVDNameRecordset; 
    pDVDNameRecordset.CreateInstance(__uuidof(Recordset));	     
	CString strValue; 
	_bstr_t vSQL; 
	vSQL="select DVDName from tbDVDInfo where DVDID="+DVDID; 
	try 
	{ 
		pDVDNameRecordset->Open(vSQL,  
			m_pConnection.GetInterfacePtr(),	 
			adOpenDynamic, 
			adLockOptimistic, 
			adCmdText); 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
        strValue=""; 
		return strValue; 
	}   
	 
	_variant_t var; 
	var = pDVDNameRecordset->GetCollect("DVDName"); 
	if(var.vt != VT_NULL) 
		strValue = (LPCSTR)_bstr_t(var); 
 
	pDVDNameRecordset->Close(); 
	pDVDNameRecordset=NULL; 
 
	return strValue; 
 
} 
 
void CRentDlg::UpdateList() 
{ 
   m_rentInfoList.DeleteAllItems(); 
   InitListCtr(); 
} 
 
void CRentDlg::OnButtonDelete()  
{ 
	//从用户选中的列中得到ID,DVDName调用DeleteRecord函数 
	int sel=m_rentInfoList.GetSelectionMark(); 
	if(sel>=0 && AfxMessageBox("是否删除?",MB_YESNO) == IDYES) 
	{ 
		CString rentid=m_rentInfoList.GetItemText(sel,0); 
		CString dvdName=m_rentInfoList.GetItemText(sel,2); 
		//DeleteRecord(rentid,dvdName); 
		DeleteRecordTran(rentid,dvdName); 
		m_rentInfoList.DeleteItem(sel);		 
	} 
	else if(sel<0) MessageBox("列表中无选中记录!");	 
} 
 
 
void CRentDlg::DeleteRecord(CString ID,CString dvdName) 
{ 
	HRESULT hr; 
	_bstr_t vSQL; 
	vSQL="delete from tbRentInfo where ID="+ID; 
	_variant_t RecordsAffected; 
	try 
	{ 
		hr=m_pConnection->Execute(_bstr_t(vSQL),&RecordsAffected,adCmdText); 
		if(SUCCEEDED(hr)) 
		{ 
			//int dvdID=QueryDVDID(dvdName); 
			//调用使用存储过程的函数 
			int dvdID=QueryDVDIDSP(dvdName); 
			CString strDVDID; 
			strDVDID.Format("%d",dvdID); 
			//修改tbDVDInfo表中Num字段的值 
			AddDVDNum(strDVDID);    
		} 
	} 
	catch (_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
        return ; 
	}   
} 
 
void CRentDlg::OnButtonQuery()  
{ 
    UpdateData(TRUE); 
	_RecordsetPtr	pQueryRecordset; 
    pQueryRecordset.CreateInstance(__uuidof(Recordset)); 
	CString strDateFrom,strDateTo,strDVD; 
	CString strSQL,temp; 
    m_comboDVD.GetWindowText(strDVD); 
 
	if((!m_check_Date)&&(m_name.IsEmpty())&&(strDVD.IsEmpty())) 
		strSQL="select * from tbRentInfo"; 
	else strSQL="select * from tbRentInfo where "; 
 
	//如果选择日期查询获得控件的字符串信息 
	if(m_check_Date) 
    { 
	  CTime timeFrom,timeTo; 
      m_DateFrom.GetTime(timeFrom); 
	  m_DateTo.GetTime(timeTo); 
	  m_DateFrom.GetWindowText(strDateFrom); 
	  m_DateTo.GetWindowText(strDateTo); 
	 //判断时间值的有效性 
	 if(timeFrom.GetMonth()>timeTo.GetMonth()) 
	 { 
		MessageBox("Date set is wrong!"); 
		return; 
	 } 
	 else if(timeFrom.GetMonth()==timeTo.GetMonth()) 
	 { 
		if(timeFrom.GetDay()>timeTo.GetDay()) 
		{ 
			MessageBox("Date set is wrong!"); 
		    return; 
		} 
	 }	  
	  
	 temp.Format("Date>='%s' and Date<='%s'",strDateFrom,strDateTo); 
	 strSQL+=temp; 
	}     
    //如果用户输入了租借人名,就需要在SQL中加入该条件 
	if(!m_name.IsEmpty()) 
	{ 
		if(m_check_Date) 
		   temp.Format("and Name='%s'",m_name); 
		else 
			temp.Format("Name='%s'",m_name); 
		strSQL+=temp; 
	} 
	//如果用户选择了影碟名字,需要在SQL命令中加入该条件 
	if(!strDVD.IsEmpty()) 
	{    
		if((!m_check_Date)&&(m_name.IsEmpty())) 
			//QueryDVDID函数可以通过影碟的名字获得编号DVDID 
			temp.Format("DVDID=%d",QueryDVDID(strDVD)); 
		else 
		    temp.Format("and DVDID=%d",QueryDVDID(strDVD)); 
 
		strSQL+=temp; 
	} 
   	try 
	{   
		pQueryRecordset->Open(_variant_t(strSQL),  
			m_pConnection.GetInterfacePtr(),	 
			adOpenDynamic, 
			adLockOptimistic, 
			adCmdText); 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
        return ; 
	}   
  //判断记录集是否没有记录 
   if((pQueryRecordset->BOF)&&(pQueryRecordset->adoEOF)) 
       MessageBox("there is no records!"); 
   else{ 
	_variant_t var; 
	CString strValue; 
	int curItem=0; 
	//删除List控件中所有的数据,以便显示查询结果 
	m_rentInfoList.DeleteAllItems(); 
   try{	 
	while(!pQueryRecordset->adoEOF) 
	{    
		var = pQueryRecordset->GetCollect("ID"); 
		if(var.vt != VT_NULL) 
			strValue = (LPCSTR)_bstr_t(var); 
        m_rentInfoList.InsertItem(curItem,strValue); 
		 
		var = pQueryRecordset->GetCollect("Name"); 
		if(var.vt != VT_NULL) 
			strValue = (LPCSTR)_bstr_t(var); 
        m_rentInfoList.SetItemText(curItem,1,strValue); 
		 
		var = pQueryRecordset->GetCollect("DVDID"); 
		if(var.vt != VT_NULL) 
			strValue = (LPCSTR)_bstr_t(var); 
		m_rentInfoList.SetItemText(curItem,2,QueryDVDName(strValue)); 
	 
		var = pQueryRecordset->GetCollect("Date"); 
		if(var.vt != VT_NULL) 
			strValue = (LPCSTR)_bstr_t(var); 
        m_rentInfoList.SetItemText(curItem,3,strValue); 
		 
		pQueryRecordset->MoveNext(); 
		curItem++; 
 
	} 
   } 
    catch(_com_error *e) 
	{ 
	 AfxMessageBox(e->ErrorMessage()); 
	}  
   } 
	pQueryRecordset->Close(); 
	pQueryRecordset=NULL; 
} 
 
//参数:影碟名字(CString) 
//返回值:tbDVDInfo表中影碟的编号DVDID(int),若错误返回-1 
int CRentDlg::QueryDVDID(CString dvdName) 
{ 
	_RecordsetPtr	pDVDIDRecordset; 
    pDVDIDRecordset.CreateInstance(__uuidof(Recordset));    
	int value; 
	CString strSQL,strValue; 
	strSQL.Format("select DVDID from tbDVDInfo where DVDName='%s'",dvdName); 
	try 
	{	pDVDIDRecordset->Open(_variant_t(strSQL),  
		                      m_pConnection.GetInterfacePtr(),	 
		                      adOpenDynamic, 
			                  adLockOptimistic, 
			                  adCmdText); 
	} 
	catch(_com_error *e) 
	{	AfxMessageBox(e->ErrorMessage()); 
        value=-1; 
		return value; 
	}   
	_variant_t var; 
    var = pDVDIDRecordset->GetCollect("DVDID"); 
	if(var.vt != VT_NULL) 
	{	strValue = (LPCSTR)_bstr_t(var); 
		//把字符串转换为整型 
	    value=atoi(strValue); 
	} 
	else value=-1; 
 
	pDVDIDRecordset->Close(); 
	pDVDIDRecordset=NULL; 
	return value; 
} 
 
void CRentDlg::AddDVDNum(CString strDVDID) 
{ 
	_RecordsetPtr	pDVDRecordset; 
    pDVDRecordset.CreateInstance(__uuidof(Recordset));	 
	_bstr_t vSQL; 
    vSQL="select * from tbDVDInfo where DVDID="+strDVDID;     
	try 
	{ 
		pDVDRecordset->Open(vSQL, 
			m_pConnection.GetInterfacePtr(),	  
			adOpenDynamic, 
			adLockOptimistic, 
			adCmdText); 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
		return; 
	}   
	if((pDVDRecordset->BOF)&&(pDVDRecordset->adoEOF)) 
	{ MessageBox("error!"); 
	  pDVDRecordset->Close(); 
	  pDVDRecordset=NULL; 
      return; 
	}	 
	_variant_t var; 
	CString strValue; 
	int dvdNum; 
	try  
	{	 
	   var=pDVDRecordset->GetCollect("Num"); 
	  if(var.vt != VT_NULL) 
	  { 
		strValue = (LPCSTR)_bstr_t(var); 
		dvdNum=atoi(strValue); 
		dvdNum+=1; 
		strValue.Format("%d",dvdNum); 
		pDVDRecordset->PutCollect("Num",_variant_t(strValue)); 
		pDVDRecordset->Update(); 
	  } 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
	}   
	pDVDRecordset->Close(); 
	pDVDRecordset=NULL; 
 
} 
 
int CRentDlg::QueryDVDIDSP(CString dvdName) 
{     
	_CommandPtr pIDCommand; 
	pIDCommand.CreateInstance(__uuidof(Command)); 
	_bstr_t storeproc("getIDbyName"); 
	_variant_t var; 
	CString strValue; 
	int IDvalue; 
 try{	 
	pIDCommand->ActiveConnection=m_pConnection; 
	pIDCommand->CommandText=storeproc; 
	pIDCommand->CommandType=adCmdStoredProc; 
	pIDCommand->Parameters->Refresh(); 
    pIDCommand->Parameters->Item[_variant_t((long)1)]->Value=_variant_t((LPCTSTR)dvdName); 
	_RecordsetPtr pIDRecordset; 
	pIDRecordset.CreateInstance(__uuidof(Recordset)); 
	 
    pIDRecordset=pIDCommand->Execute(NULL,NULL,adCmdStoredProc); 
	if((pIDRecordset->BOF)&&(pIDRecordset->adoEOF)) 
	{ 
		MessageBox("error!"); 
		pIDRecordset->Close(); 
		pIDRecordset=NULL; 
		return -1; 
	} 
	var=pIDRecordset->GetCollect("DVDID"); 
	pIDRecordset->Close(); 
	pIDRecordset=NULL; 
 
 } 
 catch(_com_error *e) 
 { 
	AfxMessageBox(e->ErrorMessage()); 
    return -1; 
 }  
 
 if(var.vt != VT_NULL) 
	{ 
	 strValue = (LPCSTR)_bstr_t(var); 
	 IDvalue=atoi(strValue); 
	 return IDvalue; 
	} 
   else return-1; 
}    
 
 
CString CRentDlg::QueryDVDNameSP(CString dvdID) 
{ 
	_CommandPtr pNameCommand; 
	pNameCommand.CreateInstance(__uuidof(Command)); 
	_bstr_t storeproc("getNamebyID"); 
	_variant_t var; 
	long ID=atol(dvdID); 
	CString strValue=""; 
	try{	 
		pNameCommand->ActiveConnection=m_pConnection; 
		pNameCommand->CommandText=storeproc; 
		pNameCommand->CommandType=adCmdStoredProc; 
		pNameCommand->Parameters->Refresh(); 
		pNameCommand->Parameters->Item[_variant_t((long)1)]->Value=_variant_t(ID); 
		_RecordsetPtr pNameRecordset; 
		pNameRecordset.CreateInstance(__uuidof(Recordset)); 
		 
		pNameRecordset=pNameCommand->Execute(NULL,NULL,adCmdStoredProc); 
		if((pNameRecordset->BOF)&&(pNameRecordset->adoEOF)) 
		{ 
			MessageBox("error!"); 
			pNameRecordset->Close(); 
			pNameRecordset=NULL; 
			return strValue; 
		} 
		var=pNameRecordset->GetCollect("DVDName"); 
		pNameRecordset->Close(); 
		pNameRecordset=NULL; 
		 
	} 
	catch(_com_error *e) 
	{ 
		AfxMessageBox(e->ErrorMessage()); 
		return strValue; 
	}  
	 
	if(var.vt != VT_NULL) 
	{ 
		strValue = (LPCSTR)_bstr_t(var);	 
	} 
	return strValue; 
	 
} 
 
void CRentDlg::OnCheckDate()  
{ 
	// TODO: Add your control notification handler code here 
	if(m_check_Date==FALSE) 
	{ 
		m_check_Date=TRUE; 
		m_DateFrom.EnableWindow(TRUE); 
		m_DateTo.EnableWindow(TRUE); 
	} 
	else 
	{ 
        m_check_Date=FALSE; 
		m_DateFrom.EnableWindow(FALSE); 
		m_DateTo.EnableWindow(FALSE); 
	} 
} 
 
 
 
 
void CRentDlg::DeleteRecordTran(CString ID, CString dvdName) 
{ 
	_bstr_t vSQL; 
	_variant_t RecordsAffected; 
	_variant_t var; 
	CString strValue; 
	int dvdNum; 
	_RecordsetPtr	pDVDRecordset; 
    pDVDRecordset.CreateInstance(__uuidof(Recordset)); 
	//获得影碟编号DVDID 
	int dvdID=QueryDVDIDSP(dvdName); 
	CString strDVDID; 
	strDVDID.Format("%d",dvdID); 
 
	vSQL="delete from tbRentInfo where ID="+ID; 
	try 
	{	m_pConnection->BeginTrans(); 
 
		m_pConnection->Execute(_bstr_t(vSQL),&RecordsAffected,adCmdText); 
		vSQL="select * from tbDVDInfo where DVDID="+strDVDID; 
		pDVDRecordset->Open(vSQL, 
			m_pConnection.GetInterfacePtr(),	  
			adOpenDynamic, 
			adLockOptimistic, 
			adCmdText); 
		if((pDVDRecordset->BOF)&&(pDVDRecordset->adoEOF)) 
		{ MessageBox("error!"); 
		pDVDRecordset->Close(); 
		pDVDRecordset=NULL; 
		return; 
		} 
		var=pDVDRecordset->GetCollect("Num"); 
		if(var.vt != VT_NULL) 
		{ 
			strValue = (LPCSTR)_bstr_t(var); 
			dvdNum=atoi(strValue); 
			dvdNum+=1; 
			strValue.Format("%d",dvdNum); 
			pDVDRecordset->PutCollect("Num",_variant_t(strValue)); 
			pDVDRecordset->Update(); 
		} 
 
		m_pConnection->CommitTrans(); 
	} 
	catch(_com_error *e) 
	{ 
		m_pConnection->RollbackTrans(); 
		AfxMessageBox(e->ErrorMessage()); 
	} 
}