📄 user.cpp
字号:
// User.cpp : 实现文件
//
#include "stdafx.h"
#include "StudentScore.h"
#include "User.h"
//CADOStorage
CADOStorage::CADOStorage():CADODataset()
{
SetConnection(theApp.m_pDBCon);
}
CADOStorage::~CADOStorage()
{
}
void CADOStorage::ExecInsertSql(CString TblName,
CString Fldlist,
CString ValueList)
{
CString Sqlstr;
Sqlstr="Insert into " + TblName + " (" + Fldlist +
") values("+ValueList+")";
ExecSql(Sqlstr);
}
void CADOStorage::ExecUpdateSql(CString TblName,
CString UpdateStr,
CString Constr)
{
CString Sqlstr;
Sqlstr="UPdate " + TblName + " set " + UpdateStr + " " + Constr;
ExecSql(Sqlstr);
}
void CADOStorage::ExceDeleteSql(CString TblName,CString Constr)
{
CString Sqlstr;
Sqlstr="delete from " + TblName + " " + Constr;
ExecSql(Sqlstr);
}
// CUser
CUser::CUser()
{
m_pStorage=NULL;
m_TblName="SysUser";
m_pStorage=new CADOStorage();
ASSERT(m_pStorage!=NULL);
m_pStorage->OpenSql(m_TblName);
}
CUser::~CUser()
{
if (m_pStorage!=NULL)
{
delete m_pStorage;
m_pStorage=NULL;
}
m_NameList.RemoveAll();
}
void CUser::GetUserNames()
{
CString name;
m_NameList.RemoveAll();
m_pStorage->MoveFirst();
while(!m_pStorage->IsEof())
{
m_pStorage->GetFieldValue("用户名",name);
m_NameList.AddTail(name);
m_pStorage->MoveNext();
}
}
// CUser 成员函数
bool CUser::Check(CString UserName,CString Password)
{
m_pStorage->OpenSql(m_TblName,"*","where 用户名='"+UserName+"'");
m_pStorage->GetFieldValue("密码",m_Password);
if(m_Password==Password)
{
m_pStorage->GetFieldValue("用户名",m_UserName);
m_pStorage->GetFieldValue("权限",m_Right);
m_LoginDate=CTime::GetCurrentTime();
return true;
}
else
{
return false;
}
}
//CBaseTbl
CBaseTbl::CBaseTbl()
{
m_TblName="表说明";
}
CBaseTbl::~CBaseTbl()
{
}
void CBaseTbl::GetTblnames()
{
m_TblList.RemoveAll();
m_Storage.OpenSql(m_TblName,"中文名称","where 表属性=0","order by 编号");
m_Storage.MoveFirst();
CString name;
while(!m_Storage.IsEof())
{
m_Storage.GetFieldValue(0,name);
m_TblList.AddTail(name);
m_Storage.MoveNext();
}
}
bool CBaseTbl::SelectUnionTbl(CString StrTblname,
CString& Realtbl,
bool ByRealTblName)
{
//1.取得真实表名
if(!ByRealTblName)
{
m_Storage.OpenSql(m_TblName,"*","where 中文名称='"+StrTblname+"'");
m_Storage.GetFieldValue("表名称",Realtbl);
}
else
{
m_Storage.OpenSql(m_TblName,"*","where 表名称='"+Realtbl+"'");
}
//2.生成联合sql语句
CString sqlstr;
bool IsSingleTbl;
m_Storage.GetFieldValue("独立表",IsSingleTbl);
if(IsSingleTbl)
{
sqlstr="select * from "+Realtbl;
}
else
{
CString ExtraTblname=Realtbl;//外部表字符串
CString FTblname;
CString fldname; //字段字符串
CString Dispfldname;
CString MKName,FKName; //主字段,对应字段
CString ConStr; //条件
int FKCount; //外键个数
m_Storage.GetFieldValue("外键个数",FKCount);
sqlstr="select "+Realtbl+".* ";
for(int i=0;i<FKCount;i++)
{
fldname="显示字段"+IntToStr(i);
m_Storage.GetFieldValue(fldname,Dispfldname);
fldname="外部表"+IntToStr(i);
m_Storage.GetFieldValue(fldname,FTblname);
fldname="字段"+IntToStr(i);
m_Storage.GetFieldValue(fldname,MKName);
fldname="外键"+IntToStr(i);
m_Storage.GetFieldValue(fldname,FKName);
sqlstr=sqlstr+","+FTblname+"."+Dispfldname+" ";
ExtraTblname+=","+FTblname;
if(i==0)
{
ConStr+=Realtbl+"."+MKName+"="+FTblname+"."+FKName;
}
else
{
ConStr+=" and "+Realtbl+"."+MKName+"="+FTblname+"."+FKName;
}
}
sqlstr+=" from "+ExtraTblname+" where "+ConStr;
}
//3.查询得出结果
if(!Realtbl.IsEmpty()&&(Realtbl!=""))
{
m_Storage.Open(sqlstr,CADODataset::openQuery);
return true;
}
else
return false;
}
void CBaseTbl::RefreshList(CListCtrl& List1)
{
if(m_Storage.IsOpen())
{
m_Storage.FillList(List1);
}
}
bool CBaseTbl::GetFieldRecord(CPtrArray& FieldArray,
CString ctblname,
CString constr) //单表记录数组
{
ASSERT(ctblname!="");
//1.判断及清理工作
if (m_Storage.IsOpen())
{
m_Storage.Close();
}
int ArrayCount=(int)FieldArray.GetSize();
for(int j=0;j<ArrayCount;j++)
{
delete FieldArray.GetAt(j);
}
FieldArray.RemoveAll();
CFieldRecord* fldrec;
CADOFieldInfo fldinfo;
CString fldvalue;
//2.判断记录位置
bool IsZeroRecord;//记录数为0
if(constr == "")//添加记录
{
m_Storage.OpenSql(ctblname);
if (m_Storage.GetRecordCount()>0)
{
m_Storage.MoveLast();
IsZeroRecord=false;
}
else
IsZeroRecord=true;
}
else
{
m_Storage.OpenSql(ctblname,"*",constr);
if(m_Storage.GetRecordCount()>0)
{
m_Storage.MoveFirst();
IsZeroRecord=false;
}
else
{
IsZeroRecord=true;
return false;
}
}
int count=m_Storage.GetFieldCount();
//3.添加字段记录到指针数组
for(int i=0;i<count;i++)
{
fldrec=new CFieldRecord();
if(IsZeroRecord)
{
fldvalue="";
}
else
{
m_Storage.GetFieldValue(i,fldvalue);
}
m_Storage.GetFieldInfo(i,&fldinfo);
strcpy(fldrec->FKtbl,ctblname);
strcpy(fldrec->FieldName,fldinfo.m_strName);
strcpy(fldrec->Value,fldvalue);
switch(fldinfo.m_nType)
{
case VT_DATE:
fldrec->IsStrType=true;
fldrec->IsBool =false;
break;
case VT_BSTR:
fldrec->IsStrType=true;
fldrec->IsBool =false;
break;
case 202:
fldrec->IsStrType=true;
fldrec->IsBool =false;
break;
case VT_BOOL:
fldrec->IsBool=true;
fldrec->IsStrType=false;
break;
default:
fldrec->IsStrType=false;
fldrec->IsBool =false;
break;
}
fldrec->pFK=NULL;
fldrec->IsVisible=true;
FieldArray.Add(fldrec);
}
//添加外键信息
AddExtraFieldRecord(FieldArray,ctblname);
return true;
}
bool CBaseTbl::RemoveRecord(int CurRecordPos)
{
if(!m_Storage.IsOpen())
{return false;}
ASSERT(CurRecordPos>=0);
if (m_Storage.GetRecordCount()>0)
{
m_Storage.MoveFirst();
while(CurRecordPos-->0)
{ m_Storage.MoveNext();}
}
m_Storage.Delete();
return true;
}
void CBaseTbl::ReQuery(CString TblName)
{
m_Storage.OpenSql(TblName);
}
void CBaseTbl::ExecSql(CString SqlStr)
{
m_Storage.ExecSql(SqlStr);
}
void CBaseTbl::AddExtraFieldRecord(CPtrArray& FieldArray,
CString ctblname)
{
CADOStorage mk;
CFieldRecord* fldrec;//外键信息指针
CFieldRecord* pMfldrec;//主键信息指针
mk.OpenSql("表说明","*","where 表名称='"+ctblname+"'");
if(mk.GetRecordCount()==0)
{
return ;
}
else
{
bool IsSingleTbl;
mk.GetFieldValue("独立表",IsSingleTbl);
if(IsSingleTbl)//是独立表
{
return ;
}
else
{
//添加外键列表
int fkcount=0;
mk.GetFieldValue("外键个数",fkcount);
CString name,value;//
char a[10];
for(int i=0;i<fkcount;i++)
{ //添加外键列表
fldrec=new CFieldRecord();
itoa(i,a,10);
name="外键";
name=name+a;
mk.GetFieldValue(name,value);
strcpy(fldrec->FieldName,value);
name="外部表";
name=name+a;
mk.GetFieldValue(name,value);
strcpy(fldrec->FKtbl,value);
name="显示字段";
name=name+a;
mk.GetFieldValue(name,value);
strcpy(fldrec->DisplayName ,value);
//确定
name="字段";
name=name+a;
mk.GetFieldValue(name,value);
fldrec->pFK=NULL;
//确定主字段,添加到链表尾部
for(int j=0;j<FieldArray.GetSize();j++)
{
pMfldrec=(CFieldRecord*)FieldArray.GetAt(j);
if(_stricmp(value,pMfldrec->FieldName)==0)
{
pMfldrec->pFK=fldrec;
break;
}
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -