⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 addrelationinfo.cpp

📁 数据库操作源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// AddRelationInfo.cpp : implementation file
//

#include "stdafx.h"
#include "NanjingHospital.h"
#include "AddRelationInfo.h"
#include "MainFrm.h"
#include "LeftTreeView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAddRelationInfo dialog

#define ChunkSize 1024


CAddRelationInfo::CAddRelationInfo(CWnd* pParent /*=NULL*/)
	: CDialog(CAddRelationInfo::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAddRelationInfo)
	m_strName = _T("");
	m_strComName = _T("");
	m_strComAddre = _T("");
	m_strOfficeTel = _T("");
	m_strHomeAddre = _T("");
	m_strHomeTel = _T("");
	m_strMobile = _T("");
	m_strEmail = _T("");
	m_strWeb = _T("");
	m_OleBirthDay = COleDateTime::GetCurrentTime();
	m_strComment = _T("");
	m_strFirClass = _T("");
	m_strSecClass = _T("");
	//}}AFX_DATA_INIT
}


void CAddRelationInfo::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAddRelationInfo)
	DDX_Control(pDX, IDC_SECOND_CLASS, m_ComboSecond);
	DDX_Control(pDX, IDC_FIRST_CLASS, m_ComboFirst);
	DDX_Text(pDX, IDC_NAME, m_strName);
	DDX_Text(pDX, IDC_COMPANY_NAME, m_strComName);
	DDX_Text(pDX, IDC_COMPANY_ADDRESS, m_strComAddre);
	DDX_Text(pDX, IDC_OFFICE_TEL, m_strOfficeTel);
	DDX_Text(pDX, IDC_HOME_ADDRESS, m_strHomeAddre);
	DDX_Text(pDX, IDC_HOME_TEL, m_strHomeTel);
	DDX_Text(pDX, IDC_MOBILE, m_strMobile);
	DDX_Text(pDX, IDC_EMAIL, m_strEmail);
	DDX_Text(pDX, IDC_WEB, m_strWeb);
	DDX_DateTimeCtrl(pDX, IDC_BIRTHDAY, m_OleBirthDay);
	DDX_Text(pDX, IDC_COMMENT, m_strComment);
	DDX_CBString(pDX, IDC_FIRST_CLASS, m_strFirClass);
	DDX_CBString(pDX, IDC_SECOND_CLASS, m_strSecClass);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAddRelationInfo, CDialog)
	//{{AFX_MSG_MAP(CAddRelationInfo)
	ON_BN_CLICKED(IDC_INSERT_INFO, OnInsertInfo)
	ON_BN_CLICKED(IDC_PHOTO, OnPhoto)
	ON_CBN_SELENDOK(IDC_FIRST_CLASS, OnSelendokFirstClass)
	ON_BN_CLICKED(IDC_EDIT_INFO, OnEditInfo)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAddRelationInfo message handlers





/*******************************************************************
函数名称:OnInsertInfo() 
函数类型:void
函数参数:无
功能描述:1.完成添加对话框中“插入”按钮的消息响应处理
*******************************************************************/
void CAddRelationInfo::OnInsertInfo() 
{
	CString strSQL;									//定义变量
	UpdateData(TRUE);								//更新控件变量的值
	m_ComboFirst.GetWindowText(m_strFirClass);		//姓名、类别为空时返回
	m_ComboSecond.GetWindowText(m_strSecClass);
	m_strName.Remove(' ');                          //删除空格
	m_strFirClass.Remove(' ');
	m_strSecClass.Remove(' ');
	if(m_strName.IsEmpty()||m_strFirClass.IsEmpty()||m_strSecClass.IsEmpty())
	{
		AfxMessageBox("姓名和类别不能为空");
		return;
	}


	strSQL="select * from info";					//打开记录集 选择表名
	if(!OpenRecordSet(m_pRecordset,strSQL))
	{
		AfxMessageBox("没有成功打开数据表");
		return;
	}


	try
	{
		//添加数据,姓名只允许添加不允许更改
		m_pRecordset->AddNew();
		m_pRecordset->PutCollect("姓名",_variant_t(m_strName));
		m_pRecordset->PutCollect("工作单位",_variant_t(m_strComName));
		m_pRecordset->PutCollect("单位地址",_variant_t(m_strComAddre));
		m_pRecordset->PutCollect("办公电话",_variant_t(m_strOfficeTel));
		m_pRecordset->PutCollect("家庭地址",_variant_t(m_strHomeAddre));
		m_pRecordset->PutCollect("家庭电话",_variant_t(m_strHomeTel));
		m_pRecordset->PutCollect("移动电话",_variant_t(m_strMobile));
		m_pRecordset->PutCollect("入住病区",_variant_t(m_strEmail));
		m_pRecordset->PutCollect("床位号码",_variant_t(m_strWeb));
		m_pRecordset->PutCollect("相关病历",_variant_t(m_strComment));

		//类别
		CString strText;
		m_ComboFirst.GetWindowText(strText);
		m_pRecordset->PutCollect("一级类别",_variant_t(strText));
		m_ComboSecond.GetWindowText(strText);
		m_pRecordset->PutCollect("二级类别",_variant_t(strText));

		//出生日期 
		COleDateTime oleTime;
		CDateTimeCtrl* pDtCtrl=(CDateTimeCtrl*)GetDlgItem(IDC_BIRTHDAY);
		pDtCtrl->GetTime(oleTime);
		m_pRecordset->PutCollect("出生日期",_variant_t(oleTime));

		//照片
		if(!m_strPhotoPath.IsEmpty())
		{
			SetFileToDb(m_pRecordset,m_strPhotoPath);
		}
		//更新数据库
		m_pRecordset->Update();		
		//当前记录移动到最后
		m_pRecordset->MoveLast();
	}
	catch(_com_error e)
	{
		CString strError;
		strError.Format("警告: 插入信息时发生异常。 错误信息: %s",\
			e.ErrorMessage());
		AfxMessageBox(strError);
	}
	m_pRecordset->Close();	
	m_pRecordset=NULL;

	AfxMessageBox("插入成功!");
	
	//更新树
	CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
	CLeftTreeView* pLeftView;
	pLeftView=(CLeftTreeView*)pMainFrm->m_wndSplitter.GetPane(0,0);	
	pLeftView->ShowTree();
	//将各控件值置空
	ResetCtrlValue();
}






/*******************************************************************
函数名称:OnPhoto() 
函数类型:void
函数参数:无
功能描述:1.弹出消息对话框,用来选择图片路径
*******************************************************************/
void CAddRelationInfo::OnPhoto() 
{
	// TODO: Add your control notification handler code here
	CString strFilter="BMP Files(*.bmp)|*.bmp|All Files (*.*)|*.*||";
	CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,strFilter);
	if (dlg.DoModal()!=IDOK)
	{
		return;
	}
	//获取照片路径名
	m_strPhotoPath=dlg.GetPathName();
}







/*******************************************************************
函数名称:SetFileToDb(_RecordsetPtr &recPtr, CString strPath)
函数类型:void
函数参数:recPtr strPath
功能描述:1.将图片读入库,参数recPtr为记录集指针,
            参数strPath为图片文件记录集路径信息
*******************************************************************/
void CAddRelationInfo::SetFileToDb(_RecordsetPtr &recPtr, CString strPath)
{
	VARIANT varChunk;
	SAFEARRAY *psa;
	SAFEARRAYBOUND rgsabound[1]; 	
	//VT_ARRAY | VT_UI1	
	CFile f(strPath.operator LPCTSTR(),CFile::modeRead);
	BYTE  bVal[ChunkSize+1];
	long uIsRead=0;
	//Create a safe array to store the array of BYTES  
	while(1)
	{
		//读取照片
		uIsRead=f.Read(bVal,ChunkSize);
		if(uIsRead==0)break;
		rgsabound[0].cElements =uIsRead;
		rgsabound[0].lLbound = 0;		
		///创建SAFEARRAY对象 
		psa = SafeArrayCreate(VT_UI1,1,rgsabound);
		
		for(long index=0;index<uIsRead;index++)          
		{
			if(FAILED(SafeArrayPutElement(psa,&index,&bVal[index])))
				::MessageBox(NULL,"错误。","提示",MB_OK | MB_ICONWARNING);
		}		
		//为varChunk变量赋值
		varChunk.vt = VT_ARRAY|VT_UI1;
		varChunk.parray = psa;		
		//加入BLOB类型的数据
		try{
			recPtr->Fields->GetItem("照片")->AppendChunk(varChunk);
		}
		catch (_com_error &e)
		{
			CString str=(char*)e.Description();
			::MessageBox(NULL,str+"\n错误。","提示",MB_OK | MB_ICONWARNING);
		}
		::VariantClear(&varChunk);
		::SafeArrayDestroyData( psa);
		if(uIsRead<ChunkSize)break;
	}
	f.Close();
}







/*******************************************************************
函数名称:OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
函数类型:BOOL
函数参数:recPtr, strSQL
功能描述:1.将数据库中取出的_variant_t类型的变量转化为
            一个CString类型,简化了对数据库的访问
*******************************************************************/
BOOL CAddRelationInfo::OpenRecordSet(_RecordsetPtr &recPtr, CString &strSQL)
{
	CNanjingHospitalApp* pApp=(CNanjingHospitalApp*)AfxGetApp();
	//创建记录集对象
	m_pRecordset.CreateInstance(__uuidof(Recordset));
	try
	{
		//从数据库中打开表
		recPtr->Open(strSQL.AllocSysString(), 
			pApp->m_pConnection.GetInterfacePtr(),
			adOpenDynamic,
			adLockOptimistic,
			adCmdText);
	}
	catch (_com_error e)
	{
		CString strError;
		strError.Format("警告:打开数据表时发生异常。 错误信息: %s",\
			e.ErrorMessage());
		AfxMessageBox(strError);
		return FALSE;
	}
	return TRUE;

}





⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -