📄 addrelationinfo.cpp
字号:
// 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 + -