// 这是我的工作代码, 请注意临界区变量: csDaode 的用法. 相信你能够看懂!extern CDaoDatabase gdb;  // 全局变量
extern CCriticalSection csDao; //for Jet 全局变量
/////////////////////////////////////////
//柜员更改口令
void CPos102Thread::RespondToChangePwd()
{
CString strClerkID;
CString strOldPwd;
CString strNewPwd; char aucClerkID[7];
char aucOldPwd[7];
char aucNewPwd[7];

aucClerkID[6] = aucOldPwd[6] = aucNewPwd[6] = 0; CopyMemory(aucClerkID, m_inBuff.q_ChangePwd.aucPayeeID, 6);
CopyMemory(aucOldPwd, m_inBuff.q_ChangePwd.aucPwd, 6);
CopyMemory(aucNewPwd, m_inBuff.q_ChangePwd.aucNewPwd, 6); WORD lw = MAKEWORD (m_inBuff.msgHead.ucCmdCode, m_inBuff.msgHead.ucSubCmdCode);
WORD hw = MAKEWORD (m_inBuff.msgHead.ucPosNo,  m_inBuff.msgHead.ucNum); WPARAM wParam = MAKEWPARAM(lw, hw);
LPARAM lParam = MAKELPARAM(MAKEWORD('Q',0), 0);// m_pMainWnd->PostMessage(PM_REQ_PROMPT+102, wParam, lParam); WORD wErrorCode = 0x0000; strClerkID.Format(_T("%s"), aucClerkID);
strOldPwd.Format(_T("%s"), aucOldPwd);
strNewPwd.Format(_T("%s"), aucNewPwd); strClerkID.TrimLeft();
strOldPwd.TrimLeft();
strNewPwd.TrimLeft(); CLERK clerk; if(gClerkMap.Lookup(strClerkID, clerk))
{
if (clerk.m_cPwd!=strOldPwd)
wErrorCode = PERR1_CLERK_PWD;
else
if (!(clerk.m_iPriv & PMS_GATHERING))
wErrorCode = PERR1_CLERK_PMS;
}
else
wErrorCode = PERR1_CLERK_ID; if (!wErrorCode)
{
csDao.Lock(); CFrClerkSet rs(&gdb);
rs.m_strFilter.Format("cEmpID='%s'", strClerkID);
try
{
rs.Open(dbOpenDynaset);
rs.Edit();
rs.m_cPwd = strNewPwd;
rs.Update();
rs.Close();
}
catch(CDaoException* e)
{
e->ReportError();
e->Delete();
wErrorCode = DAO_OPEN_ERROR;
}

csDao.Unlock();
}

int nLength = (int) sizeof(PosMsgHead); if (!wErrorCode)
{
nLength += (int) sizeof(QA_LogOnOffId);
lParam = MAKELPARAM(MAKEWORD('A', 0), 0);
clerk.m_cPwd = strNewPwd;
gClerkMap.SetAt(strClerkID, clerk);
}
else

nLength += (int) sizeof(A_Error);
m_outBuff.msgHead.ucSubCmdCode = PCMD_ERROR;
m_outBuff.a_Error.ucCmdCode = m_inBuff.msgHead.ucCmdCode;
m_outBuff.a_Error.ucSubCmdCode = m_inBuff.msgHead.ucSubCmdCode;
m_outBuff.a_Error.wErrorCode = wErrorCode;
m_outBuff.a_Error.aucError[0] = 0;
// lParam = MAKELPARAM(MAKEWORD('A', 0), 0);
lParam = MAKELPARAM(MAKEWORD('E', 0),  wErrorCode);
} SendMsgToDCS(nLength); //向DCS发消息
m_pMainWnd->PostMessage(PM_REQ_PROMPT+102, wParam, lParam);}