{
if(m_pOperate_List)
{
delete []m_pOperate_List;
m_pOperate_List=NULL;
}
m_Count=0;
while (m_CombOper.GetCount())
{
m_CombOper.DeleteString(m_CombOper.GetCount()-1);
}
m_StaPass.SetWindowText("");
m_Count=ReadOperateWithOperateID(&g_adoRecordSet,0,m_pOperate_List);
for(int i=0;i<m_Count;i++)
{
m_CombOper.InsertString(m_CombOper.GetCount(),m_pOperate_List[i].Operate_Name);
m_CombOper.SetItemData(m_CombOper.GetCount()-1,m_pOperate_List[i].Operate_ID);
}
m_CombOper.SetCurSel(0);
m_StaPass.SetFocus();
m_StaPass.SendMessage(EM_SETSEL,(int) 0,(int)200);
m_StaPass.Invalidate(TRUE);
}
void CLoginDlg::OnOK()
{
UpdateData(TRUE);
if (m_pOperate_List)
{
int n=m_CombOper.GetCurSel();
if (m_Pass!=m_pOperate_List[n].Operate_Password)
{
AfxMessageBox("密碼錯誤");
m_StaPass.SetFocus();
m_StaPass.SendMessage(EM_SETSEL,(int) 0,(int)200);
m_StaPass.Invalidate(TRUE);
return;
}
else
{
memcpy(&g_Cur_Operate,m_pOperate_List+n,sizeof(TABLE_OPERATE));
CDialog::OnOK();
}
}
else
{
AfxMessageBox("open database error");
this->EndDialog(IDNO);
}
CDialog::OnOK();
}
int ReadOperateWithOperateID(void *pVoid,int Operate_ID,TABLE_OPERATE *&pOperate_List)
{
CAdoRecordSet *pRecord=NULL;
CDBInterface *pDBInterface=NULL;
char *pTableBuff=NULL;
int iBuffLen=0;
#if DATABASE_METHOD == DATABASE_METHOD_ADO
pRecord=(CAdoRecordSet *)pVoid;
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
pDBInterface=(CDBInterface *)pVoid;
#endif
int nCount=0;
if (pOperate_List)
{
free(pOperate_List);
pOperate_List=NULL;
}
if ((pRecord==NULL&&pDBInterface==NULL) || Operate_ID<0 )
{
return 0;
}
char sql[1024];
TABLE_OPERATE *pReturn=NULL;
BOOL bRet=FALSE;
switch(Operate_ID)
{
case 0:
sprintf(sql,"SELECT TOP 5000 * FROM TABLE_Operate order by ID");
break;
default :
sprintf(sql,"SELECT TOP 5000 * FROM TABLE_Operate\
where ID=%d ",Operate_ID);
}
#if DATABASE_METHOD == DATABASE_METHOD_ADO
bRet=pRecord->Open(sql);
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
bRet=pDBInterface->odbc_select(sql,pTableBuff,&iBuffLen,FALSE);
#endif
if (bRet>0)
{
#if DATABASE_METHOD == DATABASE_METHOD_ADO
nCount=pRecord->GetRecordCount();
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
nCount=bRet;
#endif
if (nCount<=0)
{
return 0;
}
nCount=nCount>MAX_RECORDSET_NUM?MAX_RECORDSET_NUM:nCount;
pReturn=(TABLE_OPERATE *)malloc(sizeof(TABLE_OPERATE)*nCount);
memset(pReturn,0x0,sizeof(TABLE_OPERATE)*nCount);
#if DATABASE_METHOD == DATABASE_METHOD_ADO
for(int i=0;i<nCount;i++)
{
pRecord->GetCollect((long)0,(pReturn+i)->Operate_ID);
CString sTemp;
pRecord->GetCollect(1,sTemp);
sprintf((pReturn+i)->Operate_Name,sTemp);
pRecord->GetCollect(2,sTemp);
sprintf((pReturn+i)->Operate_Password,sTemp);
pRecord->GetCollect(3,(pReturn+i)->Operate_Degree);
pRecord->GetCollect(4,(pReturn+i)->Operate_Degree_ID);
pRecord->GetCollect(5,(pReturn+i)->Operate_Dept_ID);
pRecord->GetCollect(6,(pReturn+i)->Operate_Create_Time);
pRecord->GetCollect(7,sTemp);
sprintf((pReturn+i)->Operate_Tele_Code,sTemp);
pRecord->GetCollect(8,sTemp);
sprintf((pReturn+i)->Operate_Remark,sTemp);
pRecord->MoveNext();
}
#else if DATABASE_METHOD == DATABASE_METHOD_ODBC
memcpy(pReturn,pTableBuff,sizeof(TABLE_OPERATE)*nCount);
if (pTableBuff)
{
delete pTableBuff;
pTableBuff=NULL;
}
#endif
}
pOperate_List=pReturn;
return nCount;
}