CEmployees 类:
用来对应人事表插入、删除、修改、查询的类,是这个模块的直接调用的核心,
通常由窗体层面调用此类(MFC框架)。需要注意的一点是,这个类必须依赖一个公共的变量(PubTableName,当前正在使用表的名字)才能正常工作,虽然考虑过默认参数,但是为了程序更改和扩展,最终放弃了这个方案,如果一定要用可以使用重载的方法来扩充。
CEmployees 类的函数:
构造/析构函数:
CEmployees 包括ADOConn 的初始连接和sqlstr的初始化
~CEmployees 无特别用处
-------------------------------------------------------------------------------------------------------------------
成员函数:
Insert 插入一个新的记录,调用前必须首先填好类的Hrt这个变量然后调用这个函数。注意:表的序号是自动增加类型
Mofidy 修改一个记录,必须提供数据表中的序号、Hrt和 PubTableName。
GetInfo 得到一个记录的内容,必须提供数据表中的序号。
Del 删除一个记录,必须提供数据表中的序号。
HaveGH 判定一个工号是否已经存在。
VartToCString1 从数据库中读到数据,然后转化成CString,已经考虑到了读到NULL的情况
VartToCString 同上但是最终放弃,不明原因的错误老是出现。
------------------------------------------------------------------------------------------------------------
Employees 成员函数详细说明:
Insert :
函数原型:int CEmployees::Insert(CString TableName)
参数: 参数:
TableName:当前正在用的表名字,如 200708 200706 。
函数内部对应Hrt来动态生成SQL的insert语句,如果Hrt一个字变量是空,那么在插入时,自动填上空。但是有几个特殊以下说明:工号,如果有重复那么是无法插入新的记录的。 Hrt的进长日期和出生日期一但确定为正常,那么Hrt的应签定合同日期和应签定社保险日期及入厂年龄会自动计算并填入。而合同签定日一旦确定,合同到期日期也会填入。这里得感谢LeaF的方法,的确是十分不错。而且方法本来就是他创造的之不过VC、VB的写法不一样。
GetInfo :
函数原型:int CEmployees::GetInfo(UINT Id, CString TableName, HRT &hrt)
给出于Id,和TableName,调用以后Hrt会填充进数据表中相应记录的内容。
附上部分代码:
BOOL CEmployees::HaveGH(CString GH, CString TableName)
{
sqlstr ="select 工号 from " + TableName + " WHERE 工号='" + GH + "'" ;
//sql ...
_RecordsetPtr pRecordSet;
pRecordSet=adocnn.GetRecordSet(sqlstr);
if (pRecordSet->adoEOF)//喂这里可是BOOL类型哦
{
//没有这条记录返回false
return FALSE;
}
else
{
//有这一条记录。
return TRUE;
}
}
-------------------------------------------------------
//
int CEmployees::Del(UINT id, CString TableName)
{
//进来是unsigned int 类型转化
CString strId;
strId.Format("%d",id);
//============================
sqlstr = "delete from " + TableName + " where 序号 = " + strId ;
adocnn.ExecuteSQL(sqlstr);
//adocnn.ExitConnect();
//状态码,未使用
return 0;
}
---------------------------------------------------------
CString CEmployees::VarToCString1(CString strZD, _RecordsetPtr pRset)
{
CString strValue;
_variant_t var;
var = pRset->GetCollect((_variant_t)strZD);
if (var.vt != VT_NULL)
{
strValue = (LPCSTR)_bstr_t(var);
}
else if(var.vt != VT_EMPTY)
{
strValue = "";
}
else
{
strValue = "";
}
return strValue;
}
========================重头戏,是这个==============================
int CEmployees::Insert(CString TableName)
{
CString Sqlc = "";
CString Sqlv = "";
CString DeptIndex = "";
//1。部门
if(! hrt.DeptIn.IsEmpty())
{
if(hrt.DeptIn.Mid(3,4)=="厂部")
{
Sqlc+="部门,";
Sqlv+="'厂部',";
}
else
{
Sqlc=Sqlc + "部门,";
Sqlv=Sqlv + "'" + hrt.DeptIn.Mid(3,6) +"',";
}
Sqlc+="DeptIndex,";
Sqlv+="'" +hrt.DeptIn +"',";
}
else
{
Beep(500,200);
}
//2.工号这里只检查是否空,长度的问题留给窗体函数
if (hrt.No.IsEmpty() == FALSE)
{
if (HaveGH(hrt.No,PubTableName))
{
Beep(500,500);
AfxMessageBox("工号不能重复啊!");
return 1;
}
else
{
Sqlc+="工号,";
Sqlv+="'" +hrt.No +"',";
AfxMessageBox("工号码没重复,OK!");
}
}
else
{
//工号为空!
Beep(500,200);
}
//3.姓名
if (!hrt.Name.IsEmpty())
{
Sqlc+="姓名,";
Sqlv+="'" + hrt.Name + "',";
}
else
{
Beep(500,200);
AfxMessageBox("姓名不能为空!");
return 1;
}
//4姓别
if(!hrt.Sex.IsEmpty())
{
Sqlc += "性别,";
Sqlv += "'" + hrt.Sex + "',";
}
//5职务
if (!hrt.Headship.IsEmpty())
{
Sqlc += "职务,";
Sqlv += "'" + hrt.Headship + "',";
}
//6进厂日期
if (!hrt.Jcrq.IsEmpty())
{
Sqlc += "进厂日期,";
Sqlv += "'" + hrt.Jcrq + "',";
//-----------------------------------------------------------------
//时间转化成oletime
COleVariant VariantTimeJcrq;
COleDateTime DateTimeJcrq;
//进厂日期
VariantTimeJcrq = hrt.Jcrq;
VariantTimeJcrq.ChangeType(VT_DATE);
DateTimeJcrq = VariantTimeJcrq;
//-----------------------------------------------------------
DateTimeJcrq +=30;
//应签定社保日期
hrt.Yqhtrq = DateTimeJcrq.Format(_T("%Y-%m-%d"));
//应签定合同日期
hrt.Yqsb = DateTimeJcrq.Format(_T("%Y-%m-%d"));
{
Sqlc += "应签合同日期,";
Sqlv += "'" + hrt.Yqhtrq + "',";
Sqlc += "应办社保日期,";
Sqlv += "'" + hrt.Yqsb + "',";
}
//-------------------------------------------------------------
//-----------------------------------------------------------------
}
else
{
AfxMessageBox("进厂日期,没有?");
return 1;
}
//7出生日期
if (!hrt.Csrq.IsEmpty())
{
Sqlc += "出生日期,";
Sqlv += "'" + hrt.Csrq + "',";
//===================================================================
//时间转化成oletime
COleVariant VariantTime;
COleDateTime DateTime;
//出生日期
VariantTime = hrt.Csrq;
VariantTime.ChangeType(VT_DATE);
DateTime = VariantTime;
//入场年龄
//时间转化成oletime
COleVariant VariantTime1;
COleDateTime DateTime1;
//入场日期
VariantTime1 = hrt.Jcrq;
VariantTime1.ChangeType(VT_DATE);
DateTime1 = VariantTime1;
//入厂年龄 :入场日期-出生日期
int i;//临时变量
DateTime1=DateTime1-DateTime;
i=DateTime1.GetYear();
i-=1900;
hrt.Rcage=i;
//CString转化
CString strAge;
strAge.Format("%d",hrt.Rcage);
//Sql语句
Sqlc += "入厂年龄,";
Sqlv += "'" + strAge + "',";
}
else
{
AfxMessageBox("出生日期,没有?");
return 1;
}
//离开厂日期
if (!hrt.Lcrq.IsEmpty())
{
Sqlc += "离厂日期,";
Sqlv += "'" + hrt.Lcrq + "',";
}
//身份证号码 长度有效后续进行。
if (!hrt.IdCard.IsEmpty())
{
Sqlc += "身份证号码,";
Sqlv += "'" + hrt.IdCard +"',";
}
//地址
if (!hrt.Address.IsEmpty())
{
Sqlc += "住址,";
Sqlv +="'" + hrt.Address + "',";
}
//合同签定日期
if (!hrt.Htrq.IsEmpty())
{
Sqlc += "合同签订日,";
Sqlv += "'" + hrt.Htrq +"',";
//=====合同到期日================
//时间转化成oletime
COleVariant VariantTime;
COleDateTime DateTime;
//合同签定日期
VariantTime = hrt.Htrq;
VariantTime.ChangeType(VT_DATE);
DateTime = VariantTime;
//一年默认365天
DateTime+=365;
hrt.Htdrq = DateTime.Format(_T("%Y-%m-%d"));
Sqlc += "合同到期日,";
Sqlv += "'" + hrt.Htdrq +"',";
}
//入社保日期
if (!hrt.Rsbrq.IsEmpty())
{
Sqlc += "入社保日期,";
Sqlv += "'" + hrt.Rsbrq +"',";
//入社会保险了
Sqlc += "社保,";
Sqlv += "'Y',";
}
//入商保日期
if (!hrt.Rbbrq.IsEmpty())
{
Sqlc += "入商保日期,";
Sqlv += "'" + hrt.Rbbrq + "',";
//=========
Sqlc += "商保,";
Sqlv += "'Y',";
}
//退商保日期
if (!hrt.Cbbrq.IsEmpty())
{
Sqlc += "退商保日期,";
Sqlv += "'" + hrt.Cbbrq +"',";
}
//办就业证日期
if (!hrt.Bjyrq.IsEmpty())
{
Sqlc += "办就业证日期,";
Sqlv += "'" + hrt.Bjyrq +"',";
}
//办暂住证日期
if(!hrt.Bzrq.IsEmpty())
{
Sqlc += "办暂住证日期,";
Sqlv += "'" + hrt.Bzrq +"',";
}
//备注
if (!hrt.Memo.IsEmpty())
{
Sqlc += "备注,";
Sqlv += "'" + hrt.Memo+"',";
}
//收尾工作
Sqlc = Sqlc.Left(Sqlc.GetLength()-1);
Sqlv = Sqlv.Left(Sqlv.GetLength()-1);
//sql语句完成.
sqlstr="insert into " + PubTableName + "(" +Sqlc + ") values (" + Sqlv +")";
AfxMessageBox(sqlstr);
//执行sql 语言。
adocnn.ExecuteSQL(sqlstr);
return 0;
}