⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 card.cpp

📁 停车场用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
 {
  TDataSet *pQuery;
  CARDDATA a;
  int rc;

  pQuery = m_CardDataSource->DataSet;
  ZeroMemory(&a,sizeof(a));
  rc = (int)pQuery;
  while(rc){
    rc=ReworkCard(this,&a,0);
    if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
      if(GetOtherCardOnTable(&a,-1)==FALSE)
        break; //没有重复
     }
   }
  if(rc){
    rc=AppendDataSet(pQuery);
    if(rc)SaveCardRecord(pQuery,&a);
    if(rc)rc=PostDataSet(pQuery);
    if(!rc)ShowTableError(0);
   }
  if(rc){//显示Grid的nIndex行内容
    m_DelBut->Enabled=TRUE;
    m_EditBut->Enabled=TRUE;
   }
 }

//---------------------------------------------------------------------------
void __fastcall TCardForm::m_DelButClick(TObject *Sender)
{
  DELETEXT DelText;
  TADOQuery *pQuery,*pOther;
  CARDDATA a;
  int rc;

  pQuery = (TADOQuery *)m_CardDataSource->DataSet;
  rc = (int)pQuery;
  if(rc){
     ZeroMemory(&DelText,sizeof(DelText));
     rc=DeleteSomeRecord(this,&DelText);
    }
  if(rc){
    rc=DelText.nSome;
    if(rc==0)rc=DeleteOneCurCard(pQuery);//删除当前记录
    else rc=DeleteSomeCard(pQuery,DelText.nFrom,DelText.nTo);//删除一些记录
   }
  if(rc){ //正确删除
     rc= GetAllRecNum(pQuery);//获取总记录数
     if(rc<=0)
      {m_DelBut->Enabled=FALSE; m_EditBut->Enabled=FALSE;}
   }
 }
//删除当前一条记录
int DeleteOneCurCard(TADOQuery *pCardQuery)
 {
  static char pszText[]="是否真的永久(不可恢复地)删除\n\n"
                         "%s当前卡号为:\"%u\"的卡片?";
  CARDDATA a;
  char szBuf[200];
  int rc;

  ReadCardRecord(pCardQuery,&a);
  rc=GetCardFreeBeforeDelete(&a);//删除前,确认卡片是否被领用
  if(rc){
    wsprintf(szBuf,pszText,a.nCardNo);
    rc= Application->MessageBox(szBuf,GetMainTitle(),
           MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
    if(rc==IDYES)rc=TRUE;else rc=FALSE;
   }
  if(rc)rc=DelCurRecordOnTable(pCardQuery);//删除当前一条记录
  return(rc);
 }
//删除一些卡片
int DeleteSomeCard(TADOQuery *pCardQuery,int nCardNo1,int nCardNo2)
 {
  static char pszStop[]="没有查询到任何记录!";
  static char pszText[]="是否真的永久(不可恢复地)删除\n\n"
              "%s卡号从\"%u\"至\"%u\"的卡片?";
  TADOQuery *pOtherQuery;
  CARDDATA a;
  int rc,nFlag;
  int i,nRec;
  char szBuf[200];

  wsprintf(szBuf,"CARDNO>=%u and CARDNO<=%u",nCardNo1,nCardNo2);
  pOtherQuery = (TADOQuery *)GetOtherQuery();
  nRec=QueryOneADOTable(pOtherQuery,GetCardTableName(),NULL,NULL);
  if(nRec==0)
    Application->MessageBox(pszStop,GetMainTitle(),
         MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);

  if(nRec>0)rc=TRUE; else rc=FALSE;
  if(rc)nFlag = FirstDataSet(pOtherQuery);
  for(i=0;i<nRec && rc && nFlag;i++){
    ReadCardRecord(pOtherQuery,&a);
    rc=GetCardFreeBeforeDelete(&a);//删除前,确认卡片是否被领用
    if(rc) nFlag=NextDataSet(pOtherQuery);
   }
  if(rc){
    wsprintf(szBuf,pszText,nCardNo1,nCardNo2);
    rc= Application->MessageBox(szBuf,GetMainTitle(),
         MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
    if(rc==IDYES)rc=TRUE;else rc=FALSE;
   }
  if(rc){  //删除表中数据
    wsprintf(szBuf,"CARDNO>=%u and CARDNO<=%u",nCardNo1,nCardNo2);
    EmptyOneADOTable(pOtherQuery,GetCardTableName(),szBuf);
   }
  if(rc)OpenADOQuery(pCardQuery,NULL);//按原来条件查询数据表

  return(rc);
 }
//删除前,确认卡片是否被领用
int GetCardFreeBeforeDelete(CARDDATA *pCard)
 {
  static char pszText[]="部分待删除的卡片\n已经被领用!\n\n请先将卡片归还!";
  int rc;

  rc=TRUE;
  if(pCard->nHolderNo!=0){
    Application->MessageBox(pszText,GetMainTitle(),
         MB_OK|MB_ICONSTOP|MB_APPLMODAL);
    rc=FALSE;
   }
  return(rc);
 }
void __fastcall TCardForm::m_TextDBGridTitleClick(TColumn *Column)
{
 static char *pszName[]={"CARDNO","CARDHI,CARDID","CARDTYPE","HOLDERNO",
     "BEGINDATE","ENDDATE"};
 int rc;
 TADOQuery *pQuery;
 char szBuf[200];

  rc=Column->Index;
  if(rc>=0 && rc<sizeof(pszName)/sizeof(char *))
    pQuery = (TADOQuery *)m_CardDataSource->DataSet;
  else pQuery==NULL;
  if(pQuery!=NULL){     //获取SQL查询Where条件
     GetQueryWhereName(pQuery->SQL,szBuf);
     rc=QueryOneADOTable(pQuery,GetCardTableName(),szBuf,pszName[rc]);
    }
  else rc=0;
  if(rc>0)rc=TRUE; else rc=FALSE;
  m_DelBut->Enabled=rc;
  m_EditBut->Enabled=rc;
 }
//准备刷卡识别
void __fastcall TCardForm::m_BeginButClick(TObject *Sender)
{
 int rc;

 m_PauseBut->Enabled=TRUE;
 m_BeginBut->Enabled=FALSE;
//设置刷卡记录处理过程
  SetIODataProc(ReadCardProc);
}
void __fastcall TCardForm::m_PauseButClick(TObject *Sender)
{
 int rc;

 m_PauseBut->Enabled=FALSE;
 m_BeginBut->Enabled=TRUE;
//取消刷卡记录处理过程
  SetIODataProc(NULL);
}
//---------------------------------------------------------------------------
//刷卡识别处理(若数据未经处理,则返回FALSE)
int ReadCardProc(void *pIORec)
 {
  static BYTE nFlag;
  CARDDATA a;
  TDataSet *pQuery;
  IODATA *t;
  int rc,nDevice;

  rc=0;
  if(nFlag || pCardForm==NULL)return(rc); //防止重入
  nFlag=TRUE;

  t = (IODATA *)pIORec;
  if(t->nDataType==IODATA_CARDDATA){ //刷卡资料
    nDevice=GetCardDataOnForm(pCardForm,&a);//根据设定生成卡片数据
    if(t->nCRNo==LOWORD(nDevice) &&
            t->nReaderID==HIWORD(nDevice))
      rc=TRUE;
   }
  if(rc){
    pQuery = pCardForm->m_CardDataSource->DataSet;
    rc = (int)pQuery;
    if(rc){//获取相同内容的其它记录(0=>无,1=>其它记录)
      a.nCardID=t->nCardID;
      a.nCardHI = t->nCardHI;
      rc = !GetOtherCardOnTable(&a,-1);
     }
    if(rc){
      rc=AppendDataSet(pQuery);
      if(rc)SaveCardRecord(pQuery,&a);
      if(rc)rc=PostDataSet(pQuery);
      if(!rc)ShowTableError(0);
     }
    if(rc){//显示Grid的nIndex行内容
      pCardForm->m_DelBut->Enabled=TRUE;
      pCardForm->m_EditBut->Enabled=TRUE;
      SetCardNoOnForm(pCardForm,a.nCardNo+1);
     }
   }
  nFlag=FALSE;
  return(rc);
 }
//根据设定生成卡片数据
int GetCardDataOnForm(TCardForm *pForm,CARDDATA *pCard)
 {
  int nCRNo,nReaderNo;

  ZeroMemory(pCard,sizeof(CARDDATA));

  pCard->nType = atoi(pForm->m_CardTypeCoBox->Text.c_str());
  pCard->nCardNo = atoi(pForm->m_CardNoEdit->Text.c_str());
  nCRNo = atoi(pForm->m_CRCoBox->Text.c_str());
  nReaderNo = atoi(pForm->m_ReaderCoBox->Text.c_str());
  return(MAKELONG(nCRNo,nReaderNo));
 }
//根据设定卡片起始编号
int SetCardNoOnForm(TCardForm *pForm,int nCardNo)
 {
  SetIntToControl(pForm->m_CardNoEdit,nCardNo);//设置整数值到子控制中
  return(nCardNo);
 }
//获取相同内容的其它记录(0=>无,1=>其它记录)
int GetOtherCardOnTable(CARDDATA *Sour,int nOld)
 {
  static char pszStop[]="添加/修改的感应卡片时,\n"
       "其卡号或内码不能为 0 值!";
  static char pszText[]="添加/修改的感应卡片\n"
       "其卡号:\"%u\"或内码:\"%u\"\n\n"
      "已经有重复!";
  char szBuf[200];
  int nRec,rc;
  TADOQuery *pQuery;

  rc=FALSE;
  if(Sour->nCardNo==0 || Sour->nCardID==0){
    MessageBeep(MB_OK);
    Application->MessageBox(pszStop,GetMainTitle(),
       MB_OK|MB_ICONSTOP|MB_APPLMODAL);
    return(TRUE);
   }
  wsprintf(szBuf,"CARDNO=%u OR CARDID=%u",Sour->nCardNo,Sour->nCardID);
  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  nRec=QueryOneADOTable(pQuery,GetCardTableName(),szBuf,NULL);
  if(nRec>0){
    if(nOld<=0)rc=TRUE;
    else if(nRec>1)rc=TRUE;
    else {
      nRec = GetRecordIDOnTable(pQuery);
      if(nRec!=nOld)rc=TRUE;
     }
   }
  if(rc){
    wsprintf(szBuf,pszText,Sour->nCardNo,Sour->nCardID);
    Application->MessageBox(szBuf,GetMainTitle(),
       MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
   }
  return(rc);
 }

//获取相同内容的其它记录(0=>无,1=>其它记录)
int GetOtherCardOnTable(TADOQuery *pQuery,CARDDATA *Sour,int nOld)
 {
  static char pszText[]="添加/修改的感应卡片\n"
       "其卡号:\"%u\"或内码:\"%u\"\n\n"
      "已经有重复!";
  char szBuf[200];
  TLocateOptions Opts;
  Variant locvalues[1];
  int  nCardNo,nCardID;
  int nNew,rc;

  Opts.Clear();

  nCardNo = Sour->nCardNo;
  nCardID=Sour->nCardID;

  if(nCardNo!=0){
    locvalues[0].PutElement(nCardNo,0);
    // = Variant(nCardNo,varInteger);
    rc=pQuery->Locate("CARDNO", VarArrayOf(locvalues, 0), Opts);
   }
  else{
    locvalues[0] = Variant(nCardID);
    rc=pQuery->Locate("CARDID", VarArrayOf(locvalues, 0), Opts);
   }
  if(rc){
    nNew = GetCurRecno(pQuery);//获取当前记录号
    if(nNew!=nOld)rc=TRUE;
    else rc=FALSE;
   }
  if(rc){
    wsprintf(szBuf,pszText,Sour->nCardNo,Sour->nCardID);
    Application->MessageBox(szBuf,GetMainTitle(),
       MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
   }
  if(nOld>0)//移到指定记录
    GotoRecordOnTable(pQuery,nOld);

  return(rc);
 }

//---------------------------------------------------------------------------
void __fastcall TCardForm::m_InqButClick(TObject *Sender)
{
 int rc;
 char *pszStr,szOrder[50];
 TADOQuery *pQuery;

 pszStr = new char[500];
 rc=(int)pszStr;
 if(rc){
   pQuery = (TADOQuery *)m_CardDataSource->DataSet;
   rc=(int)pQuery;
  }
 if(rc)
   rc=  ReworkInqCard(this,pszStr,500);//输入查询多条件
 if(rc){     //获取SQL查询Where条件
   GetQueryOrderBy(pQuery->SQL,szOrder);
   QueryOneADOTable(pQuery,GetCardTableName(),pszStr,szOrder);
  }
 if(pszStr!=NULL)delete[] pszStr;
}
//---------------------------------------------------------------------------
void __fastcall TCardForm::m_CardDataSourceDataChange(TObject *Sender,
      TField *Field)
{
 TDataSet *pQuery;
 int m,n;
 char szBuf[50];

 if(Field==NULL){//多个字段同时变化,即当前记录已变化
   pQuery =m_CardDataSource->DataSet;
   n= GetAllRecNum(pQuery);//获取总记录数
   m=GetCurRecno(pQuery);//获取当前记录号
   wsprintf(szBuf,"%d/%d",m,n);
   m_RecNumPanel->Caption=szBuf;
  } 
}
//---------------------------------------------------------------------------



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -