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

📄 userdata.cpp

📁 停车场用
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   GetQueryWhereName(pQuery->SQL,szBuf);
   QueryOneADOTable(pQuery,GetUserTableName(),szBuf,pszName[rc]);
  }
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_AddButClick(TObject *Sender)
{
  TDataSet *pQuery;
  USERDATA a;
  int rc;

  pQuery = m_TextDataSource->DataSet;
  rc = (int)pQuery;
  ZeroMemory(&a,sizeof(USERDATA));
  while(rc){
    rc=ReworkUser(this,&a,0);
    if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
      rc = !GetOtherUserOnTable(&a,-1);
      if(rc)break;
     }
    else break;
   }
  if(rc)rc=SaveToHolderTable(&a,0); //保存到HolderData数据表
  if(rc){
    rc=AppendDataSet(pQuery);
    if(rc){
       SaveUserRecord(pQuery,&a);
       //写入Blob字段内容
       SetFieldBlobOnTable(pQuery,GetCarPhotoFieldName(),a.pPhoto);
      }
    if(rc)rc=PostDataSet(pQuery);
    if(!rc)ShowTableError(0);
   }
  if(rc){//显示Grid的nIndex行内容
    m_DelBut->Enabled=TRUE;
    m_EditBut->Enabled=TRUE;
   }
  DeleteBlobData(a.pPhoto);
 }
//保存到HolderData数据表(nMode==0 追加)
int SaveToHolderTable(USERDATA *t,int nMode)
 {
  HOLDERDATA a;
  int rc,n;
  TADOQuery *pQuery;
  char szBuf[30];

  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  n = t->nHolderNo;
  if(n>0) wsprintf(szBuf,"RECORDID=%d",n);
  else szBuf[0]=0;
  rc=QueryOneADOTable(pQuery,GetHolderTableName(),szBuf,NULL);
  if(rc>=0){
   UserDataToHolder(&a,t);
   if(rc==0 || n==0) rc=AppendDataSet(pQuery);
   else  rc=EditDataSet(pQuery);
   if(rc)SaveHolderRecord(pQuery,&a);
   if(rc)rc=PostDataSet(pQuery);
   if(rc)t->nHolderNo=GetRecordIDOnTable(pQuery);
   else ShowTableError(nMode);
   }
  else rc=FALSE;
  return(rc);
 }
//转化UserData为HolderData
void *UserDataToHolder(HOLDERDATA *Dest,USERDATA *Sour)
 {
  ZeroMemory(Dest,sizeof(HOLDERDATA));

  lstrcpyn(Dest->szHolderName,Sour->szCarTag,sizeof(Dest->szHolderName));
  Dest->nHolderNo = Sour->nHolderNo;
  Dest->nStatus = Sour->nStatus;
  return(Dest);
 }
//删除HolderData数据表(RecordID=t->HolderNo)记录
int DelCurRecordOnHolderTable(USERDATA *t)
 {
  char szBuf[30];
  int rc;
  TADOQuery *pQuery;

  //用OtherADOQuery元件删除一个表中记录
  wsprintf(szBuf,"RECORDID=%d",t->nHolderNo);
  pQuery = (TADOQuery *)GetOtherQuery();
  rc=EmptyOneADOTable(pQuery,GetHolderTableName(),szBuf);//删除表中数据
  return(rc);
 }
//获取相同内容的其它记录(0=>无,1=>其它记录)
int GetOtherUserOnTable(USERDATA *Sour,int nOld)
 {
  static char pszText[]="添加/修改的车主用户\n"
       "其车牌号码:\"%s\"\n\n已经有重复!";
  char szBuf[100];
  int nRec,rc;
  TADOQuery *pQuery;

  rc=FALSE;
  wsprintf(szBuf,"CARTAG=\'%s\'",Sour->szCarTag);
  //用OtherADOQuery元件查询一个表中记录
  pQuery = (TADOQuery *)GetOtherQuery();
  nRec=QueryOneADOTable(pQuery,GetUserTableName(),szBuf,NULL);
  if(nRec>0){
    if(nOld<=0)rc=TRUE;//添加时,存在一个记录即为重复
    else if(nRec>1)rc=TRUE;//修改时,存在二个记录即为重复
    else {
      SetCurTable(pQuery);
      nRec=GetFieldInt("HOLDERNO");
      if(nRec!=nOld)rc=TRUE;//修改时,记录号不一致
     }
   }
  if(rc){
    wsprintf(szBuf,pszText,Sour->szCarTag);
    Application->MessageBox(szBuf,GetMainTitle(),
       MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
   }
  return(rc);
 }
void __fastcall TUserForm::m_DelButClick(TObject *Sender)
{
  static char   pszText[]="是否真的永久(不可恢复地)删除\n\n"
         "编号为:\"%d\", 类型为:\"%s\"\n的当前车主用户?",
      pszHolder[]= "当前车主用户已领用卡片!\n\n删除前, 请先注销其领用卡片。";
  char szBuf[200],szStr[20];
  TADOQuery *pQuery,*pOther;
  USERDATA a;
  int rc,n;

  pQuery = (TADOQuery *)m_TextDataSource->DataSet;
  rc = (int)pQuery;
  if(rc){
      ReadUserRecord(pQuery,&a);
      GetUserTypeText(szStr,a.nUserType);
      wsprintf(szBuf,pszText,a.nHolderNo,szStr);
      rc= Application->MessageBox(szBuf,GetMainTitle(),
         MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2|MB_APPLMODAL);
      if(rc==IDYES)rc=TRUE;
      else rc=FALSE;
     }
  if(rc){//确认是否领用卡片
    rc=!GetUserHoldFlag(&a);
    if(rc==0)
      Application->MessageBox(pszHolder,GetMainTitle(),
         MB_OK|MB_ICONINFORMATION|MB_APPLMODAL);
   }
  if(rc){//删除当前记录
    DelCurRecordOnHolderTable(&a);//在HolderTable表删除记录
    rc=DelCurRecordOnTable(pQuery);//删除当前一条记录
   }

  if(rc){ //正确删除
    n= GetAllRecNum(pQuery);//获取总记录数
    if(n<=0)
     { m_DelBut->Enabled=FALSE; m_EditBut->Enabled=FALSE; }
   }
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_EditButClick(TObject *Sender)
{
  TDataSet *pQuery;
  USERDATA a;
  int rc,nCount;

  pQuery = m_TextDataSource->DataSet;
  rc = (int)pQuery;
  if(rc){
    ReadUserRecord(pQuery,&a);
    a.pPhoto = GetFieldBlobOnTable(pQuery,GetCarPhotoFieldName());
    rc=a.nHolderNo; //持卡者编号必须>0
   }
  while(rc){
    rc=ReworkUser(this,&a,1);
    if(rc){ //获取相同内容的其它记录(0=>无,1=>其它记录)
      rc = !GetOtherUserOnTable(&a,a.nHolderNo);
      if(rc)break;
     }
    else break;
   }
  if(rc)rc=SaveToHolderTable(&a,1); //保存到HolderData数据表
  if(rc){
    rc=EditDataSet(pQuery);
    if(rc){
      SaveUserRecord(pQuery,&a);
      //写入Blob字段内容
      SetFieldBlobOnTable(pQuery,GetCarPhotoFieldName(),a.pPhoto);
     }
    if(rc)rc=PostDataSet(pQuery);
    if(!rc)ShowTableError(1);
   }
  DeleteBlobData(a.pPhoto);
}
//---------------------------------------------------------------------------
void __fastcall TUserForm::m_TextDBGridDrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{
 TDataSet *pQuery;
 USERDATA a;
 char szBuf[30];
 int n,nEmpty;

  pQuery = m_TextDataSource->DataSet;
  nEmpty = pQuery->IsEmpty();
  if(nEmpty==0){//非空记录
    if(DataCol==1){//用户类型
      ReadUserRecord(pQuery,&a);
      GetUserTypeText(szBuf,a.nUserType);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==2){//卡片编号
      ReadUserRecord(pQuery,&a);
      GetNumberText(szBuf,a.nCardNo);
      SetDBGridText(Sender,Rect,Column,szBuf);//设置DB格栅文字
     }
    else if(DataCol==3){//状态
      ReadUserRecord(pQuery,&a);
      n = GetUserNormalFlag(&a); //获取是否正常状态
      if(n)n=-1;else n=clSilver;
      SetDBGridText(Sender,Rect,Column,GetUserStatusText(&a),n);//设置DB格栅文字
     }
    }
  if(DataCol==3 && State.Contains(gdSelected)){//显示格栅
    if(nEmpty==0){
      a.pPhoto = GetFieldBlobOnTable(pQuery,GetCarPhotoFieldName());
      ShowCurRecord(this,&a);
      DeleteBlobData(a.pPhoto);
     }
    else ClearCurRecord(this);//清除当前停车记录
   }
 }
//显示当前记录
void ShowCurRecord(TUserForm *te,USERDATA *t)
 {
  char szBuf[30];

   te->m_UserNamePanel->Caption=t->szUserName;
   te->m_AddressPanel->Caption=t->szAddress;
   te->m_CarTypePanel->Caption=t->szCarType;
   te->m_CarTagPanel->Caption=t->szCarTag;
   te->m_PhonePanel->Caption=t->szPhone;
   te->m_CarColorPanel->Caption=t->szCarColor;

   GetNumberText(szBuf,t->nHolderNo);
   te->m_HolderNoPanel->Caption=szBuf;

   GetUserTypeText(szBuf,t->nUserType);
   te->m_UserTypePanel->Caption=szBuf;

   GetDWORDDateText(szBuf,t->nBeginDate);
   te->m_BeginDatePanel->Caption=szBuf;
   GetDWORDDateText(szBuf,t->nEndDate);
   te->m_EndDatePanel->Caption=szBuf;

   if(t->nHolderNo!=0)
      sprintf(szBuf,"%-9.2f",t->fMoney);
   else szBuf[0]=0; //记录不存在
   te->m_MoneyPanel->Caption=szBuf;

   te->m_StatePanel->Caption=GetUserStatusText(t);
  //显示车辆图片
   ShowOneImage(te->m_CarImage,t->pPhoto);
  }
//清除当前停车记录
void ClearCurRecord(TUserForm *te)
 {
  TControl *pControl;
  int i;
  char szBuf[10];

  szBuf[0]=0;
  for(i=0; i<100;i++){
    pControl = (TControl *)GetChildComponent(te,i+100);//返回子元件
    if(pControl !=NULL)
      pControl->SetTextBuf(szBuf);
   }
  ShowOneImage(te->m_CarImage,NULL);  //显示车辆图片
 }

//---------------------------------------------------------------------------
void __fastcall TUserForm::m_TextDataSourceDataChange(TObject *Sender,
      TField *Field)
{
 TDataSet *pQuery;
 int m,n;
 char szBuf[50];

 if(Field==NULL){//多个字段同时变化,即当前记录已变化
   pQuery =m_TextDataSource->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 + -